关于 Outlook Meetings Scheduler MCP Server
Outlook Meetings Scheduler MCP Server 通过 Microsoft Graph 管理 Outlook 日历事件,适用于安排会议和参会者,并提供多种身份验证模式及人员查找功能。
主要功能
- 01按姓名查找人员
- 02创建含参会者的事件
- 03列出并筛选事件
- 04更新事件和参会者
- 05删除事件
- 06三种身份验证模式
适用场景
- 01安排含指定参会者的会议
- 02邀请前查找人员邮箱
- 03查看或修改日历事件
- 04创建 GitHub 议题后安排会议
MCP 相关
该 MCP 服务通过 Microsoft Graph 提供查找人员以及创建、列出、获取、更新和删除 Outlook 事件的工具。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
Outlook 会议日程安排 MCP 服务
使用 Microsoft Graph API 在 Microsoft Outlook 中安排会议的 MCP 服务。
此 MCP 服务可让你创建日历事件、创建包含与会者的事件(包括查找其电子邮件地址)。 它可与其他 MCP 服务(例如 GitHub MCP 服务)无缝集成,提升你的工作流效率。
示例查询
- 安排明天下午 3 点与 Sarah 开会。
- 创建一个名为“Project Kickoff”的会议,时间为明天下午 2 点。将 Megan 和 John 添加为必需与会者。
与 GitHub MCP 服务搭配使用
- 在 organization/repo 仓库中创建一个标题为“Fix pagination bug in user dashboard”、描述为“Users report seeing duplicate entries when navigating between pages.” 的问题。然后为我安排一个日历提醒,提醒我明天下午 3 点查看此问题。
演示

工具
-
find-person- 根据姓名查找某人的电子邮箱地址
- 输入:
name(字符串) - 返回:匹配人员列表,包含姓名和电子邮箱地址
-
create-event- 使用 Microsoft Graph API 创建日历事件
- 输入:
subject(字符串):日历事件的主题body(字符串):日历事件的内容/正文start(可选):ISO 格式的日期时间(例如,2025-04-20T12:00:00)end(可选):ISO 格式的日期时间(例如,2025-04-20T13:00:00)timeZone(可选):事件的时区(默认值:"GMT Standard Time")
- 返回:事件详情,包括 URL 和 ID
-
create-event-with-attendees- 使用 Microsoft Graph API 创建包含与会者的日历事件
- 输入:
subject(字符串):日历事件的主题body(字符串):日历事件的内容/正文start(可选):ISO 格式的日期时间(例如,2025-04-20T12:00:00)end(可选):ISO 格式的日期时间(例如,2025-04-20T13:00:00)timeZone(可选):事件的时区(默认值:"GMT Standard Time")location(可选):事件地点attendees:{ email、name(可选)、type(可选)} 数组
- 返回:事件详情,包括 URL、ID 和与会者列表
-
get-event- 根据事件 ID 获取日历事件详情
- 输入:
eventId(字符串):要检索的事件 ID
- 返回:详细的事件信息,包括主题、时间、与会者和 URL
-
list-events- 列出日历事件,可选择筛选条件
- 输入:
subject(可选):筛选主题包含此文本的事件startDate(可选):ISO 格式的开始日期(例如,2025-04-20T00:00:00),用于筛选此日期之后的事件endDate(可选):ISO 格式的结束日期(例如,2025-04-20T23:59:59),用于筛选此日期之前的事件maxResults(可选):要返回的事件数量上限
- 返回:日历事件列表,包含基本信息和 ID
-
delete-event- 删除日历事件
- 输入:
eventId(字符串):要删除的事件 ID
- 返回:事件删除确认信息
-
update-event- 更新现有日历事件
- 输入:
eventId(字符串):要更新的事件 IDsubject(可选):日历事件的新主题body(可选):日历事件的新内容/正文start(可选):ISO 格式的新开始时间(例如,2025-04-20T12:00:00)end(可选):ISO 格式的新结束时间(例如,2025-04-20T13:00:00)timeZone(可选):事件的新时区location(可选):事件的新地点attendees(可选):{ email、name(可选)、type(可选)} 数组
- 返回:显示变更内容的更新后事件详情
-
update-event-attendees- 添加或移除日历事件的与会者
- 输入:
eventId(字符串):要更新的事件 IDaddAttendees(可选):要添加的与会者数组:{ email、name(可选)、type(可选)}removeAttendees(可选):要从事件中移除的电子邮箱地址数组
- 返回:更新后的事件与会者信息
设置
身份验证模式
此 MCP 服务支持三种身份验证模式:
1. 交互式(委派)
感谢 Lokka
适用于:用户模拟场景、访问用户专属数据
- 提示用户进行交互式登录
- 使用委派权限
- 以已登录用户的身份进行身份验证
2. 客户端凭据(仅应用)
适用于:服务间场景、自动化流程
- 使用 Azure AD 应用程序凭据
- 需要应用程序权限
- 无需用户交互即可运行
3. 客户端提供的令牌
适用于:自定义令牌管理、预先获取的令牌
- 使用客户端提供的令牌
- 需要在外部管理令牌刷新
Microsoft Graph API 设置
交互式(委派)模式
- 在 Microsoft Azure Portal 中注册应用(或使用现有应用)
- 添加重定向 URI:
http://localhost(移动和桌面应用程序平台) - 启用公共客户端流:前往 Authentication > Advanced settings > “Allow public client flows” = YES
- 授予所需的委派权限:Microsoft Graph API > Delegated permissions > Calendars.ReadWrite、People.Read、User.Read
- 记下 Client ID 和 Tenant ID(使用自定义应用进行交互式模式时,无需 Client Secret)
**注意:**服务默认使用内置的多租户应用,因此可选配置自定义应用。需要身份验证时,设备代码和登录 URL 会直接显示在 MCP 客户端聊天界面中。
客户端凭据(仅应用)模式
- 在 Microsoft Azure Portal 中注册应用
- 创建客户端密钥
- 授予所需的应用程序权限:Microsoft Graph API > Application permissions > Calendars.ReadWrite、People.Read.All、User.ReadBasic.All
- 为组织授予管理员同意
- 记下 Client ID、Client Secret 和 Tenant ID
在 VS Code 中使用
身份验证模式配置
MCP 服务支持通过 AUTH_MODE 环境变量设置不同的身份验证模式:
interactive(默认)- 通过浏览器或设备代码流进行用户身份验证client_credentials- 使用客户端密钥进行仅应用身份验证client_provided_token- 使用预先获取的令牌
向后兼容性:如果未指定 AUTH_MODE,服务会自动检测模式:
- 存在
CLIENT_SECRET→client_credentials模式 - 存在
ACCESS_TOKEN→client_provided_token模式 - 两者均不存在 →
interactive模式(默认)
本地 Node.js
你可以直接使用 Node.js 从本地构建版本运行 MCP 服务:
- 克隆代码仓库并构建项目:
git clone https://github.com/anoopt/outlook-meetings-scheduler-mcp-server.git
cd outlook-meetings-scheduler-mcp-server
npm install
npm run build
- 若要手动安装,请将以下 JSON 代码块添加到 VS Code 的 User Settings (JSON) 文件中。你可以按
Ctrl + Shift + P,然后输入 Preferences:Open User Settings (JSON)。
也可以将其添加到工作区中名为 .vscode/mcp.json 的文件,以便与他人共享配置:
交互式模式(默认 - 零配置):
{
"mcpServers": {
"outlook-meetings-scheduler": {
"command": "node",
"args": [
"/path/to/outlook-meetings-scheduler-mcp-server/build/index.js"
]
}
}
}
使用自定义应用的交互式模式:
{
"mcpServers": {
"outlook-meetings-scheduler": {
"command": "node",
"args": [
"/path/to/outlook-meetings-scheduler-mcp-server/build/index.js"
],
"env": {
"AUTH_MODE": "interactive",
"CLIENT_ID": "<YOUR_CLIENT_ID>",
"TENANT_ID": "<YOUR_TENANT_ID>"
}
}
}
}
客户端凭据模式:
{
"mcpServers": {
"outlook-meetings-scheduler": {
"command": "node",
"args": [
"/path/to/outlook-meetings-scheduler-mcp-server/build/index.js"
],
"env": {
"AUTH_MODE": "client_credentials",
"CLIENT_ID": "<YOUR_CLIENT_ID>",
"CLIENT_SECRET": "<YOUR_CLIENT_SECRET>",
"TENANT_ID": "<YOUR_TENANT_ID>",
"USER_EMAIL": "<YOUR_EMAIL>"
}
}
}
}
客户端提供令牌模式:
{
"mcpServers": {
"outlook-meetings-scheduler": {
"command": "node",
"args": [
"/path/to/outlook-meetings-scheduler-mcp-server/build/index.js"
],
"env": {
"AUTH_MODE": "client_provided_token",
"ACCESS_TOKEN": "<YOUR_ACCESS_TOKEN>",
"TOKEN_EXPIRES_ON": "2025-10-03T12:00:00Z",
"USER_EMAIL": "<YOUR_EMAIL>"
}
}
}
}
注意:
- 使用内置的多租户 Azure AD 应用(适用于任何组织)
- USER_EMAIL 会根据已登录用户自动确定
- 用户会看到一次性同意提示(无需管理员批准)
- 无需任何配置,开箱即用
使用自定义应用的交互式模式:
{
"mcpServers": {
"outlook-meetings-scheduler": {
"command": "node",
"args": [
"/path/to/outlook-meetings-scheduler-mcp-server/build/index.js"
],
"env": {
"AUTH_MODE": "interactive",
"CLIENT_ID": "<YOUR_CLIENT_ID>",
"TENANT_ID": "<YOUR_TENANT_ID>"
}
}
}
}
如果需要特定品牌标识或租户限制,请使用自定义应用。
将 /path/to/outlook-meetings-scheduler-mcp-server 替换为克隆代码仓库的绝对路径。
Docker
在本地使用 Docker 运行 MCP 服务。使用以下命令构建 Docker 镜像:
docker build -t mcp/outlook-meetings-scheduler .
若要手动安装,请将以下 JSON 代码块添加到 VS Code 的 User Settings (JSON) 文件中。你可以按 Ctrl + Shift + P,然后输入 Preferences: Open User Settings (JSON)。
也可以将其添加到工作区中名为 .vscode/mcp.json 的文件,以便与他人共享配置。
{
"inputs": [
{
"type": "promptString",
"id": "client_secret",
"description": "Enter the client secret",
"password": true
}
],
"servers": {
"outlook-meetings-scheduler": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"-e",
"CLIENT_ID",
"-e",
"CLIENT_SECRET",
"-e",
"TENANT_ID",
"-e",
"USER_EMAIL",
"mcp/outlook-meetings-scheduler"
],
"env": {
"USER_EMAIL": "<YOUR_EMAIL>",
"CLIENT_ID": "<YOUR_CLIENT_ID>",
"CLIENT_SECRET": "${input:client_secret}",
"TENANT_ID": "<YOUR_TENANT_ID>"
}
}
}
}
NPX
交互式模式(默认 - 零配置):
{
"mcpServers": {
"outlook-meetings-scheduler": {
"command": "npx",
"args": [
"-y",
"outlook-meetings-scheduler"
]
}
}
}
使用自定义应用的交互式模式:
{
"mcpServers": {
"outlook-meetings-scheduler": {
"command": "npx",
"args": [
"-y",
"outlook-meetings-scheduler"
],
"env": {
"AUTH_MODE": "interactive",
"CLIENT_ID": "<YOUR_CLIENT_ID>",
"TENANT_ID": "<YOUR_TENANT_ID>"
}
}
}
}
客户端凭据模式:
{
"mcpServers": {
"outlook-meetings-scheduler": {
"command": "npx",
"args": [
"-y",
"outlook-meetings-scheduler"
],
"env": {
"AUTH_MODE": "client_credentials",
"CLIENT_ID": "<YOUR_CLIENT_ID>",
"CLIENT_SECRET": "<YOUR_CLIENT_SECRET>",
"TENANT_ID": "<YOUR_TENANT_ID>",
"USER_EMAIL": "<YOUR_EMAIL>"
}
}
}
}
客户端提供令牌模式:
{
"mcpServers": {
"outlook-meetings-scheduler": {
"command": "npx",
"args": [
"-y",
"outlook-meetings-scheduler"
],
"env": {
"AUTH_MODE": "client_provided_token",
"ACCESS_TOKEN": "<YOUR_ACCESS_TOKEN>",
"TOKEN_EXPIRES_ON": "2025-10-03T12:00:00Z",
"USER_EMAIL": "<YOUR_EMAIL>"
}
}
}
}
在 Claude Desktop 中使用
Docker
- 使用 Docker 在本地运行 MCP 服务。使用以下命令构建 Docker 镜像:
docker build -t mcp/outlook-meetings-scheduler .
- 将以下内容添加到
claude_desktop_config.json:
{
"mcpServers": {
"outlook-meetings-scheduler": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"-e",
"CLIENT_ID",
"-e",
"CLIENT_SECRET",
"-e",
"TENANT_ID",
"-e",
"USER_EMAIL",
"mcp/outlook-meetings-scheduler"
],
"env": {
"CLIENT_ID": "<YOUR_CLIENT_ID>",
"CLIENT_SECRET": "<YOUR_CLIENT_SECRET>",
"TENANT_ID": "<YOUR_TENANT_ID>",
"USER_EMAIL": "<YOUR_EMAIL>"
}
}
}
}
NPX
交互模式(默认——零配置):
{
"mcpServers": {
"outlook-meetings-scheduler": {
"command": "npx",
"args": [
"-y",
"outlook-meetings-scheduler"
]
}
}
}
使用自定义应用的交互模式:
{
"mcpServers": {
"outlook-meetings-scheduler": {
"command": "npx",
"args": [
"-y",
"outlook-meetings-scheduler"
],
"env": {
"AUTH_MODE": "interactive",
"CLIENT_ID": "<YOUR_CLIENT_ID>",
"TENANT_ID": "<YOUR_TENANT_ID>"
}
}
}
}
客户端凭据模式:
{
"mcpServers": {
"outlook-meetings-scheduler": {
"command": "npx",
"args": [
"-y",
"outlook-meetings-scheduler"
],
"env": {
"AUTH_MODE": "client_credentials",
"CLIENT_ID": "<YOUR_CLIENT_ID>",
"CLIENT_SECRET": "<YOUR_CLIENT_SECRET>",
"TENANT_ID": "<YOUR_TENANT_ID>",
"USER_EMAIL": "<YOUR_EMAIL>"
}
}
}
}
客户端提供令牌模式:
{
"mcpServers": {
"outlook-meetings-scheduler": {
"command": "npx",
"args": [
"-y",
"outlook-meetings-scheduler"
],
"env": {
"AUTH_MODE": "client_provided_token",
"ACCESS_TOKEN": "<YOUR_ACCESS_TOKEN>",
"TOKEN_EXPIRES_ON": "2025-10-03T12:00:00Z",
"USER_EMAIL": "<YOUR_EMAIL>"
}
}
}
}
示例场景
与 GitHub MCP 服务集成
你可以将此 MCP 服务与其他 MCP 服务(例如 GitHub MCP 服务)结合使用,构建强大的工作流。
创建问题并安排后续评审
Create an issue in the organization/repo repository titled "Fix pagination bug in user dashboard" with the description "Users report seeing duplicate entries when navigating between pages." Then schedule a calendar reminder for me to review this issue tomorrow at 3 PM.
这将:
- 使用 GitHub MCP 服务创建问题
- 使用 Outlook Meetings Scheduler MCP 服务为评审创建日历事件
根据拉取请求安排代码评审会议
Find the open PR about the authentication feature in the organization/app-backend repository and schedule a code review meeting with the contributors for tomorrow morning.
这将:
- 使用 GitHub MCP 服务查找拉取请求并确定贡献者
- 使用 Outlook Meetings Scheduler MCP 服务与这些团队成员安排会议
多 MCP 配置
如需同时使用 GitHub 和 Outlook MCP 服务:
{
"mcpServers": {
"outlook-meetings-scheduler": {
"command": "npx",
"args": [
"-y",
"outlook-meetings-scheduler"
],
"env": {
"CLIENT_ID": "<YOUR_CLIENT_ID>",
"CLIENT_SECRET": "<YOUR_CLIENT_SECRET>",
"TENANT_ID": "<YOUR_TENANT_ID>",
"USER_EMAIL": "<YOUR_EMAIL>"
}
},
"github": {
"command": "npx",
"args": [
"-y",
"@modelcontextprotocol/github-mcp"
],
"env": {
"GITHUB_TOKEN": "<YOUR_GITHUB_TOKEN>"
}
}
}
}
直接使用
查找同事的电子邮件地址
I need to schedule a meeting with John Smith. Can you find his email address?
创建简单的日历事件
Schedule a meeting titled "Weekly Team Sync" for next Monday at 10 AM with the following agenda:
- Project updates
- Resource allocation
- Questions and concerns
与单个参会者安排会议
Schedule a 1:1 meeting with Sarah for tomorrow at 3 PM.
这将查找 Sarah 的电子邮件地址并创建日历事件。
为了查找 Sarah 的电子邮件地址,MCP 服务将使用 find-person 工具;该工具通过 Microsoft Graph API 查找与 USER_EMAIL 相关的人员,或在组织中搜索该姓名。
与多个参会者安排会议
Create a meeting called "Project Kickoff" for tomorrow at 2 PM.
Add [email protected] and [email protected] as required attendees.
The agenda is:
1. Project overview
2. Timeline discussion
3. Role assignments
4. Next steps
环境变量
交互模式(默认)
| 变量 | 说明 | 必填 | 默认值 |
|---|---|---|---|
AUTH_MODE | 身份验证模式 | 否 | interactive |
CLIENT_ID | Azure AD 应用程序(客户端)ID | 否 | 内置多租户应用 |
TENANT_ID | Azure AD 租户 ID | 否 | common(多租户) |
USER_EMAIL | 用户的电子邮件地址 | 否 | 根据已登录用户自动检测 |
REDIRECT_URI | 自定义重定向 URI | 否 | http://localhost |
客户端凭据模式
| 变量 | 说明 | 必填 |
|---|---|---|
AUTH_MODE | 身份验证模式 | 是 |
CLIENT_ID | Azure AD 应用程序(客户端)ID | 是 |
CLIENT_SECRET | Azure AD 应用程序客户端密钥 | 是 |
TENANT_ID | Azure AD 租户 ID | 是 |
USER_EMAIL | 要访问其日历的用户的电子邮件地址 | 是 |
客户端提供令牌模式
| 变量 | 说明 | 必填 | 默认值 |
|---|---|---|---|
AUTH_MODE | 身份验证模式 | 是 | - |
ACCESS_TOKEN | 预先获取的访问令牌 | 是 | - |
USER_EMAIL | 用户的电子邮件地址 | 是 | - |
TOKEN_EXPIRES_ON | 令牌过期日期(ISO 格式) | 否 | 从开始时间起 1 小时 |
如何获取访问令牌
你可以通过多种方式获取访问令牌:
1. Azure CLI(适用于 Microsoft Graph——推荐用于测试):
# Login to Azure
az login
# Get token specifically for Microsoft Graph with correct scopes
az account get-access-token --resource=https://graph.microsoft.com --query accessToken --output tsv
注意: Azure CLI 令牌拥有广泛权限,但可能不包含特定的日历范围(Calendars.ReadWrite)。用于生产环境时,请考虑使用以下第 3 或第 4 种方法,并明确配置范围。
2. PowerShell REST API(推荐用于 Windows):
# For client credentials flow (app-only) - most reliable method
$clientId = "your-client-id"
$clientSecret = "your-client-secret"
$tenantId = "your-tenant-id"
$body = @{
grant_type = "client_credentials"
client_id = $clientId
client_secret = $clientSecret
scope = "https://graph.microsoft.com/.default"
}
$response = Invoke-RestMethod -Uri "https://login.microsoftonline.com/$tenantId/oauth2/v2.0/token" -Method Post -Body $body
$token = $response.access_token
Write-Host "Access Token: $token"
3. 从你自己的应用程序获取(最可靠):
// Using @azure/identity with specific scopes
import { ClientSecretCredential } from '@azure/identity';
const credential = new ClientSecretCredential(
'your-tenant-id',
'your-client-id',
'your-client-secret'
);
// Request token with specific Microsoft Graph scopes
const token = await credential.getToken([
'https://graph.microsoft.com/Calendars.ReadWrite',
'https://graph.microsoft.com/People.Read',
'https://graph.microsoft.com/User.Read'
]);
// Use token.token as your ACCESS_TOKEN
console.log(token.token);
4. 使用 OAuth2 设备代码流(交互式):
# For personal Microsoft accounts or when you need user consent
curl -X POST \
https://login.microsoftonline.com/common/oauth2/v2.0/devicecode \
-H 'Content-Type: application/x-www-form-urlencoded' \
-d 'client_id={your-client-id}&scope=https://graph.microsoft.com/Calendars.ReadWrite https://graph.microsoft.com/People.Read https://graph.microsoft.com/User.Read'
# Follow the device code instructions, then exchange for token
curl -X POST \
https://login.microsoftonline.com/common/oauth2/v2.0/token \
-H 'Content-Type: application/x-www-form-urlencoded' \
-d 'grant_type=urn:ietf:params:oauth:grant-type:device_code&client_id={your-client-id}&device_code={device-code-from-step-1}'
5. 客户端凭据流(仅应用程序):
curl -X POST \
https://login.microsoftonline.com/{tenant-id}/oauth2/v2.0/token \
-H 'Content-Type: application/x-www-form-urlencoded' \
-d 'grant_type=client_credentials&client_id={client-id}&client_secret={client-secret}&scope=https://graph.microsoft.com/.default'
重要提示:确保你的 Azure AD 应用注册具有所需的委托或应用程序权限:
- 委托: Calendars.ReadWrite、People.Read、User.Read
- 应用程序: Calendars.ReadWrite、People.Read.All、User.ReadBasic.All(需要管理员同意)
身份验证模式详情
client_credentials
- 最适用于: 自动化场景、服务器到服务器的通信
- 需要:
CLIENT_ID、CLIENT_SECRET、TENANT_ID、USER_EMAIL - 权限: 应用程序权限(例如,Calendars.ReadWrite)
- 注意: 需要管理员同意应用程序
interactive(默认)
- 最适用于: 用户模拟场景、委派访问(最常见的用例)
- 设置: 无需配置——开箱即用
- 需要: 无(使用内置的多租户应用)
- 可选: 自定义应用可使用
CLIENT_ID和TENANT_ID - 权限: 委派权限(例如,Calendars.ReadWrite)
- 身份验证流程:
- 首先尝试基于浏览器的交互式登录
- 如果浏览器身份验证失败,则回退到设备代码流程
- 设备代码和 URL 会显示在 MCP 客户端聊天中,方便访问
- 系统会提示用户在浏览器中进行身份验证
- 注意: 使用内置的多租户应用(适用于任何组织)
client_provided_token
- 最适用于: 自定义令牌管理、与现有身份验证系统集成
- 需要:
ACCESS_TOKEN、USER_EMAIL - 可选:
TOKEN_EXPIRES_ON(如果未提供,则假设从开始时间起有效期为 1 小时) - 令牌来源: Microsoft Graph PowerShell、自定义应用、OAuth2 流程、Azure CLI(有限制)
- 用例: 使用特定范围进行测试、与现有身份验证流程集成、CI/CD 管道、开发/调试
- 注意: 必须在外部处理令牌刷新
构建
# Install dependencies
npm install
# Build the project
npm run build
# Docker build
docker build -t mcp/outlook-meetings-scheduler .
许可证
此 MCP 服务基于 ISC 许可证授权。详情请参阅项目仓库中的 LICENSE 文件。
免责声明
此 MCP 服务与 Microsoft 或 Microsoft Graph API 没有关联。使用风险自负。使用此工具时,请确保遵守组织的政策和指南。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。
