Skip to main content
Glama
Cloud-li1

mcp-outlook-calendar

by Cloud-li1
README.md
# mcp-outlook-calendar

MCP Server for Microsoft Outlook Calendar and To Do via Microsoft Graph API.

## 0. 自用迁移笔记

```bash
git clone https://github.com/Cloud-li1/mcp-outlook-calendar.git
cd mcp-outlook-calendar
cp .env.example .env
# 编辑 .env,填入 OUTLOOK_CLIENT_ID(Azure 应用注册里拿)
pip install -e .
python3 src/server.py  # 首次运行完成 device code 认证,之后 token 自动缓存
```

> Azure 应用注册 → 身份验证 → 允许公共客户端流 → 是
> API 权限:Calendars.ReadWrite + Tasks.ReadWrite(委托)
> 如换机器,`~/.cache/mcp-outlook-calendar/token_cache.bin` 需重新认证

## Prerequisites

1. Register an app at [Azure Portal](https://portal.azure.com/#view/Microsoft_AAD_RegisteredApps)
   - Supported account types: "Accounts in any organizational directory and personal Microsoft accounts"
   - Redirect URI: `https://login.microsoftonline.com/common/oauth2/nativeclient`
   - API Permissions → Add `Calendars.ReadWrite` and `Tasks.ReadWrite` (both delegated)
2. Copy the Application (client) ID

## Setup

```bash
cp .env.example .env
# Edit .env: paste your OUTLOOK_CLIENT_ID
pip install -e .
```

## Usage

```bash
python3 src/server.py
```

On first run, the server prints a device code URL and code to stderr.
Open the URL, enter the code, sign in with your Microsoft account.
The token is cached at `~/.cache/mcp-outlook-calendar/token_cache.bin` and auto-refreshes.

## Migration to any MCP-compatible AI tool

Copy the `"outlook-calendar"` block from `opencode-mcp.json` into your tool's MCP config file,
adjusting `"cwd"` to where you placed this project.

## Available Tools

| Tool | Description |
|---|---|
| `list_calendars` | List all user calendars |
| `list_events` | List events in a date range |
| `create_event` | Create a calendar event (with optional attendees, online meeting, reminders) |
| `update_event` | Update an existing event |
| `delete_event` | Delete an event |
| `get_event` | Get full details of a single event |
| `list_task_lists` | List all To Do task lists |
| `list_tasks` | List tasks, optionally filtered by status |
| `create_task` | Create a task (with due date, importance, reminder) |
| `update_task` | Update task fields (including marking complete) |
| `delete_task` | Delete a task |
| `get_task` | Get full details of a single task |

Maintenance

ActivityStale
ResponsivenessNo issues