# Outlook MCP (Model Context Protocol) Server

A Model Context Protocol server that integrates with Microsoft Outlook through Microsoft Graph API, allowing Claude and other LLMs to check calendar events, schedule new ones, read emails, and send messages.

## Features

- 📅 **Calendar Integration**: View, list, create, update, and delete calendar events
- 📧 **Email Integration**: Read, send, draft, and manage emails from your Outlook account
- 🔁 **Model Context Protocol**: Follows MCP standards for LLM tool integration
- 🛡️ **Type Safety**: Full TypeScript implementation with Zod validation

## Prerequisites

- Node.js 18+
- Microsoft 365 account with appropriate permissions
- Microsoft Azure App Registration with Graph API permissions (Calendar and Mail)

## Setup


1. Register an application in Azure Active Directory:
   - Go to [Azure Portal](https://portal.azure.com)
   - Navigate to "App registrations"
   - Create a new registration with a redirect URI of type "Public client/native (mobile & desktop)"
     - Register `http://localhost` as the redirect URI

   - Configure API permissions:
     - Choose Microsoft Graph and type delegated, as we will act on the users behalf
     - For Calendar: "Calendars.Read" and "Calendars.ReadWrite"
     - For Email: "Mail.Read", "Mail.ReadWrite" and "Mail.Send"
     - For People: "People.Read"

2. Note the values from your Azure app registration (Overview) to use for the MCP config as environment variables:
  - Client ID (Application (client) ID)
  - Authority ID (Directory (tenant) ID)

3. Register the MCP server
For Claude Desktop, create or update your configuration in `~/.claude/config.json`:

```json
{
  "mcpServers": {
    "outlook": {
      "command": "npx",
      "args": [
        "mcp_outlook"
      ],
      "env": {
        "AUTHORITY": "your-authority-id",
        "CLIENT_ID": "your-client-id",
        "MCP_SERVER_NAME": "outlook-mcp",
        "MCP_SERVER_VERSION": "1.0.0"
      }
    }
  }
}
```

Make sure to replace the path and environment variables with your actual values.

## Available Tools

### Calendar Tools
- **listCalendarEvents**: Lists the user's calendar events for a specified time range
- **createCalendarEvent**: Creates a new calendar event
- **getCalendarEvent**: Gets details of a specific calendar event
- **updateCalendarEvent**: Updates an existing calendar event
- **deleteCalendarEvent**: Deletes a calendar event

### Email Tools
- **listEmails**: Lists emails from a specified folder (inbox, sent, drafts, etc.)
- **getEmail**: Gets details of a specific email message
- **sendEmail**: Sends a new email message
- **createDraft**: Creates a draft email message without sending it
- **markEmailAsRead**: Marks an email message as read
- **markEmailAsUnread**: Marks an email message as unread
- **deleteEmail**: Deletes an email message

## People Tools
- **searchPeople** Find a person in the organisation or your recent contacts
- **getPerson** Get information on a person

### Resources
- **calendar**: Resource containing calendar events data
- **inbox**: Resource containing inbox messages data

## Development

Run in development mode with live reloading:
```
npm run dev
```

Run linting:
```
npm run lint
```

Configure your MCP locally
```json
{
  "mcpServers": {
    "outlook": {
      "command": "node",
      "args": [
        "/ABSOLUTE/PATH/TO/outlook_mcp/build/index.js"
      ],
      "env": {
        "AUTHORITY": "your-authority-id",
        "CLIENT_ID": "your-client-id",
        "MCP_SERVER_NAME": "outlook-mcp",
        "MCP_SERVER_VERSION": "1.0.0"
      }
    }
  }
}
```
