最全面、安全且以用户为中心的 MCP 服务器用于 Microsoft 365
通过 Claude 和其他大语言模型(LLMs)以企业级安全性、全面的日志记录以及无缝多用户支持来改变您与 Microsoft 365 的交互方式。
🔐 用户中心的安全性:每个用户都有自己的隔离加密数据空间
📊 企业日志记录:具有完全可观测性的四级全面日志系统
🛠️ 50 多种专业工具:完整的 Microsoft 365 API 覆盖并经过验证
⚡ 零配置设置:自动项目初始化 —— 只需 npm install 即可!
🏢 多用户准备就绪:基于会话的隔离并使用 Microsoft 认证
🔧 开发者友好:广泛的调试、监控和错误处理
git clone https://github.com/Aanerud/MCP-Microsoft-Office.git
cd MCP-Microsoft-Office
npm install # ✨ 这会自动完成一切!(我希望如此!)
自动执行的操作:
.env 配置文件编辑自动生成的 .env 文件:
MICROSOFT_CLIENT_ID=your_client_id_here
MICROSOFT_TENANT_ID=your_tenant_id_here
📋 获取这些凭据的方法: Azure 应用注册门户
npm run dev:web # 全面开发模式,带全面日志记录
🌐 访问您的服务器: http://localhost:3000
getMail / readMail - 使用过滤器检索收件箱消息sendMail - 编写并发送带有附件的电子邮件searchMail - 使用 KQL 查询的强大电子邮件搜索flagMail - 标记/取消标记重要电子邮件getEmailDetails - 查看完整的电子邮件内容和元数据markAsRead / markEmailRead - 更新已读状态getMailAttachments - 下载电子邮件附件addMailAttachment - 向电子邮件添加文件removeMailAttachment - 删除电子邮件附件getCalendar / getEvents - 使用过滤器查看即将发生的事件createEvent - 安排带有参会者和会议室的会议updateEvent - 修改现有日历条目cancelEvent - 从日历中删除事件getAvailability - 检查空闲/忙碌时间acceptEvent - 接受会议邀请tentativelyAcceptEvent - 暂时接受会议declineEvent - 拒绝会议邀请findMeetingTimes - 寻找最佳会议时段getRooms - 查找可用会议室getCalendars - 列出所有用户的日历addAttachment - 向日历事件添加文件removeAttachment - 删除事件附件listFiles - 浏览 OneDrive 和 SharePoint 文件searchFiles - 按名称或内容查找文件downloadFile - 获取文件内容uploadFile - 将新文件添加到云存储getFileMetadata - 查看文件属性和权限getFileContent - 读取文档内容setFileContent / updateFileContent - 修改文件内容createSharingLink - 生成安全共享 URL# Microsoft 365 配置
MICROSOFT_CLIENT_ID=your_client_id
MICROSOFT_TENANT_ID=your_tenant_id
# 服务器配置
PORT=3000
NODE_ENV=development
# 安全
MCP_ENCRYPTION_KEY=your_32_byte_encryption_key
MCP_TOKEN_SECRET=your_jwt_secret
# 数据库(可选,默认为 SQLite)
DATABASE_TYPE=sqlite # 或 'mysql', 'postgresql'
DATABASE_URL=your_database_url
# 日志记录
LOG_LEVEL=info
LOG_RETENTION_DAYS=30
# 备份用户数据
npm run backup
# 从备份恢复
npm run restore backup-file.sql
# 数据库迁移
npm run migrate
# 电子邮件管理
"显示我上周未读的邮件"
"向项目团队发送会议纪要"
"查找关于 Q4 预算的邮件"
# 日历操作
"明天我有哪些会议?"
"下周二下午 2 点与 Sarah 安排一对一会议"
"找到 John、Mary 和我都在空闲的时间"
# 文件管理
"查找我上个月的 PowerPoint 演示文稿"
"与团队分享项目提案"
"上传最新的预算电子表格"
# 人员与联系人
"查找市场部门的联系人"
"获取 John Smith 的联系信息"
"谁是我最频繁的电子邮件联系人?"
// 带完整验证的直接 API 调用
POST /api/v1/mail/send
{
"to": ["colleague@company.com"],
"subject": "项目更新",
"body": "这是最新的更新...",
"attachments": [{
"name": "报告.pdf",
"contentBytes": "base64_encoded_content"
}]
}
// 带参会者的日历事件创建
POST /api/v1/calendar/events
{
"subject": "团队站会",
"start": "2024-01-15T09:00:00Z",
"end": "2024-01-115T09:30:00Z",
"attendees": ["team@company.com"],
"location": "会议室 A"
}
// 使用高级过滤器的文件搜索
GET /api/v1/files?query=presentation&limit=10&type=powerpoint
# 完全重置数据库
npm run reset-db
# 检查数据库健康状况
curl http://localhost:3000/api/health
# 查看数据库日志
tail -f data/logs/database.log
# 检查 Microsoft 365 配置
echo $MICROSOFT_CLIENT_ID
echo $MICROSOFT_TENANT_ID
# 测试认证端点
curl http://localhost:3000/api/auth/status
# 清除数据
rm -rf data/*
# 修复目录权限
chmod -R 755 data/
chown -R $USER:$USER data/
# 检查磁盘空间
df -h
# 完整调试模式
npm run dev:web
# 特定类别日志记录
DEBUG=mail,calendar npm run dev:web
# 查看实时日志
curl http://localhost:3000/api/logs?limit=100&level=debug
# 检查系统指标
curl http://localhost:3000/api/health
# 监控 API 响应时间
curl -w "@curl-format.txt" http://localhost:3000/api/mail
# 数据库性能
sqlite3 data/mcp.sqlite ".timer on" "SELECT COUNT(*) FROM user_logs;"
# 生产环境变量
NODE_ENV=production
PORT=3000
DATABASE_TYPE=postgresql
DATABASE_URL=postgresql://user:pass@host:5432/mcpdb
MCP_ENCRYPTION_KEY=your_32_byte_production_key
LOG_LEVEL=info
LOG_RETENTION_DAYS=90
# 生成安全加密密钥
openssl rand -hex 32
# 设置正确的文件权限
chmod 600 .env
chmod 700 data/
# 启用 HTTPS(推荐)
HTTPS_ENABLED=true
SSL_CERT_PATH=/path/to/cert.pem
SSL_KEY_PATH=/path/to/key.pem
# 健康检查端点
GET /api/health
# 用户活动监控
GET /api/logs?scope=user&limit=1000
# 系统指标
GET /api/metrics
npm installGET /api/auth/status # 检查认证状态
POST /api/auth/login # 启动 Microsoft 365 登录
GET /api/auth/callback # OAuth 回调处理器
POST /api/auth/logout # 登出并清理会话
GET /api/v1/mail # 获取收件箱消息
POST /api/v1/mail/send # 发送带有附件的电子邮件
GET /api/v1/mail/search # 搜索电子邮件
PATCH /api/v1/mail/:id/flag # 标记/取消标记电子邮件
GET /api/v1/mail/:id # 获取电子邮件详情
PATCH /api/v1/mail/:id/read # 标记为已读/未读
GET /api/v1/calendar # 获取日历事件
POST /api/v1/calendar/events # 创建新事件
PUT /api/v1/calendar/events/:id # 更新事件
DELETE /api/v1/calendar/events/:id # 取消事件
GET /api/v1/calendar/rooms # 获取可用房间
GET /api/v1/files # 列出文件
GET /api/v1/files/search # 搜索文件
POST /api/v1/files/upload # 上传文件
GET /api/v1/files/:id # 获取文件元数据
GET /api/v1/files/:id/content # 下载文件
GET /api/v1/people # 获取相关联系人
GET /api/v1/people/search # 搜索联系人
GET /api/v1/people/:id # 获取联系人详情
GET /api/health # 系统健康检查
GET /api/logs # 获取系统/用户日志
POST /api/v1/query # 自然语言查询
auth - 认证和授权事件mail - 电子邮件操作和活动calendar - 日历事件和调度files - 文件访问和管理people - 联系人和目录操作graph - Microsoft Graph API 交互storage - 数据库和存储操作request - HTTP 请求/响应日志monitoring - 系统监控和指标{
"id": "log_entry_uuid",
"timestamp": "2025-07-06T17:04:23.131Z",
"level": "info",
"category": "mail",
"message": "电子邮件发送成功",
"context": {
"userId": "ms365:user@company.com",
"operation": "sendMail",
"duration": 1250,
"recipientCount": 3
},
"sessionId": "session_uuid",
"deviceId": "device_uuid"
}
此日志系统是 生产测试过的 并提供:
日志系统确保对系统操作的完全可见性,同时保持最高的用户隐私和数据安全标准。
Claude Desktop ←→ MCP Adapter ←→ 远程 MCP 服务器 ←→ Microsoft 365
MCP 服务器可以作为远程服务部署,允许多个用户通过 MCP 适配器连接:
session-service.cjs 管理,并具有唯一的会话 IDMCP_SERVER_URL 环境变量连接/.well-known/oauth-protected-resource 端点发现每个用户的数据通过基于会话的架构完全隔离:
// 来自 session-service.cjs
async createSession(options = {}) {
const sessionId = uuid();
const sessionSecret = crypto.randomBytes(SESSION_SECRET_LENGTH).toString('hex');
const expiresAt = Date.now() + SESSION_EXPIRY;
const sessionData = {
session_id: sessionId,
session_secret: sessionSecret,
expires_at: expiresAt,
created_at: Date.now(),
// 用户特定数据存储
};
}
# 克隆并设置开发环境
git clone https://github.com/Aanerud/MCP-Microsoft-Office.git
cd MCP-Microsoft-Office
npm install
# 在开发模式下运行,带全面日志
npm run dev:web
# 运行测试
npm test
# 检查代码质量
npm run lint