Skip to main content
Glama
dYn36

sharepoint-online-mcp

by dYn36
README.md
# SharePoint Online MCP Server

MCP server for SharePoint Online — zero-config, no Azure Portal, no env vars.

## Quick Start

Install and run:

```bash
npx sharepoint-online-mcp
```

Add to Claude Desktop (`claude_desktop_config.json`):

```json
{
  "mcpServers": {
    "sharepoint": {
      "command": "npx",
      "args": ["-y", "sharepoint-online-mcp"]
    }
  }
}
```

No environment variables needed. That's the entire setup.

## How It Works

- Uses the Microsoft Office well-known client ID — no Azure app registration needed
- On first use, prompts for device code authentication (open a URL, enter a code)
- Auto-discovers your tenant ID from the SharePoint URL
- Caches tokens in `~/.sharepoint-mcp-cache.json` — persists across restarts

## Usage

Start by asking Claude to connect to your SharePoint site:

> "Connect to https://contoso.sharepoint.com/sites/marketing"

Claude will handle the authentication prompts. Once connected, use any tool — search sites, create pages, manage navigation, and more.

## Tools

| Category | Tool | Description |
|----------|------|-------------|
| **Sites** | `search_sites` | Search for SharePoint sites by keyword |
| | `get_site_details` | Get detailed information about a site |
| | `get_site_by_url` | Resolve a site from its SharePoint URL |
| | `connect_to_site` | Connect to a site (auto tenant discovery + auth) |
| | `list_my_sites` | List sites you follow |
| **Pages** | `list_pages` | List pages in a site |
| | `get_page` | Get page content and metadata |
| | `create_page` | Create a new modern page |
| | `update_page` | Update page title or description |
| | `publish_page` | Publish a draft page |
| | `delete_page` | Delete a page |
| **Layout** | `add_section` | Add a section with column layout |
| | `get_page_layout` | Get the layout structure of a page |
| **Web Parts** | `add_text_webpart` | Add a text/HTML web part |
| | `add_image_webpart` | Add an image web part |
| | `add_spacer` | Add a spacer web part |
| | `add_divider` | Add a divider web part |
| | `add_custom_webpart` | Add any web part by type ID |
| **Navigation** | `get_navigation` | Get Quick Launch or Top Navigation |
| | `add_navigation_link` | Add a navigation link |
| | `remove_navigation_link` | Remove a navigation link |
| **Branding** | `set_site_logo` | Set the site logo |
| | `upload_asset` | Upload a file to Site Assets |
| **Utility** | `get_design_templates` | List available site design templates |
| | `disconnect` | Clear auth tokens and disconnect |

## Requirements

- Node.js >= 18
- A Microsoft 365 / SharePoint Online account

## Known Limitations

- Some organizations block device code authentication via Conditional Access policies. If you see error `AADSTS50076` or `AADSTS53003`, contact your IT administrator.
- Only works with SharePoint Online (Microsoft 365), not on-premises SharePoint Server.
- Permissions depend on your Microsoft 365 account — you can only access sites you have permission to.

## Troubleshooting

| Problem | Solution |
|---------|----------|
| Authentication failed | Run the `disconnect` tool and try again |
| Tenant discovery failed | Check that the SharePoint URL is correct and accessible |
| Access denied (403) | Your account may not have permission for this site or operation |
| Resource not found (404) | Verify the site URL, page ID, or resource exists |
| Token issues | Delete `~/.sharepoint-mcp-cache.json` and re-authenticate |

## License

MIT

TDQS

C2.6/5.0

Scored across 25 tools

Disambiguation3/5

Clear/ambiguous split: connection and navigation tools are distinct, but multiple 'add_*' webpart tools (add_image_webpart, add_spacer, add_divider, add_text_webpart, add_custom_webpart) and section/layout tools overlap conceptually. An agent could reasonably hesitate between add_custom_webpart and the specific webpart adders, or between get_page, get_page_layout, and get_site_details.

Naming Consistency4/5

Predominantly consistent snake_case verb_noun convention (add_image_webpart, remove_navigation_link, get_site_details, create_page). Minor inconsistency: set_site_logo and disconnect lack the noun/object pattern, and add_spacer/add_divider omit the webpart suffix used by siblings.

Tool Count3/5

25 tools is at the heavy end of the acceptable range and reflects a rich domain (pages, sections, webparts, navigation, site admin, auth). However, no bulk or read-only toolset split exists and the surface feels padded with granular webpart adders rather than more general operations.

Completeness4/5

Covers the full page lifecycle (list, get, create, update, publish, delete) plus sections, webparts, navigation, site discovery, assets, and auth. Gaps exist: no update/delete for webparts or sections, no unpublish, no list/page-versioning, and no comment or permission management.

Maintenance

ActivityInactive
ResponsivenessNo issues