Introduction
Use system-to-system authentication when a backend service, custom agent, or scheduled job needs to call the Docebo MCP server without a person signing in.
For an overview of the available authentication methods, see Docebo MCP server authentication and authorization.
Your service uses the OAuth 2.0 JWT Bearer grant to obtain a Docebo access token. The access token represents a specific Docebo user, and every MCP tool runs with that user's existing permissions.
For detailed information about the JWT Bearer grant, see Using the JWT Bearer grant type in the APIs authentication article.
This article is intended for Docebo Superadmins.
How it works
A Superadmin creates an OAuth2 application in Docebo, enables the JWT Bearer grant, and uploads the public key for the integration.
Your backend service creates and signs a JWT with its private key. The JWT identifies the OAuth2 application and the Docebo user whose permissions the service will use.
Your service sends the signed JWT to the Docebo OAuth token endpoint and receives a Docebo access token.
Your service sends the access token with every request to an enabled Docebo MCP server. Each tool runs with the permissions of the Docebo user identified in the JWT.
Before configuring the integration, activate the API and SSO app in your Docebo platform, identify the Docebo user whose permissions the integration will use, and create an enabled MCP server with the required tools.
Step 1: Create an OAuth2 application in Docebo
Create an OAuth2 application to identify your integration and store the public key used to verify its JWTs.
Log into your Docebo platform as a Superadmin.
Follow the instructions in the Activating and managing the API and SSO app article to create a new OAuth2 application.
During setup, use the following configuration:
App Name: Docebo MCP Server (system-to-system)
App Description: App to connect Docebo MCP Server
Client ID: Enter a unique identifier. Your service uses this value as the
issclaim when it creates a JWT.Client Secret: Docebo generates this value automatically. It is not used by the JWT Bearer grant.
Redirect URI: This flow does not use browser redirection, but the field requires a value. Enter your platform domain, for example,
https://yourcompany.docebosaas.com.
Select Show advanced settings.
Under Grant types, select JWT bearer.
In the JWT bearer section, select Upload public key and upload the public key that corresponds to the private key your service will use to sign JWTs.
Select Confirm.
Note the Client ID. Your service needs it when generating JWTs.
Step 2: Generate and sign a JWT
Your service must generate a JWT and sign it with the private key corresponding to the public key uploaded in the OAuth2 application.
Use the RS256 signature algorithm and include the claims required for the JWT Bearer grant.
For this integration:
Set
issto the Client ID of the OAuth2 application created in Step 1.Set
subto the username of the Docebo user whose permissions the integration must use.Set
audto the hostname of your Docebo platform, without the protocol. For example,yourcompany.docebosaas.com.Set
iatto the time the JWT was created, as a Unix timestamp.Set
expto the time the JWT expires, as a Unix timestamp.
The value of the sub claim determines the permissions available to the integration. For example, an integration that uses a learner's username cannot run administrator tools.
Step 3: Exchange the JWT for an access token
Send the signed JWT to the Docebo OAuth token endpoint:
https://[docebo-instance-name]/oauth2/tokenUse the JWT Bearer grant type and the api scope.
The token endpoint returns an access token. This is the token that your service must send when calling the Docebo MCP server.
Step 4: Call the MCP server
Copy the URL of the enabled MCP server from the MCP Configurator.
Your service must send the access token in the Authorization header on every request to the MCP server:
Authorization: Bearer <access_token>The implementation depends on the MCP client or SDK used by your service. Configure it to retrieve a new Docebo access token when needed and include that token in the Authorization header.
Step 5: Renew the access token
Access tokens expire. Before the token expires, generate and sign a new JWT, then repeat Step 3 to obtain a new access token.
Your service must use the new access token for subsequent MCP requests.