Skip to content

Connect to Microsoft MCP integrations

Most Microsoft MCP integrations use the same connection pattern:

  1. Create an app registration in Microsoft Entra ID.
  2. Create a client secret.
  3. Create the integration in Nango and add the client ID and client secret.
  4. Copy the OAuth callback URL from Nango and add it to the app registration as a Web redirect URI under Authentication.
  5. Add the Microsoft API permissions required by the integration.
  6. Complete the Microsoft authorization flow.

This page covers the common setup. Each Microsoft integration still has its own permission list. Use the permission list provided by Kindo for the integration you are connecting.

Use this guide for Microsoft integrations that authenticate through Microsoft Entra ID, including:

  • Microsoft Defender
  • Microsoft eDiscovery
  • Microsoft Entra ID
  • Microsoft Entra ID Governance
  • Microsoft Excel Online
  • Microsoft Fabric
  • Microsoft Graph Security
  • Microsoft Intune
  • Microsoft Outlook
  • Microsoft Outlook Calendar
  • Microsoft Purview Compliance
  • Microsoft Purview Data Governance
  • Microsoft Teams
  • SharePoint Online

Some integrations need extra tenant, endpoint, subscription, or target-user values. If Kindo gives you additional fields for a specific integration, enter them in the Kindo integration form after you complete the common Entra setup.

  • A Microsoft Entra ID tenant.
  • Permission to create or update app registrations in that tenant.
  • Permission to grant admin consent if the requested Microsoft API permissions require it.
  • Access to the Nango dashboard for your Kindo deployment.
  • The permission list for the Microsoft integration you are connecting.
  1. Open the Microsoft Entra admin center.

  2. Go to Entra ID > App registrations.

  3. Click New registration.

  4. Enter a clear name, such as Kindo Microsoft MCP or Kindo - <Integration Name>.

  5. Choose the supported account type for your tenant. For most enterprise setups, choose Accounts in this organizational directory only.

  6. Leave Redirect URI empty for now. You will add the OAuth callback URL from Nango in a later step.

  7. Click Register.

  1. Open the app registration you just created.

  2. Go to Overview.

  3. Copy Application (client) ID.

  4. If the Kindo integration asks for it, also copy Directory (tenant) ID.

  1. In the app registration, go to Certificates & secrets.

  2. Open the Client secrets tab.

  3. Click New client secret.

  4. Add a description, such as Kindo integration.

  5. Choose an expiration period that matches your organization’s policy.

  6. Click Add.

  7. Copy the secret Value immediately.

  1. Open the Nango dashboard for your Kindo deployment.

  2. Create a new integration for the Microsoft MCP you are connecting.

  3. Enter the values from your Entra app registration:

    FieldWhere to find it
    Client IDApp registration > Overview > Application (client) ID
    Client SecretApp registration > Certificates & secrets > Client secrets > Value
    Tenant IDApp registration > Overview > Directory (tenant) ID, if requested
  4. Add any integration-specific fields that are requested, such as a Purview endpoint URL, Azure subscription ID, or target user ID.

  5. Save the integration.

  6. Copy the OAuth callback URL shown in the Nango integration setup. You need it in the next step.

    The callback URL usually ends with:

    /oauth/callback

Step 5: Add the Nango callback URL to the app registration

Section titled “Step 5: Add the Nango callback URL to the app registration”
  1. In the Microsoft Entra admin center, go back to your app registration.

  2. Go to Authentication.

  3. Under Platform configurations, click Add a platform and select Web.

  4. Paste the OAuth callback URL you copied from Nango as the Redirect URI.

  5. Save the configuration.

  1. In the app registration, go to API permissions.

  2. Click Add a permission.

  3. Select the Microsoft API required by your integration. Most Microsoft 365 integrations use Microsoft Graph.

  4. Choose Delegated permissions. Kindo integrations use delegated permissions only.

  5. Add the permissions from the integration-specific permission list.

  6. If required, click Grant admin consent.

Delegated permissions act as the signed-in user. The integration’s effective access is the intersection of two grants:

  • the permissions granted to the application, and
  • the permissions the signed-in user already has in the tenant.

The integration can never reach data the signed-in user cannot access themselves, and the user’s access through the integration is limited to what the registered application’s permissions allow. For example, if the app holds Sites.ReadWrite.All but the signed-in user only has read access to a SharePoint site, the integration cannot write to that site.

This integration uses permissions from three APIs: Microsoft Graph, Microsoft Threat Protection, and WindowsDefenderATP. All of them are Delegated permissions. Find Microsoft Threat Protection and WindowsDefenderATP under the APIs my organization uses tab when adding a permission.

Add the following Microsoft Graph permissions:

PermissionDescriptionAdmin consent required
SecurityActions.Read.AllRead your organization’s security actionsYes
SecurityActions.ReadWrite.AllRead and update your organization’s security actionsYes
SecurityEvents.Read.AllRead your organization’s security eventsYes
SecurityEvents.ReadWrite.AllRead and update your organization’s security eventsYes
User.ReadSign in and read user profileNo

Add the following Microsoft Threat Protection permissions:

PermissionDescriptionAdmin consent required
AdvancedHunting.ReadRun advanced hunting queriesYes
Incident.ReadRead incidentsYes

Add the following WindowsDefenderATP permissions:

PermissionDescriptionAdmin consent required
AdvancedQuery.ReadRun advanced queriesYes
Alert.ReadRead alertsYes
Alert.ReadWriteRead and write alertsYes
File.Read.AllRead file profilesYes
IntegrationConfiguration.ReadWriteRead and write integration settingsYes
Ip.Read.AllRead IP address profilesYes
Library.ManageManage live response library filesYes
Machine.CollectForensicsCollect forensicsYes
Machine.IsolateIsolate machineYes
Machine.LiveResponseRun live response on a specific machineYes
Machine.OffboardOffboard machineYes
Machine.ReadRead machine informationYes
Machine.ReadWriteRead and write machine informationYes
Machine.RestrictExecutionRestrict code executionYes
Machine.ScanScan machineYes
Machine.StopAndQuarantineStop and quarantine fileYes
RemediationTasks.ReadRead remediation tasksYes
Score.ReadRead Threat and Vulnerability Management scoreYes
SecurityBaselinesAssessment.ReadRead security baselines assessment informationYes
SecurityConfiguration.ReadRead security configurationsYes
SecurityConfiguration.ReadWriteRead and write security configurationsYes
SecurityRecommendation.ReadRead Threat and Vulnerability Management security recommendationsYes
Software.ReadRead Threat and Vulnerability Management software informationYes
Ti.ReadWriteRead and write IOCsYes
Url.Read.AllRead URL profilesYes
User.Read.AllRead user profilesYes
Vulnerability.ReadRead Threat and Vulnerability Management vulnerability informationYes

Add the following Microsoft Graph permissions. All of them are Delegated permissions.

PermissionDescriptionAdmin consent required
eDiscovery.Read.AllRead all eDiscovery objectsYes
eDiscovery.ReadWrite.AllRead and write all eDiscovery objectsYes
User.ReadSign in and read user profileNo
User.Read.AllRead all users’ full profilesYes

Add the following Microsoft Graph permissions. All of them are Delegated permissions.

PermissionDescriptionAdmin consent required
Application.Read.AllRead applicationsYes
Application.ReadUpdate.AllRead and update all appsYes
Application.ReadWrite.AllRead and write all applicationsYes
AuditLog.Read.AllRead audit log dataYes
AuditLogsQuery-Entra.Read.AllRead audit logs data from Entra (Azure AD) workloadYes
Directory.Read.AllRead directory dataYes
Directory.ReadWrite.AllRead and write directory dataYes
Group.Read.AllRead all groupsYes
Group.ReadWrite.AllRead and write all groupsYes
IdentityRiskEvent.Read.AllRead identity risk event informationYes
IdentityRiskEvent.ReadWrite.AllRead and write risk event informationYes
IdentityRiskyUser.Read.AllRead identity risky user informationYes
IdentityRiskyUser.ReadWrite.AllRead and write risky user informationYes
offline_accessMaintain access to data you have given it access toNo
Policy.Read.AllRead your organization’s policiesYes
Policy.Read.AuthenticationMethodRead authentication method policiesYes
Policy.Read.ConditionalAccessRead your organization’s conditional access policiesNo
Policy.Read.DeviceConfigurationRead your organization’s device configuration policiesYes
Policy.Read.IdentityProtectionRead your organization’s identity protection policyYes
Policy.Read.PermissionGrantRead consent and permission grant policiesYes
Policy.ReadWrite.ConditionalAccessRead and write your organization’s conditional access policiesYes
PrivilegedAccess.Read.AzureADRead privileged access to Azure ADYes
PrivilegedAccess.Read.AzureADGroupRead privileged access to Azure AD groupsYes
RoleManagement.Read.AllRead role management data for all RBAC providersYes
RoleManagement.Read.DirectoryRead directory RBAC settingsYes
RoleManagementAlert.Read.DirectoryRead all alert data for your company’s directoryYes
RoleManagementPolicy.Read.AzureADGroupRead all policies in PIM for GroupsYes
RoleManagementPolicy.Read.DirectoryRead all policies for privileged role assignments of your company’s directoryYes
SecurityIdentitiesUserActions.Read.AllRead identity security available user actionsYes
SecurityIncident.Read.AllRead incidentsYes
User.ReadSign in and read user profileNo
User.Read.AllRead all users’ full profilesYes
User.ReadBasic.AllRead all users’ basic profilesNo
User.ReadWrite.AllRead and write all users’ full profilesYes
UserAuthenticationMethod.ReadRead user authentication methodsYes
UserAuthenticationMethod.Read.AllRead all users’ authentication methodsYes

Add the following Microsoft Graph permissions. All of them are Delegated permissions.

PermissionDescriptionAdmin consent required
AccessReview.Read.AllRead all access reviews that user can accessYes
AccessReview.ReadWrite.AllManage all access reviews that user can accessYes
Directory.Read.AllRead directory dataYes
Directory.ReadWrite.AllRead and write directory dataYes
EntitlementManagement.Read.AllRead all entitlement management resourcesYes
LifecycleWorkflows-Reports.Read.AllRead all Lifecycle workflows reportsYes
LifecycleWorkflows-Workflow.ActivateRun workflows on demand in Lifecycle workflowsYes
LifecycleWorkflows-Workflow.Read.AllRead all workflows in Lifecycle workflowsYes
LifecycleWorkflows-Workflow.ReadBasic.AllList all workflows in Lifecycle workflowsYes
PrivilegedAssignmentSchedule.ReadWrite.AzureADGroupRead, create, and delete assignment schedules for access to Azure AD groupsYes
PrivilegedEligibilitySchedule.ReadWrite.AzureADGroupRead, create, and delete eligibility schedules for access to Azure AD groupsYes
RoleAssignmentSchedule.ReadWrite.DirectoryRead, update, and delete all active role assignments for your company’s directoryYes
RoleEligibilitySchedule.ReadWrite.DirectoryRead, update, and delete all eligible role assignments for your company’s directoryYes
RoleManagement.Read.DirectoryRead directory RBAC settingsYes
User.ReadSign in and read user profileNo

Add the following Microsoft Graph permissions. All of them are Delegated permissions.

PermissionDescriptionAdmin consent required
Files.ReadWriteHave full access to user filesNo
Files.ReadWrite.AllHave full access to all files user can accessNo
Sites.ReadWrite.AllEdit or delete items in all site collectionsNo
User.ReadSign in and read user profileNo

This integration authenticates as the app itself (a service principal using client credentials) instead of as a signed-in user, so its setup differs from the other integrations on this page:

  • No additional API permissions are required. The default User.Read permission that Entra adds to every new app registration is enough, and it does not need admin consent.
  • No redirect URI or user sign-in flow is needed. Skip Step 5, the Callback URL substep of Step 4, and the sign-in portion of Step 7. Use the Fabric connection form below instead of the Step 4 credentials table.
  • Access is controlled inside Microsoft Fabric, not in Entra. Queries run with the service principal’s permissions, so grant it only the read access you intend to expose.

Configure the service principal in Microsoft Fabric:

  1. In the Fabric admin portal, enable the Service principals can use Fabric APIs tenant setting.

  2. Open the target Fabric workspace and select Manage access.

  3. Add the app registration by name.

  4. Assign the least-privileged role that can reach the target Lakehouse or Warehouse — typically a Viewer role or explicit SELECT rights.

When linking the Microsoft Fabric account, the connection form asks for the following values:

FieldDescription
Tenant IDApp registration > Overview > Directory (tenant) ID
SQL Endpoint HostFull host,port of the Fabric Lakehouse SQL endpoint, for example foo.datawarehouse.fabric.microsoft.com,1433
Lakehouse DatabaseDatabase/lakehouse name
Client IDApp registration > Overview > Application (client) ID
Client SecretApp registration > Certificates & secrets > Client secrets > Value

Add the following Microsoft Graph permissions. All of them are Delegated permissions.

PermissionDescriptionAdmin consent required
IdentityRiskyUser.Read.AllRead identity risky user informationYes
IdentityRiskyUser.ReadWrite.AllRead and write risky user informationYes
SecurityAlert.Read.AllRead all security alertsYes
SecurityAlert.ReadWrite.AllRead and write to all security alertsYes
SecurityEvents.Read.AllRead your organization’s security eventsYes
SecurityIncident.Read.AllRead incidentsYes
SecurityIncident.ReadWrite.AllRead and write to incidentsYes
ThreatHunting.Read.AllRun hunting queriesYes
User.ReadSign in and read user profileNo

Add the following Microsoft Graph permissions. All of them are Delegated permissions.

PermissionDescriptionAdmin consent required
DeviceManagementApps.Read.AllRead Microsoft Intune appsYes
DeviceManagementConfiguration.Read.AllRead Microsoft Intune device configuration and policiesYes
DeviceManagementManagedDevices.PrivilegedOperations.AllPerform user-impacting remote actions on Microsoft Intune devicesYes
DeviceManagementManagedDevices.Read.AllRead Microsoft Intune devicesYes
User.ReadSign in and read user profileNo

Add the following Microsoft Graph permissions. All of them are Delegated permissions. This integration sends mail as the signed-in user — it does not need mail-reading permissions.

PermissionDescriptionAdmin consent required
Contacts.ReadRead user contactsNo
Mail.SendSend mail as a userNo
People.ReadRead users’ relevant people listsNo
User.ReadSign in and read user profileNo

Add the following Microsoft Graph permissions. All of them are Delegated permissions.

PermissionDescriptionAdmin consent required
Calendars.ReadRead user calendarsNo
Calendars.Read.SharedRead user and shared calendarsNo
Calendars.ReadBasicRead basic details of user calendarsNo
Calendars.ReadWriteHave full access to user calendarsNo
Calendars.ReadWrite.SharedRead and write user and shared calendarsNo
Contacts.ReadRead user contactsNo
People.ReadRead users’ relevant people listsNo
User.ReadSign in and read user profileNo

Add the following Microsoft Graph permissions. All of them are Delegated permissions.

PermissionDescriptionAdmin consent required
AuditLogsQuery.Read.AllRead audit logs data from all servicesYes
Content.Process.UserProcess content for data security, governance and complianceYes
Files.ReadWrite.AllHave full access to all files user can accessNo
InformationProtectionPolicy.ReadRead user sensitivity labels and label policiesNo
ProtectionScopes.Compute.UserCompute Purview policies for an individual userYes
SecurityAlert.ReadWrite.AllRead and write to all security alertsYes
SecurityIncident.ReadWrite.AllRead and write to incidentsYes
ThreatHunting.Read.AllRun hunting queriesYes
User.ReadSign in and read user profileNo
User.Read.AllRead all users’ full profilesYes

This integration uses permissions from two APIs: Microsoft Graph and Microsoft Purview. All of them are Delegated permissions. Find Microsoft Purview under the APIs my organization uses tab when adding a permission.

Add the following Microsoft Graph permission:

PermissionDescriptionAdmin consent required
User.ReadSign in and read user profileNo

Add the following Microsoft Purview permission:

PermissionDescriptionAdmin consent required
Purview.DelegatedAccessPurview Delegated API AccessNo

Add the following Microsoft Graph permissions. All of them are Delegated permissions.

PermissionDescriptionAdmin consent required
Channel.ReadBasic.AllRead the names and descriptions of channelsNo
ChannelMessage.Read.AllRead user channel messagesYes
ChannelMessage.ReadWriteRead and write user channel messagesYes
ChannelMessage.SendSend channel messagesNo
Chat.ReadWriteRead and write user chat messagesNo
offline_accessMaintain access to data you have given it access toNo
Team.ReadBasic.AllRead the names and descriptions of teamsNo
User.ReadSign in and read user profileNo

Add the following Microsoft Graph permissions. All of them are Delegated permissions.

PermissionDescriptionAdmin consent required
offline_accessMaintain access to data you have given it access toNo
Sites.Read.AllRead items in all site collectionsNo
Sites.ReadWrite.AllEdit or delete items in all site collectionsNo
User.ReadSign in and read user profileNo
  1. Start the connection flow from Kindo.

  2. Sign in with the Microsoft account that should authorize the integration.

  3. Review the requested permissions.

  4. Approve the connection.

  5. In Kindo, run a low-risk read action first, such as listing calendars, searching a site, or listing available records.

  6. After read access works, test any write actions in a safe test location before using the integration on production data.

If you look for an integration’s app under App registrations and only find it under Enterprise applications, you are looking at its service principal.

  • An app registration is the blueprint — the global definition of an application. It lives only in the tenant where the app was created.
  • An enterprise application (service principal) is an instance of that blueprint inside each tenant that uses the app. It is the app’s actual account in your directory.

What you see in your tenant depends on how you use Kindo:

  • Kindo SaaS: the app registration lives in Kindo’s tenant. The first time you authorize an integration, Entra ID creates a service principal in your tenant under Enterprise applications, and that is what you authenticate against on every subsequent connection. You will not see an app registration in your tenant.
  • Self-managed Kindo: you create the app registration in your own tenant by following the steps on this page. When the app is first authorized, Entra ID still creates a matching service principal under Enterprise applications.

In both cases, the service principal is what Microsoft Entra ID uses to let the app operate in your tenant:

  • It holds the permission grants. When a user or admin consents, the grant is recorded against the service principal. It is the ledger of what the app is allowed to access in your tenant.
  • It is the identity that tokens are issued to. When Entra ID issues the app an access token for your tenant, the service principal is the actor that token represents.
  • It is your admin’s control point. Your admin manages the app under Enterprise applications: assign or restrict users, apply Conditional Access policies, disable the app, or revoke its access — all without touching the underlying registration.
  • It is where sign-in and audit activity lands. Sign-in logs and consent events for the app in your tenant attach to the service principal.
ProblemWhat to check
Microsoft says the redirect URI is invalidMake sure the redirect URI in Entra exactly matches the callback URL shown in Nango, including https:// and /oauth/callback.
The consent screen does not show the expected permissionsConfirm the permissions were added to the same app registration whose client ID you entered in Nango. Reconnect after changing permissions.
Kindo reports Unauthorized or cannot refresh the connectionRecreate the connection and confirm the integration includes offline_access when delegated refresh is required.
Kindo reports ForbiddenThe signed-in user may not have access to the Microsoft resource, admin consent may be missing, or the app may not have the required permission.
A write action fails but read actions workThe app may have read-only permissions. Add only the specific write permission required by the integration.
  • Use least-privilege permissions for every Microsoft integration.
  • Rotate client secrets according to your organization’s policy.
  • Remove unused app registrations and old client secrets.
  • Keep a record of which Kindo integration uses each Entra app registration.