](https://mseep.ai/app/anoopt-outlook-meetings-scheduler-mcp-server)
Outlook会议计划程序MCP服务器
MCP服务器,用于使用Microsoft Graph API在Microsoft Outlook中安排会议。
此MCP服务器允许您创建日历事件,创建与与会者的事件(包括查找他们的电子邮件地址)。 它与其他MCP服务器(如GitHub MCP服务器)无缝集成,以增强您的工作流程。
示例查询
- 安排明天下午3点与Sarah会面。
- 为明天下午2点创建一个名为“项目启动”的会议。根据需要添加梅根和约翰作为与会者。
使用GitHub MCP服务器
- 在组织/仓库存储库中创建一个题为“修复用户仪表板中的分页错误”的问题,描述为“用户报告在页面之间导航时看到重复条目”。然后安排一个日历提醒,让我明天下午3点查看此问题。
演示
工具
find-person
- 按姓名查找某人的电子邮件地址 - 输入: name (字符串) - 返回:具有姓名和电子邮件地址的匹配人员列表
create-event
- 使用Microsoft Graph API创建日历事件 - 输入: - subject (string):日历事件的主题 - body (string):日历事件的内容/正文 - start (可选):ISO格式的日期时间(例如2025-04-20T12:00:00) - end (可选):ISO格式的日期时间(例如2025-04-20T13:00:00) - timeZone (可选):事件的时区(默认:“GMT标准时间”) - 返回:事件详细信息,包括URL和ID
create-event-with-attendees
- 使用Microsoft Graph API为与会者创建日历事件 - 输入: - subject (string):日历事件的主题 - body (string):日历事件的内容/正文 - start (可选):ISO格式的日期时间(例如2025-04-20T12:00:00) - end (可选):ISO格式的日期时间(例如2025-04-20T13:00:00) - timeZone (可选):事件的时区(默认:“GMT标准时间”) - location (可选):活动地点 - attendees:{email、name(可选)、type(可选)}的数组 - 返回:事件详细信息,包括URL、ID和与会者列表
get-event
- 按ID获取日历事件的详细信息 - 输入: - eventId (string):要检索的事件的ID - 返回:详细的活动信息,包括主题、时间、与会者和URL
list-events
- 列出具有可选筛选功能的日历事件 - 输入: - subject (可选):按包含此文本的主题筛选事件 - startDate (可选):ISO格式的开始日期(例如2025-04-20T00:00:00),用于筛选以下事件 - endDate (可选):ISO格式的结束日期(例如2025-04-20T23:59:59),用于过滤事件,直到 - maxResults (可选):要返回的最大事件数 - 返回:包含基本信息和ID的日历事件列表
delete-event
- 删除日历事件 - 输入: - eventId (string):要删除的事件的ID - 返回:事件删除确认
update-event
- 更新现有日历事件 - 输入: - eventId (string):要更新的事件的ID - subject (可选):日历活动的新主题 - 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 (string):要更新的事件的ID - addAttendees (可选):要添加的与会者数组:{电子邮件、姓名(可选)、类型(可选)} - removeAttendees (可选):要从事件中删除的电子邮件地址数组 - 返回:更新的活动参与者信息
设置
身份验证模式
此MCP服务器支持三种身份验证模式:
1.互动(委托)
非常感谢。 \_关闭
最适合:用户模拟场景,访问用户特定数据
- 提示用户以交互方式登录
- 使用委派权限
- 以登录用户身份进行身份验证
2.客户端凭据(仅限应用程序)
最适合:服务器到服务器场景、自动化流程
- 使用Azure AD应用程序凭据
- 需要应用程序权限
- 无需用户交互即可工作
3.客户提供的令牌
最适合:自定义代币管理、预先获得的代币
- 使用客户端提供的令牌
- 需要从外部管理令牌刷新
Microsoft Graph API安装程序
用于交互式(委托)模式
- 在 微软Azure门户 (或使用现有应用程序)
- 添加重定向URI:
http://localhost(移动和桌面应用平台) - 启用公共客户端流:转到身份验证>高级设置>“允许公共客户端流”= 是
- 需要补助 委托权限:Microsoft Graph API>委派权限>日历。读写,人们。阅读,用户。阅读
- 注意您的客户端ID和租户ID(与自定义应用程序的交互模式不需要客户端密码)
注: 默认情况下,服务器使用内置的多租户应用程序,因此自定义应用程序设置是可选的。当需要身份验证时,设备代码和登录URL将直接出现在您的MCP客户端聊天界面中。
用于客户端凭据(仅应用程序)模式
- 在 微软Azure门户
- 创建客户端密钥
- 需要补助 应用程序权限:Microsoft Graph API>应用程序权限>日历。读写,人们。读。全部,用户。阅读基础。全部
- 为您的组织授予管理员许可
- 记下您的客户ID、客户密码和租户ID
使用VS代码
身份验证模式配置
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中的用户设置(JSON)文件中。您可以按
Ctrl + Shift + P键入首选项: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": "",
"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": "",
"CLIENT_SECRET": "",
"TENANT_ID": "",
"USER_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": "",
"TOKEN_EXPIRES_ON": "2025-10-03T12:00:00Z",
"USER_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": "",
"TENANT_ID": ""
}
}
}
}如果您需要特定的品牌或租户限制,请使用自定义应用程序。
替换 /path/to/outlook-meetings-scheduler-mcp-server 带有克隆存储库的绝对路径。
码头工人
在本地使用Docker运行MCP服务器。使用以下命令构建Docker镜像:
docker build -t mcp/outlook-meetings-scheduler .对于手动安装,请将以下JSON块添加到VS Code中的用户设置(JSON)文件中。您可以按 Ctrl + Shift + P 键入首选项: 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": "",
"CLIENT_ID": "",
"CLIENT_SECRET": "${input:client_secret}",
"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": "",
"TENANT_ID": ""
}
}
}
}客户端凭据模式:
{
"mcpServers": {
"outlook-meetings-scheduler": {
"command": "npx",
"args": [
"-y",
"outlook-meetings-scheduler"
],
"env": {
"AUTH_MODE": "client_credentials",
"CLIENT_ID": "",
"CLIENT_SECRET": "",
"TENANT_ID": "",
"USER_EMAIL": ""
}
}
}
}客户端提供的令牌模式:
{
"mcpServers": {
"outlook-meetings-scheduler": {
"command": "npx",
"args": [
"-y",
"outlook-meetings-scheduler"
],
"env": {
"AUTH_MODE": "client_provided_token",
"ACCESS_TOKEN": "",
"TOKEN_EXPIRES_ON": "2025-10-03T12:00:00Z",
"USER_EMAIL": ""
}
}
}
}使用Claude Desktop
码头工人
- 在本地使用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": "",
"CLIENT_SECRET": "",
"TENANT_ID": "",
"USER_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": "",
"TENANT_ID": ""
}
}
}
}客户端凭据模式:
{
"mcpServers": {
"outlook-meetings-scheduler": {
"command": "npx",
"args": [
"-y",
"outlook-meetings-scheduler"
],
"env": {
"AUTH_MODE": "client_credentials",
"CLIENT_ID": "",
"CLIENT_SECRET": "",
"TENANT_ID": "",
"USER_EMAIL": ""
}
}
}
}客户端提供的令牌模式:
{
"mcpServers": {
"outlook-meetings-scheduler": {
"command": "npx",
"args": [
"-y",
"outlook-meetings-scheduler"
],
"env": {
"AUTH_MODE": "client_provided_token",
"ACCESS_TOKEN": "",
"TOKEN_EXPIRES_ON": "2025-10-03T12:00:00Z",
"USER_EMAIL": ""
}
}
}
}示例场景
与GitHub MCP服务器集成
您可以将此MCP服务器与GitHub MCP服务器等其他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会议计划程序MCP服务器为审阅创建日历事件
根据Pull请求安排代码审查会议
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会议计划程序MCP服务器安排与这些团队成员的会议
多MCP设置配置
要同时使用GitHub和Outlook MCP服务器,请执行以下操作:
{
"mcpServers": {
"outlook-meetings-scheduler": {
"command": "npx",
"args": [
"-y",
"outlook-meetings-scheduler"
],
"env": {
"CLIENT_ID": "",
"CLIENT_SECRET": "",
"TENANT_ID": "",
"USER_EMAIL": ""
}
},
"github": {
"command": "npx",
"args": [
"-y",
"@modelcontextprotocol/github-mcp"
],
"env": {
"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 sarah.jones@example.com and mike.thompson@example.com 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应用注册具有所需的 委派 或 应用 权限:
- 委派:日历。读写,人们。阅读,用户。阅读
- 应用:日历。读写,人们。读。全部,用户。阅读基础。全部(需要管理员同意)
身份验证模式详细信息
客户端证书
- 最适合: 自动化场景,服务器到服务器通信
- 要求:
CLIENT_ID,CLIENT_SECRET,TENANT_ID,USER_EMAIL - 权限: 应用程序权限(例如,Calendars.ReadWrite)
- 注: 应用程序需要管理员同意
交互式(默认)
- 最适合: 用户模拟场景、委托访问(最常见的用例)
- 设置: 无需配置-开箱即用
- 要求: 无(使用内置的多租户应用程序)
- 可选:
CLIENT_ID和TENANT_ID用于自定义应用程序 - 权限: 委托权限(例如,Calendars.ReadWrite)
- 身份验证流程:
- 首先尝试基于浏览器的交互式登录 - 如果浏览器身份验证失败,则返回设备代码流 - 设备代码和URL出现在MCP客户端聊天中 便于访问 - 系统将提示用户在浏览器中进行身份验证
- 注: 使用内置的多租户应用程序(适用于任何组织)
客户端_提供_令牌
- 最适合: 自定义令牌管理,与现有身份验证系统集成
- 要求:
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。使用风险自负。确保您在使用此工具时遵守组织的政策和指导方针。
