onenote-mcp-server
README.md
# OneNote MCP Server
A complete, robust Model Context Protocol (MCP) server for Microsoft OneNote integration with Claude Desktop. Access your entire OneNote knowledge base through natural language queries.
## šÆ What This Does
Transform your OneNote notebooks into an AI-accessible knowledge base:
- **List all your notebooks, sections, and pages**
- **Read page content** for analysis and search
- **Natural language queries** like "Show me my DevOps notes" or "Find pages about project planning"
- **Secure OAuth authentication** with Microsoft Graph API
- **Bulletproof error handling** with detailed debugging
## ⨠Why This Implementation
Unlike other OneNote MCP servers, this one:
- ā
**Actually works** - tested extensively with real OneNote data
- ā
**Complete functionality** - all core OneNote operations implemented
- ā
**Robust authentication** - two-step device flow that handles edge cases
- ā
**Production ready** - proper error handling and logging
- ā
**Easy setup** - detailed instructions for non-technical users
## š Quick Start
### Prerequisites
- Python 3.10+
- [uv package manager](https://docs.astral.sh/uv/getting-started/installation/) (recommended) or pip
- Claude Desktop
- Microsoft Azure account (free)
### 1. Install uv (if you don't have it)
```bash
# macOS/Linux
curl -LsSf https://astral.sh/uv/install.sh | sh
# or with Homebrew
brew install uv
```
### 2. Clone and Setup
```bash
git clone https://github.com/yourusername/onenote-mcp-server.git
cd onenote-mcp-server
# Create virtual environment and install dependencies
uv sync
```
### 3. Azure App Registration
You need to create an Azure app to access OneNote. **Don't worry, it's free and takes 5 minutes:**
1. Go to [Azure Portal](https://portal.azure.com) (sign in with your Microsoft account)
2. Navigate to **Azure Active Directory** ā **App registrations** ā **New registration**
3. Fill out the form:
- **Name**: "OneNote MCP Server" (or whatever you like)
- **Supported account types**: "Accounts in any organizational directory and personal Microsoft accounts"
- **Redirect URI**: Select "Public client/native" and enter: `https://login.microsoftonline.com/common/oauth2/nativeclient`
4. Click **Register**
5. Copy the **Application (client) ID** - you'll need this!
### 4. Add Permissions
Still in your Azure app:
1. Go to **API permissions** ā **Add a permission**
2. Select **Microsoft Graph** ā **Delegated permissions**
3. Add these permissions:
- `Notes.Read` - Read OneNote notebooks
- `Notes.ReadWrite` - Create/modify OneNote content (optional but recommended)
- `User.Read` - Read user profile
4. Click **Grant admin consent** (the button at the top)
### 5. Configure Claude Desktop
Edit your Claude Desktop config file:
**macOS**: `~/Library/Application Support/Claude/claude_desktop_config.json`
**Windows**: `%APPDATA%\\Claude\\claude_desktop_config.json`
Add this configuration (replace `/ABSOLUTE/PATH/TO/PARENT/FOLDER/weather` with your actual path):
**Basic configuration:**
```json
{
"mcpServers": {
"onenote": {
"command": "uv",
"args": [
"--directory", "/FULL/PATH/TO/onenote-mcp-server",
"run", "python", "onenote_mcp_server.py"
],
"env": {
"AZURE_CLIENT_ID": "your-azure-client-id-here"
}
}
}
}
```
**With explicit token caching control:**
```json
{
"mcpServers": {
"onenote": {
"command": "uv",
"args": [
"--directory", "/FULL/PATH/TO/onenote-mcp-server",
"run", "python", "onenote_mcp_server.py"
],
"env": {
"AZURE_CLIENT_ID": "your-azure-client-id-here",
"ONENOTE_CACHE_TOKENS": "true"
}
}
}
}
```
Replace `/FULL/PATH/TO/onenote-mcp-server` with the actual path to this project.
### 6. Restart Claude Desktop
Completely quit and restart Claude Desktop. You should see OneNote tools in the šØ menu.
## š First Time Authentication
1. In Claude Desktop, say: **"Start OneNote authentication"**
2. Claude will give you a URL and code
3. Visit the URL in your browser, enter the code, and sign in
4. **Browser compatibility**:
- ā
**Firefox** (tested with 139.0.4) - works perfectly
- ā **Safari** - may have issues with Microsoft OAuth redirect
- ā
**Chrome/Edge** - should work (Microsoft's browsers)
5. Come back to Claude and say: **"Complete OneNote authentication"**
6. You're ready to go!
### Token Persistence
By default, authentication tokens are cached securely on your local machine so you only need to authenticate once every few weeks/months.
**To disable token caching** (for security-sensitive environments):
```json
{
"mcpServers": {
"onenote": {
"command": "uv",
"args": [
"--directory", "/FULL/PATH/TO/onenote-mcp-server",
"run", "python", "onenote_mcp_server.py"
],
"env": {
"AZURE_CLIENT_ID": "YOUR_CLIENT_ID_HERE",
"ONENOTE_CACHE_TOKENS": "false"
}
}
}
}
```
**Token caching options:**
- `ONENOTE_CACHE_TOKENS=true` (default) - Tokens persist across sessions
- `ONENOTE_CACHE_TOKENS=false` - Authenticate every session (more secure)
## š Usage Examples
Once authenticated, try these commands in Claude Desktop:
```
List my OneNote notebooks
Show me sections in my Work notebook
What pages are in my Ideas section?
Read the content of my "Project Plan" page
```
## š Troubleshooting
### "No tools available" in Claude Desktop
- Make sure you restarted Claude Desktop after config changes
- Check that the path in your config is correct (use full absolute path)
- Verify uv is installed: `uv --version`
### Authentication issues
- **Safari OAuth problems**: Safari may not handle Microsoft's OAuth redirect properly - use Firefox or Chrome instead
- **"nativeclient" prompts**: Normal Microsoft OAuth behavior, but if it blocks authentication, try a different browser
- **Authentication expired**: Use "Check OneNote authentication status" to see token expiry
- **Clear cached tokens**: Use "Clear OneNote token cache" if you need to reset authentication
- **Recommended browsers**: Firefox (confirmed working), Chrome, or Edge for best compatibility
### "Command not found" errors
- Make sure uv is in your PATH
- Alternative: replace `"uv"` with `"python"` in the config and use the full path to your Python interpreter
### Permission denied errors
- Check the file permissions in your project directory
- Make sure Claude Desktop can read the files
## š Development
### Project Structure
```
onenote-mcp-server/
āāā onenote_mcp_server.py # Main server implementation
āāā pyproject.toml # Dependencies and metadata
āāā README.md # This file
āāā LICENSE # MIT License
āāā .gitignore # Git ignore rules
```
### Key Features
- **Two-step authentication**: Handles device code flow properly
- **Complete Graph API integration**: All OneNote operations supported
- **Robust error handling**: Detailed logging and graceful failures
- **FastMCP framework**: Clean, maintainable code structure
- **Environment variable configuration**: Secure credential handling
### Adding New Features
The server is built with FastMCP, making it easy to add new tools:
```python
@mcp.tool()
async def your_new_tool(param: str) -> str:
"""Description of what your tool does."""
# Your implementation here
return result
```
## š¤ Contributing
Contributions welcome! Please:
1. Fork the repo
2. Create a feature branch
3. Add tests for new functionality
4. Submit a pull request
## š License
MIT License - see LICENSE file for details.
## š Acknowledgments
- Built with [FastMCP](https://github.com/jlowin/fastmcp) framework
- Uses Microsoft Graph API for OneNote access
- Inspired by the amazing potential of AI + personal knowledge bases
## ā ļø Important Notes
- This server only reads/writes data you already have access to
- Your Azure app credentials stay on your machine
- All authentication happens directly between you and Microsoft
- No data is sent to third parties
---
**Built with ā¤ļø for the Claude + OneNote community**
*Turn your OneNote into an AI-accessible knowledge base!*
This server cannot be deployed
Maintenance
ActivityInactive
ResponsivenessUnresponsive