Outlook日历管理服务

一个基于Azure Functions和Microsoft Graph API的Outlook日历管理服务,支持日程获取和会议预约功能。

  • by fuumiiya
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 fuumiiya/outlook-mcp-server

使用说明

Outlook MCP服务器

Azure Functions招待MCP服务器。Microsoft Graph API来修改标记元素的显示属性Outlook可以访问日历,获取约会和预约会议。

机能

  • 予定取得:获取指定用户最近30天的计划
  • 会议予约: 新しい会議予定を作成(参加者、場所、Teams会議対応)
  • 日本时间对应: JST(日本标准时间)的时刻处理
  • Azure认证: Azure AD通过认证安全访问

可用工具

get_user_outlook_events

指定用户的Outlook获取计划。

参数:

  • userPrincipalName (必需):要获取计划的用户的UPN(示例:user@example.com)

响应示例:

{
  "user": {
    "userPrincipalName": "user@example.com"
  },
  "value": [
    {
      "subject": "チーム会議",
      "start": "2025-01-15T09:00:00",
      "end": "2025-01-15T10:00:00",
      "isAllDay": false
    }
  ]
}

create_simple_event

指定用户的Outlook中所述修改相应参数的值。

参数:

  • userPrincipalName (必需):创建计划的用户的UPN
  • subject (必需):计划主题
  • start (必须):开始时刻(ISO形式)
  • end (必须):终了时刻(ISO形式)
  • attendees (可选):参与者的电子邮件地址(逗号分隔)
  • isOnlineMeeting (任意):Teams会议の有无(boolean)
  • location (任意):会议场所
  • body (任意):预定正文

响应示例:

{
  "created": {
    "id": "event-id",
    "subject": "新しい会議",
    "start": "2025-01-15T09:00:00",
    "end": "2025-01-15T10:00:00",
    "webLink": "https://outlook.office.com/...",
    "attendees": ["user1@example.com", "user2@example.com"],
    "location": "会議室A",
    "isOnlineMeeting": true
  }
}

使用例

创建者在此MCP打开服务器responsesAPI中所述修改相应参数的值。

MCP客户端使用

计划检索示例

{
  "tool": "get_user_outlook_events",
  "arguments": {
    "userPrincipalName": "user@company.com"
  }
}

会议预约示例

{
  "tool": "create_simple_event",
  "arguments": {
    "userPrincipalName": "user@company.com",
    "subject": "プロジェクト会議",
    "start": "2025-01-20T14:00:00",
    "end": "2025-01-20T15:00:00",
    "attendees": "colleague1@company.com,colleague2@company.com",
    "isOnlineMeeting": true,
    "location": "会議室A",
    "body": "プロジェクトの進捗について話し合います。"
  }
}

响应示例

计划捕获成功响应

{
  "user": {
    "userPrincipalName": "user@company.com"
  },
  "value": [
    {
      "subject": "チーム会議",
      "start": "2025-01-15T09:00:00",
      "end": "2025-01-15T10:00:00",
      "isAllDay": false
    },
    {
      "subject": "プロジェクトレビュー",
      "start": "2025-01-16T14:00:00",
      "end": "2025-01-16T15:30:00",
      "isAllDay": false
    }
  ]
}

错误响应

{
  "error": "userPrincipalName is required."
}

安装,安装

1. Azure Functions 创建项目

func init outlook-mcp-server --python
cd outlook-mcp-server

2.安装相关性

pip install -r requirements.txt

3.环境设定

local.settings.json 添加以下设置:

{
  "IsEncrypted": false,
  "Values": {
    "FUNCTIONS_WORKER_RUNTIME": "python",
    "AzureWebJobsStorage": "",
    "AZURE_TENANT_ID": "your-tenant-id",
    "AZURE_CLIENT_ID": "your-client-id",
    "AZURE_CLIENT_SECRET": "your-client-secret"
  }
}

注意:实际值为Azure AD替换为在应用程序注册中获取的值。

4. Azure AD 应用程序设置

  1. Azure Portal 在中注册应用程序
  2. Microsoft Graph API 的权限:
    • Calendars.Read
    • Calendars.ReadWrite
  3. 生成客户端密码
  4. Azure Functions 在设置中添加凭据

5.部署

func azure functionapp publish <your-function-app-name>

技术栈

  • Azure功能:无服务器运行环境
  • Microsoft Graph API: Outlook 日历访问
  • Python 3.x:実装言语
  • Azure AD:认证・认可

许可证

MIT许可证

貢献

欢迎普鲁特和伊修的报告!

注意事项

  • 这个服务器MCP(Model Context Protocol)对较大场景进行渲染期间已观察到该故障
  • Azure AD需要认证
  • Microsoft Graph API使用限制
  • 请在生产环境中进行适当的安全设置
  • 因为现在一整天都不能取得预定,所以今后需要定制
  • 有很多重构的余地(笑)