返回市场
微软待办事项MCP服务器

微软待办事项MCP服务器

作者:jordanburke19 星标更新:2025-11-11

项目介绍

Microsoft To Do MCP

CI npm version

这是一个模型上下文协议(MCP)服务器,它使AI助手如Claude和Cursor能够通过Microsoft Graph API与Microsoft To Do进行交互。该服务通过安全的OAuth 2.0认证流程提供了全面的任务管理功能。

功能

  • 15个MCP工具:完整的任务管理功能,包括列表、任务、检查项以及组织功能
  • 无缝认证:自动刷新令牌,无需手动干预
  • OAuth 2.0认证:安全认证并自动刷新令牌
  • Microsoft Graph API集成:直接集成到Microsoft官方API
  • 多租户支持:适用于个人、工作和学校Microsoft账户
  • TypeScript:完全类型化以提高可靠性和开发者体验
  • ESM模块:现代JavaScript模块系统

预备条件

  • Node.js 16或更高版本(已测试Node.js 18.x、20.x和22.x)
  • pnpm包管理器
  • 一个Microsoft账户(个人、工作或学校)
  • Azure应用注册(见下文设置)

安装

方案1:全局安装(推荐)

# 使用npm全局安装
npm install -g microsoft-todo-mcp-server

# 或使用pnpm
pnpm install -g microsoft-todo-mcp-server

# 或直接使用npx运行(无需安装)
npx microsoft-todo-mcp-server

该包提供三个命令别名:

  • microsoft-todo-mcp-server - 完整包名
  • mstodo - MCP服务器的短别名
  • mstodo-config - 配置辅助工具

方案2:克隆并本地运行

git clone https://github.com/jordanburke/microsoft-todo-mcp-server.git
cd microsoft-todo-mcp-server
pnpm install
pnpm run build

Azure应用注册

  1. 访问Azure门户
  2. 导航至“应用注册”并创建一个新的注册
  3. 命名你的应用程序(例如,“To Do MCP”)
  4. 对于“支持的账户类型”,根据需要选择以下之一:
    • 仅限本组织目录中的账户(单租户) - 用于单一组织内
    • 任何组织目录中的账户(任何Azure AD目录 - 多租户) - 用于多个组织
    • 任何组织目录和个人Microsoft账户 - 用于工作账户和个人账户
  5. 设置重定向URI为http://localhost:3000/callback
  6. 创建应用后,前往“证书和密钥”并创建新的客户端密钥
  7. 转到“API权限”并添加以下权限:
    • Microsoft Graph > 委派权限:
      • Tasks.Read
      • Tasks.ReadWrite
      • User.Read
  8. 点击“授予管理员同意”以获取这些权限

配置

环境设置

在项目根目录创建一个.env文件(用于认证):

CLIENT_ID=your_client_id
CLIENT_SECRET=your_client_secret
TENANT_ID=your_tenant_setting
REDIRECT_URI=http://localhost:3000/callback

TENANT_ID选项

  • organizations - 用于多租户组织账户(未指定时默认)
  • consumers - 仅用于个人Microsoft账户
  • common - 用于组织和个人账户
  • your-specific-tenant-id - 用于单租户配置

示例:

# 用于多租户组织账户(默认)
TENANT_ID=organizations

# 用于个人Microsoft账户
TENANT_ID=consumers

# 用于组织和个人账户
TENANT_ID=common

# 用于特定组织租户
TENANT_ID=00000000-0000-0000-0000-000000000000

令牌存储

服务器将认证令牌存储在tokens.json中,并在过期前5分钟自动刷新。你可以覆盖令牌文件的位置:

# 使用环境变量
export MSTODO_TOKEN_FILE=/path/to/custom/tokens.json

# 或直接传递令牌
export MS_TODO_ACCESS_TOKEN=your_access_token
export MS_TODO_REFRESH_TOKEN=your_refresh_token

使用

完整设置流程

步骤1:与Microsoft认证

# 如果全局安装
git clone https://github.com/jordanburke/microsoft-todo-mcp-server.git
cd microsoft-todo-mcp-server
pnpm install
pnpm run auth

# 或如果本地运行
pnpm run auth

这将打开浏览器窗口进行Microsoft认证,并创建一个tokens.json文件。

步骤2:创建MCP配置

# 生成MCP配置文件
pnpm run create-config

# 或使用全局辅助工具(如果全局安装)
mstodo-config

这将创建一个包含你的认证令牌的mcp.json文件。

步骤3:配置你的AI助手

对于Claude桌面:

添加到你的配置文件:

  • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
  • Windows: %APPDATA%\Claude\claude_desktop_config.json
  • Linux: ~/.config/Claude/claude_desktop_config.json
{
  "mcpServers": {
    "microsoftTodo": {
      "command": "npx",
      "args": ["--yes", "microsoft-todo-mcp-server"],
      "env": {
        "MS_TODO_ACCESS_TOKEN": "your_access_token",
        "MS_TODO_REFRESH_TOKEN": "your_refresh_token"
      }
    }
  }
}

对于Cursor:

# 复制到Cursor的全局配置
cp mcp.json ~/.cursor/mcp-servers.json

可用脚本

# 开发与构建
pnpm run build        # 将TypeScript编译成JavaScript
pnpm run dev          # 构建并运行CLI命令

# 运行服务器
pnpm start            # 直接运行MCP服务器
pnpm run cli          # 通过CLI包装器运行MCP服务器
npx microsoft-todo-mcp-server  # 运行全局安装的版本

# 认证与配置
pnpm run auth         # 启动OAuth认证服务器
pnpm run create-config # 根据tokens.json生成mcp.json

# 代码质量
pnpm run format       # 使用Prettier格式化代码
pnpm run format:check # 检查代码格式
pnpm run lint         # 运行代码检查
pnpm run typecheck    # TypeScript类型检查

MCP工具

服务器提供了13个工具,用于全面管理Microsoft To Do:

认证

  • auth-status - 检查认证状态、令牌过期时间和账户类型

任务列表(顶级容器)

  • get-task-lists - 获取所有任务列表及其元数据(默认、共享等)
  • create-task-list - 创建新的任务列表
  • update-task-list - 重命名现有任务列表
  • delete-task-list - 删除任务列表及其所有内容

任务(主要待办事项)

  • get-tasks - 从列表中获取任务,支持过滤、排序和分页
    • 支持OData查询参数:$filter$select$orderby$top$skip$count
  • create-task - 创建新的任务,支持所有属性
    • 标题、描述、截止日期、开始日期、重要性、提醒、状态、类别
  • update-task - 更新任何任务属性
  • delete-task - 删除任务及其所有检查项

检查项(子任务)

  • get-checklist-items - 获取特定任务的子任务
  • create-checklist-item - 向任务添加新的子任务
  • update-checklist-item - 更新子任务文本或完成状态
  • delete-checklist-item - 移除特定子任务

架构

项目结构

  • MCP服务器 (src/todo-index.ts) - 实现MCP协议的核心服务器
  • CLI包装器 (src/cli.ts) - 具有令牌管理的可执行入口点
  • 认证服务器 (src/auth-server.ts) - 用于OAuth 2.0流程的Express服务器
  • 配置生成器 (src/create-mcp-config.ts) - 辅助创建MCP配置

技术细节

  • Microsoft Graph API:使用v1.0端点
  • 认证:MSAL(Microsoft认证库)与PKCE流程
  • 令牌管理:在过期前5分钟自动刷新
  • 构建系统:tsup用于快速TypeScript编译
  • 模块系统:ESM(ECMAScript模块)

限制与已知问题

个人Microsoft账户

  • MailboxNotEnabledForRESTAPI错误:个人Microsoft账户(outlook.com、hotmail.com、live.com)通过Microsoft Graph对To Do API的访问受限
  • 这是Microsoft服务的限制,而非此应用程序的问题
  • 工作/学校账户具有完整的API访问权限

API限制

  • 根据Microsoft政策适用速率限制
  • 一些功能可能对个人账户不可用
  • 共享列表的功能有限

故障排除

认证问题

令牌获取失败

  • 验证.env文件中的CLIENT_IDCLIENT_SECRETTENANT_ID
  • 确保重定向URI完全匹配:http://localhost:3000/callback
  • 检查Azure应用权限是否已获得管理员同意

权限问题

  • 确保已添加并同意所有必需的Graph API权限
  • 对于组织账户,可能需要管理员同意

账户类型配置

工作/学校账户

TENANT_ID=organizations  # 多租户
# 或使用你的特定租户ID

个人账户

TENANT_ID=consumers  # 仅个人
# 或TENANT_ID=common用于两种类型

调试

检查认证状态:

# 使用MCP工具
# 在你的AI助手:“检查认证状态”

# 或直接查看令牌
cat tokens.json | jq '.expiresAt'

# 将时间戳转换为可读日期
date -d @$(($(cat tokens.json | jq -r '.expiresAt') / 1000))

启用详细日志记录:

# 服务器将日志输出到stderr用于调试
mstodo 2> debug.log

贡献

欢迎贡献!请:

  1. 分叉仓库
  2. 创建一个特性分支
  3. 提交前运行pnpm run lintpnpm run typecheck
  4. 提交拉取请求

许可

MIT许可 - 查看LICENSE文件了解详情

致谢

支持