Connectors
Microsoft Teams
Connect your Microsoft Teams to SurfSense
Microsoft Teams OAuth Integration Setup Guide
This guide walks you through setting up a Microsoft Teams OAuth integration for SurfSense using Azure App Registration.
Step 1: Access Azure App Registrations
- Navigate to portal.azure.com
- In the search bar, type "app reg"
- Select "App registrations" from the Services results

Step 2: Create New Registration
- On the App registrations page, click "+ New registration"

Step 3: Register the Application
Fill in the application details:
| Field | Value |
|---|---|
| Name | SurfSense |
| Supported account types | Select "Accounts in any organizational directory (Any Microsoft Entra ID tenant - Multitenant) and personal Microsoft accounts" |
| Redirect URI | Platform: Web, URI: http://localhost:8000/api/v1/auth/teams/connector/callback |
Click "Register"

Step 4: Get Application (Client) ID
After registration, you'll be taken to the app's Overview page. Here you'll find:
- Copy the Application (client) ID - this is your Client ID
- Note the Directory (tenant) ID if needed

Step 5: Create Client Secret
- In the left sidebar under Manage, click "Certificates & secrets"
- Select the "Client secrets" tab
- Click "+ New client secret"
- Enter a description (e.g.,
SurfSense) and select an expiration period - Click "Add"

- Important: Copy the secret Value immediately - it won't be shown again!

⚠️ Never share your client secret publicly or include it in code repositories.
Step 6: Configure API Permissions
- In the left sidebar under Manage, click "API permissions"
- Click "+ Add a permission"
- Select "Microsoft Graph"
- Select "Delegated permissions"
- Add the following permissions:
| Permission | Type | Description | Admin Consent |
|---|---|---|---|
Channel.ReadBasic.All | Delegated | Read the names and descriptions of channels | No |
ChannelMessage.Read.All | Delegated | Read user channel messages | Yes |
offline_access | Delegated | Maintain access to data you have given it access to | No |
Team.ReadBasic.All | Delegated | Read the names and descriptions of teams | No |
User.Read | Delegated | Sign in and read user profile | No |
- Click "Add permissions"
⚠️ The
ChannelMessage.Read.Allpermission requires admin consent. An admin will need to click "Grant admin consent for [Directory]" for full functionality.

Running SurfSense with Microsoft Teams Connector
Add the Microsoft Teams environment variables to your Docker run command:
docker run -d -p 3000:3000 -p 8000:8000 \
-v surfsense-data:/data \
# Microsoft Teams Connector
-e TEAMS_CLIENT_ID=your_microsoft_client_id \
-e TEAMS_CLIENT_SECRET=your_microsoft_client_secret \
-e TEAMS_REDIRECT_URI=http://localhost:8000/api/v1/auth/teams/connector/callback \
--name surfsense \
--restart unless-stopped \
ghcr.io/modsetter/surfsense:latest