Outlook日历MCP服务器
这是一个MCP(模型上下文协议)服务器,提供对Outlook/Microsoft 365日历的只读访问。
先决条件
- 达到1.21或更高
- 具有日历访问权限的Microsoft 365帐户
- 在Azure AD中注册具有适当权限的应用程序
项目结构
outlook/outlook_api.go-用于与Outlook日历交互的内部APIcmd/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服务器
# Build for the current platform
go build -o outlook-mcp ./cmd/mcp
# Cross-compile for Windows
GOOS=windows GOARCH=amd64 go build -o outlook-mcp.exe ./cmd/mcp
# Cross-compile for macOS
GOOS=darwin GOARCH=amd64 go build -o outlook-mcp-mac ./cmd/mcp
# Cross-compile for Linux
GOOS=linux GOARCH=amd64 go build -o outlook-mcp-linux ./cmd/mcp构建CLI客户端
# Build for the current platform
go build -o outlook-cli ./cmd/cli
# Cross-compile for Windows
GOOS=windows GOARCH=amd64 go build -o outlook-cli.exe ./cmd/cli
# Cross-compile for macOS
GOOS=darwin GOARCH=amd64 go build -o outlook-cli-mac ./cmd/cli
# Cross-compile for Linux
GOOS=linux GOARCH=amd64 go build -o outlook-cli-linux ./cmd/cli配置
配置应用程序有两种方法:
- 使用YAML配置文件(请参阅
config.example.yaml) - 使用环境变量
配置文件
创建一个 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服务器
# With default configuration
go run cmd/mcp/main.go
# With custom config file
go run cmd/mcp/main.go config.yaml
# With custom config and env file
go run cmd/mcp/main.go config.yaml .env.production运行CLI客户端
# With default configuration
go run cmd/cli/main.go
# With custom config file
go run cmd/cli/main.go config.yaml
# With custom config and env file
go run cmd/cli/main.go config.yaml .env.production运行内置二进制文件
运行MCP服务器二进制文件
# With default configuration
./outlook-mcp
# With custom config file
./outlook-mcp config.yaml
# With custom config and env file
./outlook-mcp config.yaml .env.production运行CLI客户端二进制文件
# With default configuration
./outlook-cli
# With custom config file
./outlook-cli config.yaml
# With custom config and env file
./outlook-cli config.yaml .env.production认证
服务器实现按需身份验证:
- 当调用日历工具时,它会检查您是否已经通过身份验证
- 如果未通过身份验证,则返回带有身份验证URL的错误
- 您必须首先致电
get_auth_url启动身份验证流的工具 - 身份验证URL将在浏览器中打开
- 成功身份验证后,将捕获回调并存储令牌
可用工具
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应用程序提供了一个简单的交互界面:
- 选择
get_auth_url鉴定 - 在浏览器中打开提供的URL以授权应用程序
- 授权后,使用
get_calendar_events检索日历数据
安全考虑
- 安全地存储客户端机密(使用环境变量)
- 服务器仅提供对日历数据的只读访问
- 未执行任何写入操作
- 令牌仅在服务器执行期间存储在内存中
Azure AD应用程序设置
- 在Azure门户中注册新应用程序
- 添加以下权限:
- 日历。阅读 - 日历。读。共享 - 日历。ReadBasic
- 设置重定向 URI 到
http://localhost:1111/callback - 创建客户端密钥并更新配置
