SharePoint Managed MCP Server
The SharePoint managed MCP server lets agents read SharePoint sites, document libraries, lists, and files, upload files, and search content through the Microsoft Graph API. Each agent caller authenticates against Microsoft with their own identity through user-delegated OAuth, so every call stays bounded by the signed-in user’s own SharePoint permissions: the server never holds workspace-wide access.
After reading this page, you will be able to:
-
Register a Microsoft Entra app and an OAuth provider for the SharePoint managed MCP server
-
Create the SharePoint managed MCP server with the correct Microsoft Graph scopes
-
Authorize a user and run the SharePoint tools from the Inspector or an agent
|
The SharePoint managed MCP server is in beta. If you don’t see SharePoint in the picker, contact Redpanda support. |
What this MCP server does
The SharePoint managed type wraps the Microsoft Graph API (https://graph.microsoft.com/v1.0) and authenticates per user through the gateway’s token vault. Per-user OAuth is the only authentication mode this type supports. It exposes the following tools:
| Tool | What it does |
|---|---|
|
Search for SharePoint sites. The search term passes straight to Graph’s |
|
Fetch a single site by composite ID ( |
|
Browse a site’s default document library. Lists the library root by default; pass |
|
Read a file from a site’s document library as UTF-8 text, with its filename, MIME type, and size. |
|
Upload a text file to a site’s document library, into the root or a folder. Requires the |
|
Search across all SharePoint sites, files, and list items the user can see. The query supports Keyword Query Language (KQL). |
|
List the SharePoint lists on a site. Hidden lists are excluded. |
|
List the items in a SharePoint list, with each item’s column values returned as JSON in |
The file tools operate on the site’s own default document library (/sites/<site-id>/drive/…), never on a user’s personal OneDrive. File content travels as UTF-8 text in both directions: downloads through get_file_content are capped at 10 MiB, and uploads through upload_file are capped at 4 MiB (the Microsoft Graph simple-upload limit). Binary files aren’t supported; open the web_url returned by list_drive_items to access them directly.
The list_sites, list_drive_items, and list_list_items tools return up to 100 items by default and accept a page_size of up to 999. The search_content tool returns up to 25 hits by default and accepts a page_size of up to 500. The list_lists tool takes no page_size.
Prerequisites
Before you create the server, make sure you have:
-
Access to a Microsoft SharePoint tenant.
-
Permission to register an app in the Microsoft Entra admin center (or an Entra admin who can register one for you).
-
A way to write the OAuth client secret into the Redpanda ADP secret store.
-
For most tenants, a tenant admin who can grant admin consent for the Microsoft Graph scopes. See Grant admin consent.
-
Familiarity with user-delegated OAuth.
Register the Microsoft Entra app
In the Microsoft Entra admin center, go to App registrations > New registration and create an app:
-
Give the app a descriptive name, for example,
Redpanda AI Gateway - SharePoint MCP. -
Set Supported account types to single tenant.
-
Set the Redirect URI to platform Web with the gateway’s OAuth callback for your cluster:
https://aigw.<cluster-id>.clusters.rdpa.co/oauth/v1/callbackReplace
<cluster-id>with your cluster identifier. The callback path is/oauth/v1/callback.
-
After registering, note the Application (client) ID and Directory (tenant) ID from the app’s Overview page. You need both when you configure the OAuth provider.
|
Single-tenant apps must use the tenant-specific Microsoft OAuth endpoints ( |
Add Microsoft Graph permissions
In the Microsoft Entra admin center, open the app’s API permissions, select Add a permission > Microsoft Graph > Delegated permissions, then add:
| Scope | Why |
|---|---|
|
Read and write everything the server touches: sites, document libraries, files, lists, and |
|
Issues refresh tokens so connections stay valid over time. |
The openid, profile, email, and User.Read scopes come from the OAuth provider’s standard scopes.
|
Use the Microsoft Graph permissions, not the legacy Office 365 SharePoint Online API in the picker. The server calls Microsoft Graph only. Use the |
Create a client secret
In the Microsoft Entra admin center, open the app’s Certificates & secrets and select New client secret. Give it a description, choose an expiry, and select Add. Copy the secret value immediately; Microsoft never shows it again.
Store the secret in the ADP secret store under an UPPER_SNAKE_CASE key, for example, SHAREPOINT_CLIENT_SECRET. The OAuth provider references the secret by name, so the plaintext never enters the MCP server configuration.
Grant admin consent
The SharePoint Graph scopes are high-privilege delegated scopes, so most tenants require a tenant admin to consent before any user can connect. A Global Administrator, Privileged Role Administrator, or Cloud Application Administrator opens the app, selects API permissions, then selects Grant admin consent for <org>.
Admin consent does not escalate access: delegated scopes always stay bounded by the signed-in user’s own SharePoint permissions. Admin consent approves the app to request the scopes so that individual users aren’t each prompted. Without it, a non-admin user sees the Need admin approval message on the consent screen.
Configure the OAuth provider
Register an OAuth provider in ADP that points at Microsoft’s tenant-specific endpoints and references the client secret. See Configure an OAuth Provider. The Microsoft / Azure AD preset in the provider catalog pre-fills the endpoints, standard scopes, PKCE, and token auth method; for a single-tenant app, replace its /common/ endpoints with the tenant-specific ones. Use these values:
-
Authorization endpoint:
https://login.microsoftonline.com/<tenant-id>/oauth2/v2.0/authorize -
Token endpoint:
https://login.microsoftonline.com/<tenant-id>/oauth2/v2.0/token -
Client ID: The Application (client) ID from the Entra app.
-
Client secret reference: The secret-store key, for example,
SHAREPOINT_CLIENT_SECRET. -
Token auth method: Client secret in the POST body, with PKCE enabled (matches the Microsoft preset).
-
Scopes:
openid,email,profile,User.Read,Sites.ReadWrite.All,offline_access.
The provider page also shows the Authorization Callback URL to register as the Entra app’s redirect URI.
Create the server
Create a new SharePoint MCP server in ADP:
-
Open MCP Servers > Create server.
-
Pick SharePoint from the marketplace picker.
-
Fill in the identity fields (
name,description). -
Under Auth, select User OAuth (the only option for this type), then set Provider Name to the SharePoint OAuth provider you configured.
-
Under Required Scopes, add
Sites.ReadWrite.All(orSites.Read.Allfor a read-only server).
-
Click Submit.
The required scopes are enforced against each user’s connection. A connection with insufficient scopes returns scope_upgrade_required, and the user re-consents with the higher scope.
Configure from the CLI
Use rpk ai to create the server with a managed config. Set the OAuth provider inside the managed config; the top-level --user-oauth-provider and --user-oauth-scopes flags apply to self-managed servers only.
rpk ai mcp create --name sharepoint \
--description "SharePoint MCP over Microsoft Graph with per-user OAuth" \
--managed-config '{
"@type": "type.googleapis.com/redpanda.mcps.sharepoint.v1.SharePointMCPConfig",
"userOauth": {
"providerName": "sharepoint",
"requiredScopes": ["Sites.ReadWrite.All"]
}
}'
Authorize a user and test
The SharePoint server uses per-user OAuth, so each user connects their Microsoft identity before tools work for them:
-
Open the server in ADP. If you haven’t connected to the SharePoint OAuth provider yet, a connection banner with a Connect button appears above the server’s tabs. Click Connect, sign in to Microsoft, and approve the consent screen. The token lands in the vault keyed to your identity.
If you call a tool before connecting, the call returns an
OAuthConnectionRequirederror carrying anauthorize_urlthat points at the gateway’s/oauth/v1/authorizeendpoint. Opening that URL in a browser starts the same Microsoft consent flow.
-
Open the server’s Inspector tab and run
list_siteswith the argument{"search": "*"}. It returns the sites you can see. See Test an MCP Server’s Tools with the Inspector.
|
The |
Troubleshooting
| Symptom | What to check |
|---|---|
|
First call from a user with no stored token. The user completes Microsoft’s OAuth consent flow, the token lands in the vault, and subsequent calls reuse it. See User-delegated OAuth. |
Need admin approval on the Microsoft consent screen |
A tenant admin hasn’t granted admin consent for the Graph scopes. See Grant admin consent. |
|
The user’s connection has fewer scopes than the server requires, either because the server’s required scopes grew or because the user originally consented with fewer. The user re-consents with the higher scope. |
|
A single-tenant app is using the |
|
The signed-in user lacks permission on that site, file, or list. Graph errors surface only the HTTP status and Graph error code; the upstream error message is withheld. |
|
An empty search returns nothing. Pass |
|
The |
|
Downloads are capped at 10 MiB. Open the file’s |
Token expired and no refresh token available |
The stored token expired and couldn’t be refreshed. Confirm |