Searches and retrieves documents from an organisation's SharePoint through the Microsoft Graph API.
Setup
Choose your client, copy the config, then fill in any required environment variables.
claude mcp add sharepoint --env CLIENT_ID='<CLIENT_ID>' --env CLIENT_SECRET='<CLIENT_SECRET>' --env SITE_ID='<SITE_ID>' --env TENANT_ID='<TENANT_ID>' -- docker run -i --rm --init -e DOCKER_CONTAINER=true -e TENANT_ID=your-tenant-id -e CLIENT_ID=your-client-id -e CLIENT_SECRET=your-client-secret -e SITE_ID=your-site-id -e DRIVE_ID=your-drive-id mcp/sharepoint~/.codex/config.toml
[mcp_servers.sharepoint]
command = "docker"
args = ["run", "-i", "--rm", "--init", "-e", "DOCKER_CONTAINER=true", "-e", "TENANT_ID=your-tenant-id", "-e", "CLIENT_ID=your-client-id", "-e", "CLIENT_SECRET=your-client-secret", "-e", "SITE_ID=your-site-id", "-e", "DRIVE_ID=your-drive-id", "mcp/sharepoint"]
env = { CLIENT_ID = "<CLIENT_ID>", CLIENT_SECRET = "<CLIENT_SECRET>", SITE_ID = "<SITE_ID>", TENANT_ID = "<TENANT_ID>" }
# codex mcp add sharepoint --env CLIENT_ID='<CLIENT_ID>' --env CLIENT_SECRET='<CLIENT_SECRET>' --env SITE_ID='<SITE_ID>' --env TENANT_ID='<TENANT_ID>' -- docker run -i --rm --init -e DOCKER_CONTAINER=true -e TENANT_ID=your-tenant-id -e CLIENT_ID=your-client-id -e CLIENT_SECRET=your-client-secret -e SITE_ID=your-site-id -e DRIVE_ID=your-drive-id mcp/sharepoint~/.cursor/mcp.json
{
"mcpServers": {
"sharepoint": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"--init",
"-e",
"DOCKER_CONTAINER=true",
"-e",
"TENANT_ID=your-tenant-id",
"-e",
"CLIENT_ID=your-client-id",
"-e",
"CLIENT_SECRET=your-client-secret",
"-e",
"SITE_ID=your-site-id",
"-e",
"DRIVE_ID=your-drive-id",
"mcp/sharepoint"
],
"env": {
"CLIENT_ID": "<CLIENT_ID>",
"CLIENT_SECRET": "<CLIENT_SECRET>",
"SITE_ID": "<SITE_ID>",
"TENANT_ID": "<TENANT_ID>"
}
}
}
}.vscode/mcp.json
{
"servers": {
"sharepoint": {
"type": "stdio",
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"--init",
"-e",
"DOCKER_CONTAINER=true",
"-e",
"TENANT_ID=your-tenant-id",
"-e",
"CLIENT_ID=your-client-id",
"-e",
"CLIENT_SECRET=your-client-secret",
"-e",
"SITE_ID=your-site-id",
"-e",
"DRIVE_ID=your-drive-id",
"mcp/sharepoint"
],
"env": {
"CLIENT_ID": "<CLIENT_ID>",
"CLIENT_SECRET": "<CLIENT_SECRET>",
"SITE_ID": "<SITE_ID>",
"TENANT_ID": "<TENANT_ID>"
}
}
}
}~/.gemini/settings.json
{
"mcpServers": {
"sharepoint": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"--init",
"-e",
"DOCKER_CONTAINER=true",
"-e",
"TENANT_ID=your-tenant-id",
"-e",
"CLIENT_ID=your-client-id",
"-e",
"CLIENT_SECRET=your-client-secret",
"-e",
"SITE_ID=your-site-id",
"-e",
"DRIVE_ID=your-drive-id",
"mcp/sharepoint"
],
"env": {
"CLIENT_ID": "<CLIENT_ID>",
"CLIENT_SECRET": "<CLIENT_SECRET>",
"SITE_ID": "<SITE_ID>",
"TENANT_ID": "<TENANT_ID>"
}
}
}
}claude_desktop_config.json
{
"mcpServers": {
"sharepoint": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"--init",
"-e",
"DOCKER_CONTAINER=true",
"-e",
"TENANT_ID=your-tenant-id",
"-e",
"CLIENT_ID=your-client-id",
"-e",
"CLIENT_SECRET=your-client-secret",
"-e",
"SITE_ID=your-site-id",
"-e",
"DRIVE_ID=your-drive-id",
"mcp/sharepoint"
],
"env": {
"CLIENT_ID": "<CLIENT_ID>",
"CLIENT_SECRET": "<CLIENT_SECRET>",
"SITE_ID": "<SITE_ID>",
"TENANT_ID": "<TENANT_ID>"
}
}
}
}.trae/mcp.json
{
"mcpServers": {
"sharepoint": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"--init",
"-e",
"DOCKER_CONTAINER=true",
"-e",
"TENANT_ID=your-tenant-id",
"-e",
"CLIENT_ID=your-client-id",
"-e",
"CLIENT_SECRET=your-client-secret",
"-e",
"SITE_ID=your-site-id",
"-e",
"DRIVE_ID=your-drive-id",
"mcp/sharepoint"
],
"env": {
"CLIENT_ID": "<CLIENT_ID>",
"CLIENT_SECRET": "<CLIENT_SECRET>",
"SITE_ID": "<SITE_ID>",
"TENANT_ID": "<TENANT_ID>"
}
}
}
}Environment variables
CLIENT_IDCLIENT_SECRETSITE_IDTENANT_ID
Replace the placeholders with your own credentials and keep them out of version control.