返回市场
outlookmcp服务器

outlookmcp服务器

作者:kgatilin2 星标更新:2025-04-09

项目介绍

Outlook Calendar MCP Server

这是一个提供只读访问Outlook/Microsoft 365日历的MCP(模型上下文协议)服务器。

预备条件

  • Go 1.21或更高版本
  • 具有日历访问权限的Microsoft 365账户
  • 在Azure AD中注册的应用程序,并具有适当的权限

项目结构

  • outlook/outlook_api.go - 与Outlook日历交互的内部API
  • cmd/mcp/main.go - 用于AI助手的MCP服务器实现
  • cmd/cli/main.go - 测试用的命令行界面
  • config.example.yaml - 示例配置文件

安装

git clone https://github.com/your-username/outlookmcp.git
cd outlookmcp
go mod download

构建应用程序

构建MCP服务器

# 为当前平台构建
go build -o outlook-mcp ./cmd/mcp

# 交叉编译到Windows
GOOS=windows GOARCH=amd64 go build -o outlook-mcp.exe ./cmd/mcp

# 交叉编译到macOS
GOOS=darwin GOARCH=amd64 go build -o outlook-mcp-mac ./cmd/mcp

# 交叉编译到Linux
GOOS=linux GOARCH=amd64 go build -o outlook-mcp-linux ./cmd/mcp

构建CLI客户端

# 为当前平台构建
go build -o outlook-cli ./cmd/cli

# 交叉编译到Windows
GOOS=windows GOARCH=amd64 go build -o outlook-cli.exe ./cmd/cli

# 交叉编译到macOS
GOOS=darwin GOARCH=_amd64 go build -o outlook-cli-mac ./cmd/cli

# 交叉编译到Linux
GOOS=linux GOARCH=amd64 go build -o outlook-cli-linux ./cmd/cli

配置

有两种方式来配置应用程序:

  1. 使用YAML配置文件(参见config.example.yaml
  2. 使用环境变量

配置文件

基于示例创建一个config.yaml文件:

outlook:
  me: "John Doe"
  max_attendees: 10
  max_event_count: 50
  skip_all_day_events: true

环境变量

创建一个.env文件,包含你的Azure AD应用程序凭证:

OUTLOOK_TENANT_ID=your-tenant-id
OUTLOOK_CLIENT_ID=your-client-id
OUTLOOK_CLIENT_SECRET=your-client-secret

运行应用程序

MCP服务器和CLI应用程序都接受可选的命令行参数:

  • 第一个参数:配置文件路径(可选)
  • 第二个参数:.env文件路径(可选)

从源码运行

运行MCP服务器

# 使用默认配置
go run cmd/mcp/main.go

# 使用自定义配置文件
go run cmd/mcp/main.go config.yaml

# 使用自定义配置和.env文件
go run cmd/mcp/main.go config.yaml .env.production

运行CLI客户端

# 使用默认配置
go run cmd/cli/main.go

# 使用自定义配置文件
go run cmd/cli/main.go config.yaml

# 使用自定义配置和.env文件
go run cmd/cli/main.go config.yaml .env.production

运行已构建的二进制文件

运行MCP服务器二进制文件

# 使用默认配置
./outlook-mcp

# 使用自定义配置文件
./outlook-mcp config.yaml

# 使用自定义配置和.env文件
./outlook-mcp config.yaml .env.production

运行CLI客户端二进制文件

# 使用默认配置
./outlook-cli

# 使用自定义配置文件
./outlook-cli config.yaml

# 使用自定义配置和.env文件
./outlook-cli config.yaml .env.production

认证

服务器实现了按需认证:

  1. 当调用日历工具时,检查是否已经认证
  2. 如果未认证,则返回一个带有认证URL的错误
  3. 必须首先调用get_auth_url工具以开始认证流程
  4. 认证URL将在浏览器中打开
  5. 成功认证后,回调被捕获并存储令牌

可用工具

get_auth_url

启动与Microsoft的认证流程。

参数:

返回: 需要在浏览器中打开的认证URL

get_calendar_events

检索指定时间段内Outlook日历中的事件。

参数:

  • start_date(可选):日期格式YYYY-MM-DD。如果没有提供,默认为今天。
  • end_date(可选):日期格式YYYY-MM-DD。如果没有提供,默认为今天。

返回: 一个包含以下属性的日历事件的JSON数组:

  • subject:事件标题
  • startTime:事件开始时间
  • endTime:事件结束时间
  • isAllDay:是否全天事件
  • isAccepted:是否接受
  • isCancelled:是否取消
  • location:事件地点(如果可用)
  • organizer:事件组织者姓名(如果可用)
  • description:事件简介/预览(如果可用)
  • attendees:参会人员列表

示例用法

首先进行认证:

{
  "tool": "get_auth_url",
  "params": {}
}

然后检索日历事件:

{
  "tool": "get_calendar_events",
  "params": {
    "start_date": "2023-11-01",
    "end_date": "2023-11-07"
  }
}

CLI用法

CLI应用程序提供了一个简单的交互式界面:

  1. 选择get_auth_url进行认证
  2. 在浏览器中打开提供的URL以授权应用程序
  3. 授权后,使用get_calendar_events检索日历数据

安全注意事项

  • 安全地存储你的客户端密钥(使用环境变量)
  • 服务器仅提供对日历数据的只读访问
  • 没有实现写操作
  • 令牌仅在服务器执行期间存储在内存中

Azure AD应用程序设置

  1. 在Azure门户中注册一个新的应用程序
  2. 添加以下权限:
    • Calendars.Read
    • Calendars.Read.Shared
    • Calendars.ReadBasic
  3. 设置重定向URI为http://localhost:1111/callback
  4. 创建客户端密钥并更新配置