Featured

Deploy OpenClaw in 60 seconds — 20% off logoDeploy OpenClaw in 60 seconds — 20% off

Launch OpenClaw on Hostinger in about 60 seconds and keep your agent live 24/7. Our referral link gives you 20% off, no coupon code needed.

Launch on Hostinger
Run your Hermes agent on Hostinger, fully managed logoRun your Hermes agent on Hostinger, fully managed

Launch Hermes on Hostinger in one click, fully managed, no VPS knowledge needed. Use code ZACAARON10 for 10% off.

Launch on Hostinger
Crawl and scrape any site into clean data, 10% off logoCrawl and scrape any site into clean data, 10% off

Firecrawl crawls and scrapes any site into clean markdown for your agent. Get 1,000 free credits, and new users get 10% off their first purchase.

Try Firecrawl free
6,000+ web scrapers for your AI agent, start free logo6,000+ web scrapers for your AI agent, start free

Apify gives your agent live web data: 6,000+ prebuilt scrapers and actors, MCP-ready. Sign up free with $5 in usage credits.

Try Apify free
One API to scrape, enrich, and extract the internet. logoOne API to scrape, enrich, and extract the internet.

Context.dev gives your agents a single API to scrape, enrich, and extract live web data — no proxies, no parsers, no maintenance.

Start building free
SetupClaw: done-for-you OpenClaw for founders & exec teams logoSetupClaw: done-for-you OpenClaw for founders & exec teams

White-glove OpenClaw for founders and exec teams (4–50+ employees): we install, harden, integrate your tools, and maintain it — secured from day one.

Get it set up for you
SEO data APIs for your agent, $1 free credit logoSEO data APIs for your agent, $1 free credit

DataForSEO gives your agent live access to SERP results, keyword data, backlinks, and on-page SEO data through one API. New accounts get a $1 credit, good for up to 20,000 keyword or backlink lookups.

Try DataForSEO free
Reach 48,000+ AI builders

A flat monthly placement in front of developers actively installing AI tools. No lock-in, cancel anytime.

Advertise here

Works with

Claude CodeClaude DesktopCursorVS CodeClineCodex CLIOpenClaw+ any MCP client

Install to Claude Code

This server doesn't publish a one-line install command. Follow the setup in the source repository.

Summary

A Model Context Protocol server for SharePoint file and folder management using Microsoft Graph API. Enables listing, uploading, downloading, and converting documents with markdown-to-DOCX support.

README.md

SharePoint MCP Server

A TypeScript MCP (Model Context Protocol) server for SharePoint file and folder management via Microsoft Graph API.

Features

  • 11 MCP tools for complete SharePoint file/folder management
  • Two auth flows: Client Credentials (app-level) and On-Behalf-Of (user-level)
  • Two transports: stdio (for Claude Desktop/CLI) and Streamable HTTP
  • Resumable uploads for large files (>4MB)
  • Content extraction from PDF, Word (.docx), Excel (.xlsx), and text files
  • Markdown-to-DOCX conversion via Pandoc with optional style templates from SharePoint

Quick Start

1. Install dependencies

npm install
npm run build

2. Configure environment

cp .env.example .env
# Edit .env with your Azure AD and SharePoint details

Required environment variables:

  • AZURE_TENANT_ID - Azure AD tenant ID
  • AZURE_CLIENT_ID - App registration client ID
  • AZURE_CLIENT_SECRET - App registration client secret
  • SHAREPOINT_HOSTNAME - e.g. yourcompany.sharepoint.com
  • SHAREPOINT_SITE_NAME - e.g. YourSiteName
  • AUTH_FLOW - client_credentials (default) or on_behalf_of

3. Run

stdio transport (for Claude Desktop): ``bash npm start ``

HTTP transport: ```bash npm run start:http

Server starts on http://localhost:3000/mcp


## Claude Desktop Configuration

Add to your Claude Desktop config (`~/Library/Application Support/Claude/claude_desktop_config.json`):

{ "mcpServers": { "sharepoint": { "command": "node", "args": ["/path/to/sharepoint-mcp-nodejs/dist/index.js"], "env": { "AZURE_TENANT_ID": "your-tenant-id", "AZURE_CLIENT_ID": "your-client-id", "AZURE_CLIENT_SECRET": "your-client-secret", "SHAREPOINT_HOSTNAME": "yourcompany.sharepoint.com", "SHAREPOINT_SITE_NAME": "YourSiteName" } } } } ```

Available Tools

| Tool | Description | |------|-------------| | List_SharePoint_Folders | List folders in a directory | | Create_Folder | Create a new folder | | Delete_Folder | Delete a folder | | Get_SharePoint_Tree | Recursive tree view (configurable depth) | | List_SharePoint_Documents | List documents with metadata | | Get_Document_Content | Download + extract text (PDF/Word/Excel/text) | | Create_Document_From_Markdown | Convert markdown/text to .docx with optional style template | | Upload_Document | Upload from base64 or text content | | Upload_Document_From_Path | Upload a local file (resumable for >4MB) | | Update_Document | Update existing document content | | Delete_Document | Delete a document |

Markdown to DOCX Conversion

The Create_Document_From_Markdown tool converts markdown or plain text to a .docx file using Pandoc and uploads it to SharePoint.

Parameters:

  • content (required) — Markdown or plain text to convert
  • folder_path (required) — Destination folder in SharePoint
  • file_name (required) — Output filename (e.g. report.docx)
  • template_path (optional) — Path to a .docx template on SharePoint for styling

Style templates: Create a .docx file in Word with your desired styles (fonts, headings, margins, colors), upload it to SharePoint, then reference it as template_path. Pandoc applies styles from the template to the generated document via --reference-doc.

Testing the Markdown-to-DOCX Tool

Prerequisites: Pandoc must be installed. In Docker this is handled automatically. For local development:

# macOS
brew install pandoc

# Ubuntu/Debian
sudo apt-get install pandoc

# Verify
pandoc --version

Test 1 — Basic conversion (no template):

Using MCP Inspector: ``bash npx @modelcontextprotocol/inspector node dist/index.js ` Call Create_Document_From_Markdown with: `json { "content": "# My Report\n\n## Introduction\n\nThis is a test document with:\n\n- Bullet point 1\n- Bullet point 2\n\n## Data\n\n| Name | Value |\n|------|-------|\n| A | 100 |\n| B | 200 |", "folder_path": "Shared Documents", "file_name": "test-report.docx" } ``

Then verify with Get_Document_Content: ``json { "file_path": "Shared Documents/test-report.docx" } ``

Test 2 — With style template:

  1. Create a styled .docx template in Word (set fonts, heading styles, margins, colors)
  2. Upload it to SharePoint (e.g. via Upload_Document_From_Path or manually)
  3. Call Create_Document_From_Markdown with the template:
{
  "content": "# Styled Report\n\nThis document uses corporate styling.",
  "folder_path": "Shared Documents",
  "file_name": "styled-report.docx",
  "template_path": "Templates/corporate-style.docx"
}

Test 3 — Via curl (HTTP transport): ```bash

Initialize session

curl -s -X POST http://localhost:3000/mcp \ -H "Content-Type: application/json" \ -d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-06-18","capabilities":{},"clientInfo":{"name":"test","version":"0.1.0"}}}'

Call the tool (use the mcp-session-id from the response headers above)

curl -s -X POST http://localhost:3000/mcp \ -H "Content-Type: application/json" \ -H "mcp-session-id: <SESSION_ID>" \ -d '{"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"Create_Document_From_Markdown","arguments":{"content":"# Hello World\n\nTest document.","folder_path":"Shared Documents","file_name":"curl-test.docx"}}}' ```

Upload Strategy

  • Files <= 4MB: Simple PUT to /content endpoint
  • Files > 4MB: Resumable upload session with 3.2MB chunks

Auth Flows

Client Credentials (default)

App-level access using client ID + secret. Best for server-to-server scenarios.

On-Behalf-Of (OBO)

User-level access by exchanging a user token. Use with HTTP transport where the client sends a Authorization: Bearer <token> header.

See docs/azure-setup.md for detailed Azure Portal setup instructions.

Docker

After editing .env with your credentials, build and run with:

docker compose up --build -d

The server will be available at http://localhost:3000/mcp.

After making changes to the source, rebuild and restart (the Docker build compiles TypeScript internally):

docker compose up --build -d

To view logs:

docker compose logs -f

Development

npm run dev    # Watch mode for TypeScript compilation

Testing with MCP Inspector

npx @modelcontextprotocol/inspector node dist/index.js

See related servers & alternatives →

Related MCP servers

Browse all →

Related guides

Hand-picked reading to help you choose and use Files & Docs servers.