Microsoft 365 MCP
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Microsoft 365 MCPshow my calendar events for today"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Microsoft 365 MCP 个人助理服务 (v0.1.0)
这是一个基于 Model Context Protocol (MCP) 标准构建的个人生产力助手。通过直接集成 Microsoft Graph API,它赋予大语言模型(LLM)管理您 Microsoft 365 账户(日历、待办事项、电子邮件)的能力。
🎯 定位:私密、安全、高效
本服务专为个人使用优化,移除了所有可能导致意外向外部发送信息的复杂功能(如会议邀请、参与者管理、线上会议创建),确保 LLM 作为一个纯粹的“个人秘书”在您的私有域内工作。
Related MCP server: Microsoft Graph MCP Server
🌟 核心特性
1. 深度个人化集成
日历 (Calendar): 增删改查个人日程。支持查询忙闲状态(自动锁定当前用户),支持自定义提醒设置。
待办 (Tasks): 完整支持 Microsoft To Do。可管理截止日期、优先级、分类及提醒。
邮件 (Email): 快速查阅收件箱、发送个人邮件、清理过期邮件。
2. 完美的时区方案 (UTC+8)
原生东八区支持: 服务器在请求头中硬编码
Prefer: outlook.timezone="China Standard Time",确保所有返回的时间数据均为北京时间。时区禁转原则: 通过系统提示词严格限制 LLM 进行 UTC 转换,杜绝因时区计算错误导致的日程偏移。
3. 智能任务规划
提示词优化: 针对中文大模型优化的全中文指令集。
工具引导: 强制 LLM 在查询“是否有空”时优先使用
get_user_schedules而非低效的列表扫描。动态适配: 根据您启用的模块(日历/任务/邮件),自动调整 LLM 的系统指令。
🚀 快速开始
1. Azure 应用注册 (必选)
访问 Azure Portal 并创建一个新应用。
应用类型选择:Mobile and desktop applications。
添加重定向 URI:
https://login.microsoftonline.com/common/oauth2/nativeclient。在 API 权限 中添加以下 Delegated 权限:
User.ReadCalendars.ReadWriteTasks.ReadWriteMail.ReadWriteMail.Send
2. 本地安装与认证 (必须先执行一次)
无论使用哪种运行方式,您都必须先在本地完成首次认证以生成 Token 文件。
# 克隆仓库
git clone https://github.com/xyz50270/Microsoft-Calendar-MCP.git
cd Microsoft-Calendar-MCP
# 安装依赖
uv pip install -e .
# 执行交互式认证 (根据提示在浏览器登录)
uv run m365-auth3. 配置 MCP 客户端 (以 Claude Desktop 为例)
方案 A: 通过 GitHub 地址直接运行 (推荐)
这种方式由 uv 自动管理环境,无需手动进入目录。
{
"mcpServers": {
"m365": {
"command": "uv",
"args": [
"run",
"--with", "git+https://github.com/xyz50270/Microsoft-Calendar-MCP.git",
"m365-mcp"
],
"env": {
"MS_GRAPH_CLIENT_ID": "您的 Azure 客户端 ID",
"MS_GRAPH_TOKEN_PATH": "C:/Users/您的用户名/graph_token.json",
"MS_GRAPH_REDIRECT_URI": "https://login.microsoftonline.com/common/oauth2/nativeclient",
"ENABLE_CALENDAR": "true",
"ENABLE_TASKS": "true",
"ENABLE_EMAIL": "true"
}
}
}
}方案 B: 本地源码运行
指向您克隆到本地的代码目录。这是开发调试最常用的方式。
{
"mcpServers": {
"m365": {
"command": "uv",
"args": [
"--directory", "F:/develop/Microsoft-Calendar-MCP",
"run",
"m365-mcp"
],
"env": {
"MS_GRAPH_CLIENT_ID": "您的 Azure 客户端 ID",
"MS_GRAPH_TOKEN_PATH": "F:/develop/Microsoft-Calendar-MCP/graph_token.json",
"MS_GRAPH_REDIRECT_URI": "https://login.microsoftonline.com/common/oauth2/nativeclient"
}
}
}
}⚙️ 环境变量配置
变量名 | 说明 | 默认值 |
| Azure 应用客户端 ID | 必填 |
| Token 缓存文件的绝对路径 |
|
| 注册时填写的重定向 URI |
|
| 是否启用日历模块 |
|
| 是否启用待办模块 |
|
| 是否启用邮件模块 |
|
🛠️ 工具箱 (Tools)
📅 日历
list_calendar_events: 列出日程。create_calendar_event: 创建日程(支持设置reminder_minutes)。update_calendar_event: 修改日程。delete_calendar_event: 删除日程。get_user_schedules: [推荐] 查询自己是否有空。
✅ 待办 (To Do)
list_tasks: 查看待办列表。create_task: 新建任务(支持due_date,importance,reminder_date)。update_task: 更新任务状态或内容。complete_task: 快速完成任务。delete_task: 删除任务。
📧 邮件
list_emails: 查看最近邮件。send_email: 发送邮件。delete_email: 删除邮件。
⚙️ 系统
get_current_time: 获取当前精确的本地时间(LLM 处理相对时间的前提)。
💡 使用建议
为了获得最佳体验,建议在与 LLM 对话开始时输入:
“请先获取 m365-assistant 提示词,并检查我当前的时间。”
这会让 LLM 明确:
哪些工具当前可用。
必须遵守 ISO 8601 格式和 UTC+8 时区。
在处理日程冲突时优先调用忙闲查询工具。
🔒 安全说明
secrets.dat: 该文件包含加密的开发环境配置,仅供内部开发使用。
Token 安全:
graph_token.json包含您的访问凭据,请确保其路径安全且不被上传至公开仓库。
📄 开源协议
MIT
Available Tools
14 toolscomplete_taskC
将任务标记为已完成。
参数: task_id (str): 待完成任务的唯一 ID。
| Name | Required | Description | Default |
|---|---|---|---|
| task_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
无注解,描述完全依赖自身。它陈述了变更操作,但未披露任何行为细节,如权限要求、是否可逆、对关联数据的影响,或是否触发通知。
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
简洁明了,先陈述目的,再列出参数。无冗余。
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
对于变更操作,在无注解、无输出架构且架构描述覆盖率为 0% 的情况下,描述未能提供足够的行为上下文,以便智能体安全地调用。
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
架构描述覆盖率为 0%,因而基线为 3。描述仅列出了 task_id 及其类型和用途,这些信息架构本身也已体现(名称和必填性),故描述未增加实质意义。
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
清晰说明了动词+资源('将任务标记为已完成'——将任务标记为完成),对应相邻工具中的同级操作(update_task、create_task),尽管它未明确说明与 update_task 的区别。
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
未提供何时使用此工具而非 update_task 的指导,尤其考虑到标记任务完成可能与将状态设为'已完成'的更新操作重叠。
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_calendar_eventA
在主日历中创建新日程 (UTC+8)。
参数: subject (str): 日程标题。 start (str): 开始时间。ISO 8601 格式 (如 '2025-12-25T09:00:00')。必须是本地时间。 end (str): 结束时间。ISO 8601 格式 (如 '2025-12-25T10:00:00')。必须是本地时间。 body (str, 可选): 日程内容描述。 body_type (str, 可选): 内容类型,可选 'Text' 或 'HTML'。默认为 'HTML'。 location (str, 可选): 地点名称。 is_all_day (bool, optional): 是否为全天事件。默认为 False。 importance (str, optional): 重要程度:'low' (低), 'normal' (普通), 'high' (高)。默认为 'normal'。 categories (List[str], optional): 关联的分类名称列表。 is_reminder_on (bool, optional): 是否设置提醒。默认为 True。 reminder_minutes (int, optional): 开始前多少分钟发出提醒。默认为 15。
| Name | Required | Description | Default |
|---|---|---|---|
| end | Yes | ||
| body | No | ||
| start | Yes | ||
| subject | Yes | ||
| location | No | ||
| body_type | No | HTML | |
| categories | No | ||
| importance | No | normal | |
| is_all_day | No | ||
| is_reminder_on | No | ||
| reminder_minutes | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden, and it does disclose useful behavior: 11 parameters, their defaults, and the hard constraint that start/end must be local time in ISO 8601 with UTC+8. It still omits permission/auth needs, what happens with duplicate or conflicting events, and what the call returns or mutates externally.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The one-line purpose is front-loaded, then a clean parameter list with no filler. Minor redundancy in repeating types/defaults that partly appear in the schema, and inconsistent labeling ('str' vs 'optional', mixed Chinese/English), but it stays tight for an 11-parameter tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a creation tool with no output schema and no annotations, the description gives the agent enough to construct a valid call, including defaults and the timezone/format rule. It stops short of covering failure modes, permission prerequisites, and post-creation behavior, which an agent would plausibly want.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and there are 11 parameters, so the description is the only source of parameter meaning — and it documents every one with type, optionality, accepted values ('Text'/'HTML', 'low'/'normal'/'high'), and default. It adds format examples and the local-time requirement that the schema does not.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening line gives a specific verb and resource (创建新日程) and pins the scope to the main calendar with an explicit UTC+8 timezone, which is a real constraint an agent needs. It distinguishes itself from update/list/delete_calendar_event by verb alone; there is no explicit sibling contrast, so it falls short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description never says when to create a new event versus updating an existing one (update_calendar_event) or how to discover existing events first (list_calendar_events). No prerequisites, permission requirements, or duplicate-handling guidance are given, leaving usage entirely to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_taskA
在 Microsoft To Do 中创建新任务 (UTC+8)。
参数: title (str): 任务标题。 body (str, 可选): 任务内容描述。 body_type (str, 可选): 'text' (纯文本) 或 'html'。默认为 'text'。 categories (List[str], 可选): 任务关联的分类。 due_date (str, 可选): 截止日期。ISO 8601 格式 (如 '2025-12-31T23:59:59')。必须是东八区本地时间 (UTC+8)。 start_date (str, 可选): 开始日期。ISO 8601 格式。必须是东八区本地时间 (UTC+8)。 reminder_date (str, 可选): 提醒日期/时间。ISO 8601 格式。必须是东八区本地时间 (UTC+8)。 importance (str, 可选): 重要程度:'low' (低), 'normal' (普通), 'high' (高)。 status (str, 可选): 任务状态:'notStarted', 'inProgress', 'completed', 'waitingOnOthers', 'deferred'。 completed_date (str, 可选): 任务完成日期。ISO 8601 格式。必须是东八区本地时间 (UTC+8)。
| Name | Required | Description | Default |
|---|---|---|---|
| body | No | ||
| title | Yes | ||
| status | No | ||
| due_date | No | ||
| body_type | No | text | |
| categories | No | ||
| importance | No | ||
| start_date | No | ||
| reminder_date | No | ||
| completed_date | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It does add one genuinely useful behavioral constraint — all dates must be UTC+8 local time — which is non-obvious and repeated for every date parameter. However, it says nothing about required permissions/auth, whether the task is returned, error behavior, or duplicate handling.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The single front-loaded purpose sentence is followed by a tight, consistently formatted parameter list with no filler prose. The bulk is parameter documentation that duplicates the schema's property names, which is necessary given 0% schema description coverage but keeps the block long.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 10-parameter write tool with no annotations and no output schema, the description covers parameters and the timezone rule well. It is still silent on auth requirements, the returned object, and edge behavior (e.g., setting completed_date or status at creation time).
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and there are 10 parameters, yet the description documents each one with type, optionality, and format. It also supplies enum values absent from the schema ('text'/'html', 'low'/'normal'/'high', and the five status values) plus the ISO 8601 timezone convention, which is exactly the compensation required here.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening sentence states a specific verb and resource in a specific product: '在 Microsoft To Do 中创建新任务'. The create_/update_/list_/delete_/complete_ naming convention across siblings makes the action unambiguous, though the description never explicitly contrasts itself with those siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the 'create' verb and the To Do context, but there is no explicit when-to-use guidance, no mention of prerequisites, and no pointer to alternatives such as update_task (for existing tasks) or create_calendar_event (for calendar items, which is a realistic confusion in this sibling set).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_calendar_eventC
删除日历事件。
参数: event_id (str): 待删除事件的唯一 ID。
| Name | Required | Description | Default |
|---|---|---|---|
| event_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It conveys only that the operation is destructive via the verb 删除, but says nothing about permanence, whether attendees are notified, recurrence handling, required permissions, or error behavior for an invalid ID.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short lines, front-loaded with the action followed by the parameter. Nothing is padded, though the '参数:' block is largely a restatement of a one-field schema and earns limited extra value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter destructive tool with no annotations and no output schema, the description covers the action and the parameter but omits the behavioral context (permissions, irreversibility, effect on recurring events) an agent needs before invoking a delete. Adequate but with clear gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate for the single parameter. It does gloss event_id as the unique ID of the event to delete, adding meaning beyond the schema's bare 'type: string', but it gives no format, source, or validation detail for that ID.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource (删除日历事件 / delete calendar event), which cleanly distinguishes it from the sibling delete_task and delete_email tools. Clear purpose, though it does not proactively name any alternative. It relies on the resource noun alone for differentiation, which is adequate here.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this versus update_calendar_event, list_calendar_events, or other delete tools, nor any prerequisites (permissions, required ownership). Usage must be inferred entirely from the name and the single parameter.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_emailC
删除电子邮件。
参数: message_id (str): 待删除邮件的唯一 ID。
| Name | Required | Description | Default |
|---|---|---|---|
| message_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. '删除' implies mutation, but the description never states whether deletion is permanent or reversible, whether permissions are required, or what happens if the ID does not exist — significant gaps for a destructive tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The text is short, front-loaded with the operation, and followed by the parameter list with zero filler. It is efficient, though the brevity reflects under-specification as much as tight writing.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive, single-parameter tool with no annotations and no output schema, the description should disclose irreversibility, error behavior, and any permission requirements. None of that is present, leaving the agent unable to predict the consequences of calling it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it does describe the single parameter as '待删除邮件的唯一 ID'. However, it adds no format, source, or example detail beyond that minimal gloss, so the compensation is only partial.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ('删除电子邮件') that unambiguously identifies the operation. It does not, however, distinguish itself from sibling tools like list_emails or send_email, nor clarify scope such as permanent deletion versus moving to trash.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance, no mention of prerequisites (e.g., needing a message_id obtained from list_emails), and no warning about the destructive nature of the call. The agent receives only the bare operation name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_taskC
删除任务。
参数: task_id (str): 待删除任务的唯一 ID。
| Name | Required | Description | Default |
|---|---|---|---|
| task_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. For a destructive operation it says nothing about irreversibility, whether confirmation is needed, what the deletion affects (subtasks, reminders), or what is returned. It is essentially a restatement of the name plus the parameter.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Very short and front-loaded: purpose first, then the parameter. It is not bloated, though the parameter block merely echoes the schema and could be trimmed.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
A destructive single-parameter tool with no annotations and no output schema needs more than one sentence: irreversibility, error behavior for an unknown ID, and side effects are all absent, leaving the agent underinformed before invoking a delete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate; it does so minimally by glossing task_id as the unique ID of the task to delete. That adds a little meaning (uniqueness, target identity) but omits format, source of the ID, or how to obtain one.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('删除任务' / delete task) with an unambiguous scope, so an agent knows exactly what it does. However, it does not distinguish itself from siblings like update_task or complete_task, which are also task-state mutations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance, no prerequisite conditions, and no mention of alternatives such as complete_task (which may be preferable if the intent is to finish rather than remove a task). Only implied usage from the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_current_timeA
获取当前本地时间 (UTC+8)。处理相对时间请求时,请【必须】先调用此工具以获取参考时间。
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden; it discloses the timezone of the result (UTC+8), which is the key behavioral fact an agent needs to interpret the value. For a trivial local-clock read there are no auth, rate-limit, or destructive concerns to disclose, so the remaining gap is minor.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, zero waste; the resource and its scope come first and the mandatory-usage rule is front-loaded right after.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a no-param, no-output-schema utility, the description covers what it does, where the time comes from (local, UTC+8), and the workflow role it plays. It could say a bit more about the returned format, but nothing essential for correct invocation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Zero parameters, so per the rubric the baseline is 4. The schema is empty and 100% covered, and the description adds the timezone context that the empty schema cannot convey.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('获取') and resource ('当前本地时间') plus a concrete scope qualifier (UTC+8), which disambiguates it from the calendar/task/email siblings that also deal with time. An agent can tell exactly what this returns without opening anything else.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly tells the agent when to call it: before handling relative-time requests, as a reference-time anchor, with a strong '【必须】' marker. It stops short of naming alternatives or when-not-to-call conditions, but the trigger condition is unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_user_schedulesA
[首选] 检查当前用户在特定时间段内是否有空 (UTC+8)。 当用户询问“我是否有空?”、“是否有冲突?”或“检查我的忙闲”时,请务必【优先】使用此工具而非 list_calendar_events。 它能更高效、更直观地提供时间段的占用情况。
参数: start (str): 查询范围的开始时间。ISO 8601 格式 (如 '2025-12-23T00:00:00')。必须是本地时间。 end (str): 查询范围的结束时间。ISO 8601 格式 (如 '2025-12-23T23:59:59')。必须是本地时间。 availability_view_interval (int, 可选): 响应中每个时间槽的持续分钟数。默认为 30。
| Name | Required | Description | Default |
|---|---|---|---|
| end | Yes | ||
| start | Yes | ||
| availability_view_interval | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full disclosure burden. It does add real behavioral context: the tool operates in UTC+8 and inputs must be local time. However, it never states permissions/read-only nature explicitly, whether results are cached or real-time, or anything about the shape or pagination of the returned occupancy data.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the '[primary choice]' marker, follows with purpose, then the routing rule, then a compact parameter block. The 'more efficient and intuitive' clause is mild filler but the overall structure is tight and scannable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 3-parameter read tool with no annotations and no output schema, the description covers purpose, routing, timezone, formats, and defaults adequately. The main gap is that the structure of the returned occupancy (per time slot) is only obliquely implied by availability_view_interval rather than described.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate and largely does: it documents all three parameters with ISO 8601 format, the 'must be local time' constraint, and the default of 30 minutes for availability_view_interval. Only the interaction between interval and the returned slots is left implicit.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource (check whether the current user is free in a given time range) and explicitly positions itself against the sibling list_calendar_events. An agent can distinguish it from the raw event-listing tool without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit trigger phrasing ('am I free?', 'is there a conflict?', 'check my busy/free') and a hard routing rule: prefer this over list_calendar_events. It even names the reason (more efficient, more intuitive occupancy view). This is as prescriptive as usage guidance gets.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_calendar_eventsA
列出用户主日历中的事件。
[注意] 调用前请务必先执行 get_current_time 获取当前时间。
[时区] 所有日期字符串必须使用本地时间 (UTC+8)。
参数: start_date (str, 可选): 查询范围的开始时间。ISO 8601 格式 (如 '2025-12-23T00:00:00')。必须是本地时间。 end_date (str, 可选): 查询范围的结束时间。ISO 8601 格式 (如 '2025-12-23T23:59:59')。必须是本地时间。
| Name | Required | Description | Default |
|---|---|---|---|
| end_date | No | ||
| start_date | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
没有提供注解,因此描述需要承载告知义务。描述了时区要求和前置条件,这是有用的行为背景。但没有说明权限需求、返回格式或分页行为——对于一个未注解的读取工具,这是一个缺口。
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
前置条件放在前面,并使用了 '[注意]' 标注,这很好。但 '参数:' 部分重复了模式信息,虽然值增加了格式说明。'[时区]' 行也是冗余的,因为参数描述已经说了必须是本地时间。稍微有些啰嗦。
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
对于一个没有注解、没有输出模式且模式覆盖率为 0% 的简单读取工具,描述涵盖了前置条件和参数格式。但没有说明返回值(例如,没有日期范围时会怎样,有哪些事件字段)。对于一个未注解的工具来说,基本够用,但缺少一些经过判断后应补充的细节。
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
模式描述覆盖率为 0%,描述必须进行补偿。它确实为两个参数提供了 ISO 8601 格式示例、时间范围和时区限制。这很有帮助,但没有解释 start_date/end_date 的默认值行为——没有它们时是查询所有事件还是无内容。
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
明确说明了动词和资源——'列出用户主日历中的事件'——并限定了作用域为主日历。没有明确指出与 list_tasks 或 get_user_schedules 等同类工具的区别,但资源名称不同。
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
提供了明确的前置条件:调用前必须先执行 get_current_time 获取当前时间。没有给出何时使用此工具而非 get_user_schedules 等替代项的指导。
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_emailsB
列出收件箱中的最近邮件 (UTC+8)。
参数: limit (int, 可选): 返回邮件的最大数量。默认为 10。
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full behavioral burden. It discloses the timezone (UTC+8) and default limit, but omits whether the operation is read-only, what authentication is required, how pagination works, or what format the returned emails take.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the purpose, then cleanly separates the parameter explanation. It is short, avoids redundancy, and every sentence contributes needed information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter list tool with no output schema or annotations, the description is minimally adequate. However, it lacks return-value context and any mention of pagination or authorization, leaving gaps an agent may need before invoking it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate for the single parameter. It explains that 'limit' is an optional integer controlling the maximum number of returned emails, with a default of 10, adding meaningful semantics beyond the bare schema type and default.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('列出收件箱中的最近邮件') with a timezone qualifier, clearly separating it from send_email and delete_email. It does not explicitly name or contrast with sibling tools, but the resource scope is distinct enough to prevent confusion.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool versus alternatives. The description implies retrieval of recent emails, but gives no conditions, exclusions, or sibling comparisons such as using send_email when you need to compose instead.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_tasksB
列出用户默认待办事项列表中的任务。
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden, yet it discloses nothing about pagination, result ordering, whether completed tasks are included, or auth requirements. Listing is implicitly a read, but that is an inference rather than a stated trait.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler; the verb and scope come first. It is appropriately sized for a zero-parameter tool, though it is terse to the point of being sparse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and no annotations, the description is the only source of return-value and safety information, and it supplies neither. For a simple list tool the burden is light, but an agent still cannot tell what comes back or whether filtering applies.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has zero parameters, so there is nothing for the description to clarify. Baseline 4 applies; no parameter-level gaps exist to compensate for.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (列出) and resource (任务) with an explicit scope: the user's default to-do list. It distinguishes itself from list_emails and list_calendar_events by resource, but never names a sibling or clarifies why this differs from any other task-listing path.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase '默认待办事项列表' hints that non-default lists are out of scope, but the description gives no explicit when-to-use guidance and does not mention alternatives such as list_calendar_events or get_user_schedules. The agent must infer the calling context entirely.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
send_emailC
发送电子邮件。
参数: to (str): 收件人邮箱地址。 subject (str): 邮件主题。 body (str): 邮件正文内容。
| Name | Required | Description | Default |
|---|---|---|---|
| to | Yes | ||
| body | Yes | ||
| subject | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
无注解,因此描述需完全承担行为披露的责任。它没有说明权限、发送后可达性、速率限制或撤销可能性。对于包含 3 个参数的修改工具,是一个很大的缺口。
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
结构清晰但有些啰嗦,重复“邮件”概念。参数列表比需要更冗长,虽然引言简短。
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
对于包含 3 个必需参数的修改工具,没有注解、没有输出模式、0% 模式覆盖率,描述严重不足。它未能涵盖基本行为或使用上下文。
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
模式描述覆盖率为 0%,因此参数必须在描述中补偿。描述为每个参数提供了简短标签(to, subject, body),这略有帮助,但缺乏格式、约束或验证细节。
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
明确指出了动词+资源(发送电子邮件),与 list_emails 和 delete_email 等兄弟工具区分开来。然而,它没有描述作用域或任何与兄弟工具的区别,只是陈述了功能。
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
没有指导说明何时使用此工具而非替代方案。没有提及先决条件、上下文或与 list_emails/delete_email 相关的条件。
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_calendar_eventA
更新现有的日历事件 (UTC+8)。仅更新提供的字段。
参数: event_id (str): 待更新事件的唯一 ID。 subject (str, 可选): 新标题。 start (str, 可选): 新开始时间 (ISO 8601)。必须是本地时间。 end (str, 可选): 新结束时间 (ISO 8601)。必须是本地时间。 body (str, 可选): 新内容描述。 body_type (str, 可选): 'Text' 或 'HTML'。 location (str, 可选): 新地点。 is_all_day (bool, 可选): 是否更新为全天事件。 importance (str, 可选): 重要程度:'low', 'normal', 'high'。 categories (List[str], 可选): 新的分类列表。 is_reminder_on (bool, 可选): 是否开启提醒。 reminder_minutes (int, 可选): 提醒提前分钟数。
| Name | Required | Description | Default |
|---|---|---|---|
| end | No | ||
| body | No | ||
| start | No | ||
| subject | No | ||
| event_id | Yes | ||
| location | No | ||
| body_type | No | HTML | |
| categories | No | ||
| importance | No | ||
| is_all_day | No | ||
| is_reminder_on | No | ||
| reminder_minutes | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It usefully discloses that times are UTC+8, that start/end must be local time, and that unspecified fields are left untouched — real behavioral context. It omits permissions, side effects on existing reminders/attendees, and error behavior for a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded one-line purpose followed by a scannable parameter list; every line carries information. Slightly list-heavy but no filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 12-parameter mutation with no annotations and no output schema, the description supplies the missing parameter documentation and the partial-update/timezone semantics an agent needs to call it correctly. It stops short of covering failure modes or auth requirements.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it largely does: all 12 parameters are enumerated with types, optional/required status, and value hints ('Text'/'HTML', 'low'/'normal'/'high'). Remaining gaps are ranges (reminder_minutes) and interactions (is_reminder_on vs reminder_minutes).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb (更新/update) and resource (日历事件/calendar event) plus a scoping constraint (UTC+8), which cleanly separates it from create_/delete_/list_calendar_event. It does not explicitly name a sibling or contrast behavior, so it falls short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage context is implied: it updates an *existing* event and only touches provided fields, which tells the agent partial-update semantics. However it never says when to prefer this over create_calendar_event, nor any prerequisites beyond requiring event_id.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_taskB
更新 Microsoft To Do 中现有的任务 (UTC+8)。
参数: task_id (str): 待更新任务的唯一 ID。 title (str, 可选): 新标题。 body (str, 可选): 新内容描述。 body_type (str, 可选): 'text' 或 'html'。 categories (List[str], 可选): 新分类列表。 due_date (str, 可选): 新截止日期 (ISO 8601)。必须是东八区本地时间 (UTC+8)。 start_date (str, 可选): 新开始日期 (ISO 8601)。必须是东八区本地时间 (UTC+8)。 reminder_date (str, 可选): 新提醒日期 (ISO 8601)。必须是东八区本地时间 (UTC+8)。 importance (str, 可选): 'low', 'normal', 'high'。 status (str, 可选): 'notStarted', 'inProgress', 'completed' 等。 completed_date (str, 可选): 新完成日期 (ISO 8601)。必须是东八区本地时间 (UTC+8)。
| Name | Required | Description | Default |
|---|---|---|---|
| body | No | ||
| title | No | ||
| status | No | ||
| task_id | Yes | ||
| due_date | No | ||
| body_type | No | text | |
| categories | No | ||
| importance | No | ||
| start_date | No | ||
| reminder_date | No | ||
| completed_date | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
没有提供注释,因此描述承载了全部行为披露负担。它说任务是“现有的”,但未说明权限要求、操作是否可逆、未提供的字段会发生什么,或单个字段更新是否会产生任何副作用。
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
简洁、结构良好,并以前置过滤条件开头。参数列表是组织有序的,但 'UTC+8' 的提及在日期参数中重复了四次,可以巩固。
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
对于一个修改现有资源的工具来说,该描述基本完整,但缺乏行为上下文。它缺少模式以外的信息,例如如果任务不存在会发生什么、验证规则(例如,'status' 是否必须匹配枚举值?)以及权限要求。
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
尽管输入模式覆盖率 0%,但描述在参数列表中提供了每个参数的文档。这增加了模式中没有的意义(例如,'text' 或 'html' 的枚举值、ISO 8601 的日期格式、UTC+8 的要求)。然而,11 个参数中有一半的语义可以更详细(例如,'status' 的有效值、'importance' 的含义)。
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
明确说明了动词 (更新)、资源 (Microsoft To Do 中现有的任务) 以及应用的时区约束 (UTC+8)。与 create_task、delete_task 和 complete_task 等兄弟工具区分开来,因为它是通用的修改操作。
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
没有说明何时使用此工具与 complete_task(用于标记完成)或 create_task 相对。也没有解释可选参数会如何修改现有值的语义(例如,未提供的字段是否会保持原样?)。
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
14 tool updates
v0.1.0- First observed
complete_task - First observed
create_calendar_event - First observed
create_task - First observed
delete_calendar_event - First observed
delete_email - First observed
delete_task - First observed
get_current_time - First observed
get_user_schedules - First observed
list_calendar_events - First observed
list_emails - First observed
list_tasks - First observed
send_email - First observed
update_calendar_event - First observed
update_task
TDQS
Scored across 14 tools
Calendar and task CRUD tools are clearly separated by resource and action. However, complete_task overlaps with update_task (which can set status to completed), and list_calendar_events overlaps with get_user_schedules for schedule queries, creating minor ambiguity.
All tool names use consistent snake_case verb_noun patterns (list_*, create_*, update_*, delete_*, get_*). Minor pluralization differences (list_calendar_events vs update_calendar_event) follow common conventions.
14 tools cover calendar, tasks, email, and time, which is well within the ideal 3-15 range. No tool appears redundant or trivial.
Calendar and task surfaces provide create/list/update/delete, but lack get-by-id. Email coverage is notably thin: only list, send, and delete; missing read/get by ID, reply, forward, mark read, and update operations, which are core to an email domain.
Maintenance
Related MCP Connectors
Manage Microsoft 365 email, calendar, contacts and inbox rules via the Graph API with OAuth 2.0.
Permissioned access to Outlook, OneDrive and Teams via the user's own Microsoft account
Calendar API for AI agents: events, availability, Google/Microsoft setup, scheduling, and iCal.
Let ChatGPT, Claude & Cursor use your Mac: email, calendar, iMessage, Teams, files. Local, free.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceEnables AI agents to interact with Microsoft Outlook via the Microsoft Graph API for managing emails and calendar events. It allows users to read and send emails, list messages, and create calendar appointments with automatic Teams links.1-
- AlicenseNot gradedqualityFmaintenanceEnables AI assistants to interact with Microsoft 365 services (users, mail, calendar, files) via Microsoft Graph API.23 npm1MIT
- FlicenseNot gradedqualityDmaintenanceConnects AI assistants to Microsoft 365 via the Graph API, enabling email search, attachment extraction, and OneDrive file reading through natural conversation.-
- -licenseNot gradedqualityNot gradedmaintenanceProvides access to Microsoft Teams, Outlook, Calendar, and SharePoint via the Microsoft Graph API, enabling natural language interactions to read and manage messages, emails, events, and files.1-