outlook-local-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., "@outlook-local-mcpsearch my inbox for meeting notes"
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.
outlook-classic-windows-mcp
MVP MCP server for working with a locally configured classic Outlook for Windows desktop profile.
This does not use Microsoft Graph, Outlook on the web, new Outlook for Windows, or admin-enabled cloud APIs. It uses Windows COM automation against the classic Outlook desktop app/profile available on the machine running the MCP server. This is useful if you don't want to deal with your IT support or ask for your admin's blessing.
Note: this MCP is idiosyncratic to my own workflow and requirements. It is advised to fork and modify it—or ask your coding agent to do it for you—to mold the MCP to your own Outlook setup and use case.
Warning: Classic Outlook for Windows for Microsoft 365 users is supported until at least 2029. New Outlook gradually becomes the default or replacement. This MCP will only be viable in the near/medium term. In the long term, use a different MCP that uses admin-backed APIs! See https://learn.microsoft.com/en-us/answers/questions/5554339/when-will-classic-outlook-end
Requirements
Windows
Classic Microsoft Outlook desktop installed and configured
uv
Related MCP server: outlook-mcp
Install / run
cd C:\Users\muhammad.menjeni\git\outlook-classic-windows-mcp
uv sync
uv run outlook-local-mcpThe MCP server speaks stdio, so it is intended to be launched by an MCP client.
Pi MCP config example
Add a local server entry similar to this in your Pi MCP configuration, adjusting the path if needed:
{
"mcpServers": {
"outlook-local": {
"command": "uv",
"args": [
"--directory",
"C:\\Users\\muhammad.menjeni\\git\\outlook-classic-windows-mcp",
"run",
"outlook-local-mcp"
]
}
}
}Tools
search_email
Searches Outlook mail by subject and/or body.
Arguments:
querystring: case-insensitive substring to find.folderstring: folder to search. Default:Inbox. You can use paths likeInbox/ArchiveorMailbox Name/Inbox.search_scope:all,subject, orbody. Default:all.max_results: number of matches to return. Default:10.max_items: newest items to inspect in the folder. Default:500.include_body_preview: include a short body preview. Default:true.
list_mail_folders
Lists available Outlook folders to help choose a folder path.
create_leave_calendar_blocks
Creates two unsent Outlook calendar items for leave review:
A personal blocker marked Out of Office with no attendees.
A notification meeting marked Free with the supplied attendees.
Nothing is sent. By default both items are saved and opened in Outlook for manual review/sending.
Arguments:
start_timestring: start date/time, e.g.2026-09-01 08:00.end_timestring: end date/time. For all-day events this is interpreted as an exclusive end, e.g. one day from2026-09-04 00:00to2026-09-05 00:00.required_attendeeslist/string: additional notification recipients. Configurable defaults can also be used.subjectstring: default comes from config, initiallyAmirul: On-Leave.bodystring: message body.optional_attendeeslist/string: optional notification recipients.locationstring.displayboolean: open the saved items in Outlook. Default:true.confirmedboolean: must betrueto actually create Outlook calendar items. Without confirmation, the tool only returns a proposal.
get_leave_defaults
Shows the current leave defaults and config path.
set_leave_defaults
Persists leave defaults such as subject and notification attendees. Requires confirmed=true before writing config.
infer_leave_recipients
Read-only scan of recent local Outlook email to infer candidate distribution lists for leave notifications. Returns candidates and evidence; it does not write config or create drafts.
resolve_recipients
Resolves names, emails, or distribution lists using Outlook recipient resolution/address book.
search_contacts
Searches local Outlook contact folders by name, email, company, department, or job title.
Notes / limitations
First access may start Outlook if it is not already running.
Your organization may show Outlook Object Model Guard prompts or block automation by policy.
This MVP searches by scanning recent folder items, which is simple and reliable but not as fast as indexed Outlook search for very large folders.
Available Tools
8 toolscreate_leave_calendar_blocksA
Create two unsent Outlook calendar items for leave review.
Creates:
A personal calendar blocker marked Out of Office with no attendees.
A meeting notification marked Free with the supplied attendees.
Nothing is sent. Items are saved locally, and by default opened in Outlook for manual review and sending.
| Name | Required | Description | Default |
|---|---|---|---|
| body | No | FYI, I will be on leave during this period. | |
| all_day | No | ||
| display | No | ||
| subject | No | ||
| end_time | Yes | ||
| location | No | ||
| confirmed | No | ||
| start_time | Yes | ||
| optional_attendees | No | ||
| required_attendees | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It clearly states that items are unsent, saved locally, and by default opened in Outlook for manual review. It also explains the two calendar items differ in visibility (Out of Office vs Free) and attendee handling. This covers key behavioral aspects, though it could mention permission requirements or reversibility.
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 concise and well-structured. It front-loads the main purpose, uses a clear bullet-point list for the two outputs, and includes critical caveats (unsent, saved locally) in a compact format. Every sentence adds value without unnecessary verbosity.
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?
Given the tool has 10 parameters with no schema descriptions, the description should provide enough context to invoke it correctly. It fails to explain how parameters map to the two calendar items, especially attendee handling and optional settings like all_day and confirmed. While the overall purpose is clear, a complex tool like this demands more parameter-level detail.
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. However, it only refers generically to 'supplied attendees' without identifying which parameters (required_attendees or optional_attendees) map to which item. Other parameters like all_day, display, subject, location, and confirmed are not mentioned, leaving the agent unclear on how to set them correctly.
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 clearly states the resource (Outlook calendar items) and the action (create), and explicitly lists two distinct outputs: a personal Out-of-Office blocker and a meeting notification. This is specific and distinguishes the tool from siblings like search_contacts or set_leave_defaults, which serve different purposes.
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 implies it is for leave review and emphasizes that nothing is sent and items are opened for manual review, which hints at when to use it. However, it does not explicitly state when not to use it or mention any alternative tools. While the context is helpful, it lacks explicit exclusions or comparisons to siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_leave_defaultsA
Return configurable defaults used by create_leave_calendar_blocks.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output 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. The verb 'Return' implies a read-only operation, but the description does not disclose potential side effects, authentication requirements, or what happens if defaults are unset. Since there is no annotation coverage, a bit more context would be expected, but the simplicity of a zero-parameter getter tempers the impact.
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 a single, front-loaded sentence that states the primary function and its relationship to another tool. Every phrase earns its place, with 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?
Given the tool has no parameters, an output schema exists (so return values are structured), and the description clarifies its use in the workflow, nothing essential is missing. The agent can correctly invoke it based on the provided information.
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 tool has zero parameters, so the description need not explain parameter meaning. Per the rubric, 0 params earns a baseline of 4, and the description does not need to compensate for any schema gaps. It adds no unnecessary parameter information.
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 ('Return') and resource ('configurable defaults'), and directly ties it to a sibling's purpose ('used by create_leave_calendar_blocks'). This clearly distinguishes it from set_leave_defaults (which modifies these defaults), so an agent can select it without ambiguity.
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 clearly places the tool in the workflow by referencing create_leave_calendar_blocks, implying this is the getter to call before creating blocks. It does not explicitly mention the alternative set_leave_defaults, but the contrast is implicit and adequate for straightforward use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
infer_leave_recipientsB
Infer candidate leave-notification recipients/DLs from recent local Outlook email.
This is read-only. It scans recent mail subjects/bodies/recipients for distribution lists and department/team signals, then returns candidates for user confirmation.
| Name | Required | Description | Default |
|---|---|---|---|
| folders | No | ||
| max_results | No | ||
| max_items_per_folder | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description explicitly states 'This is read-only,' which is a key behavioral disclosure. It also explains the process: scanning mail for distribution lists and department/team signals, then returning candidates for user confirmation. With no annotations provided, this is a meaningful disclosure, though it does not mention potential performance implications or fallback behavior when no candidates are found.
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 concise, with two short sentences that clearly state purpose and behavior. It front-loads the core purpose and then explains the read-only nature and process. It is not verbose, though it omits parameter information, which is a completeness trade-off rather than a conciseness issue.
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?
The tool has three parameters with no schema descriptions and no annotations, yet the description does not explain their semantics. While an output schema exists (which may describe return values), the input parameters are essential for invocation. The description is not complete for an agent to call the tool correctly without additional inference.
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 provides no descriptions for the three parameters (folders, max_results, max_items_per_folder), and the description does not mention any of them. With schema description coverage at 0%, the description should have compensated but does not, leaving the agent without semantic understanding of how to use the parameters.
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 clear purpose: inferring candidate leave-notification recipients from recent Outlook email. It uses a specific verb ('infer') and resource ('recipients/DLs'), and the phrase 'candidate' and 'leave-notification' distinguish it from sibling tools like resolve_recipients and search_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?
The description provides no guidance on when to use this tool versus alternatives (e.g., resolve_recipients, search_email). It does not mention any exclusions, prerequisites, or context where this tool is preferred, leaving the agent to infer usage from the purpose alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_mail_foldersA
List Outlook store/folder paths to help choose the folder for search_email.
| Name | Required | Description | Default |
|---|---|---|---|
| max_depth | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output 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 states the action clearly (list paths) but adds no details about behavior such as whether folders are recursive, whether empty folders are omitted, or any authentication requirements. The behavior is simple and aligned with the name, so it's not misleading, but it's minimal.
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 a single, front-loaded sentence that captures both the action and the purpose. There is no redundancy or extraneous text; every word contributes 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?
The tool is simple (one optional param) and has an output schema (which handles return format), and the description covers usage context. However, the max_depth parameter is entirely undocumented, and with no annotations the description leaves behavioral details unspecified. The description is adequate but leaves a noticeable gap for parameter semantics.
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 the description does not mention the only parameter, max_depth. The parameter name is somewhat self-explanatory, but the description provides no guidance on what depth levels mean or how values influence results. Since schema coverage is low, the description should compensate but 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 description states a specific verb ('List') and resource ('Outlook store/folder paths'), and explicitly ties its purpose to choosing a folder for search_email. This differentiates it from all siblings, which address leave, contacts, or email search.
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 indicates the tool is a precursor to search_email ('to help choose the `folder`'), giving clear context for when to use it. It doesn't explicitly exclude alternatives, but the sibling list contains no similarly scoped tool, so the usage intent is unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
resolve_recipientsB
Resolve names, emails, or distribution lists using Outlook's address book/GAL.
| Name | Required | Description | Default |
|---|---|---|---|
| recipients | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description must carry the full burden of behavioral disclosure. It states the primary function but does not reveal whether the operation is read-only, what the output format is, potential failure modes, or any side effects. The brief sentence offers no additional insight beyond the basic purpose.
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 a single, focused sentence that front-loads the core purpose. There is no redundant information, making it appropriately concise and well-structured.
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?
Although there is an output schema (not provided), the description gives no information about return values, error handling, or prerequisites. For a tool without annotations, this level of detail is insufficient for an agent to reliably invoke it and interpret results correctly.
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 0% description coverage for the single parameter 'recipients', and the description does not explicitly explain its expected format or content. While 'resolve names, emails, or distribution lists' implies the input can be these types, it does not clarify whether a string or array is acceptable, or how multiple recipients are handled.
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 clearly states the action (resolve), the resource (names, emails, distribution lists), and the context (Outlook's address book/GAL). This distinguishes it from sibling tools like search_contacts, which likely searches for contacts rather than resolving them into canonical addresses.
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 implies a use case—resolving recipient identifiers against the GAL—but does not explicitly state when to prefer this over alternatives such as search_contacts or infer_leave_recipients. No exclusions or conditions are given, leaving the agent to infer the appropriate context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_contactsB
Search local Outlook contact folders by name, email, company, or job title.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | ||
| max_results | No | ||
| max_folders_depth | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It states only the search action and searchable fields, without disclosing whether the operation is read-only, side effects, authentication requirements, or edge cases like no results. This is a significant gap for a tool with zero annotation coverage.
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 a single, efficient sentence with the verb and resource front-loaded. There is zero waste, and every word contributes to the core purpose.
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 tool with three parameters (one required) and no annotations, the description is insufficient. It does not explain the optional parameters, return format expectations, or any usage nuances. Even with an output schema present, the description fails to provide enough context for an agent to use this tool effectively.
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 explains the 'query' parameter by listing the fields it can match, but provides no detail on matching semantics (e.g., substring, exact). It completely omits 'max_results' and 'max_folders_depth', leaving their purpose ambiguous. The description adds partial value but fails to document two of three parameters.
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 clearly states the action (search), the resource (local Outlook contact folders), and the specific fields (name, email, company, or job title). This distinguishes it from sibling tools like search_email, making the purpose unambiguous.
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 implies usage for finding contacts but does not explicitly state when to use it versus alternatives like search_email, nor does it mention any exclusions or prerequisites. The context is clear but lacks explicit routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_emailA
Search locally configured Outlook desktop email by subject and/or body.
This scans the newest max_items messages in folder and returns up to
max_results matches. It uses the local Outlook profile via COM, not
Microsoft Graph or Outlook Web APIs.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | ||
| folder | No | Inbox | |
| max_items | No | ||
| max_results | No | ||
| search_scope | No | all | |
| include_body_preview | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It reveals the scanning order (newest first), the iteration limits (max_items, max_results), and the local-only nature. It implies read-only behavior through the verb 'search' but does not explicitly state side effects or error handling, though these are less critical for a read operation. Overall, it provides substantial behavioral context beyond a bare statement.
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 three sentences, each earning its place: the first defines the function, the second adds essential scanning behavior, and the third clarifies the underlying API. No fluff or repetition, and the key information is front-loaded.
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 search tool with an output schema (so return format is covered), the description adequately covers the core behavior and parameter semantics. It omits minor details like default folder names or error conditions, but these are inferable from the schema. The local-only constraint is a valuable addition that the schema cannot convey, making it largely complete.
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 explains query scope via 'subject and/or body' (mapping to search_scope), and explains max_items and max_results as iteration/result limits. It also mentions folder implicitly. It does not explicit define include_body_preview or the query parameter details, but the core semantics are covered clearly despite the schema's lack of descriptions.
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 clearly states the tool searches locally configured Outlook desktop email by subject and/or body, which is specific and distinguishes it from sibling tools like search_contacts. It also details the scanning behavior (newest max_items messages) and result limit, making the purpose unambiguous.
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 provides clear context that this uses the local Outlook profile via COM, not cloud APIs, implying when it is appropriate (local only). It does not explicitly name alternatives or exclusions, but the resource and scope make it obvious that this is for email search, not contacts or folder management. A minor gap in explicit 'use this vs that' guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_leave_defaultsB
Persist leave-calendar defaults. Requires confirmed=true because this writes config.
| Name | Required | Description | Default |
|---|---|---|---|
| subject | No | Amirul: On-Leave | |
| confirmed | No | ||
| notification_attendees | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must disclose behavioral traits. It does disclose that the tool writes config and that confirmed must be true for the write to happen. This is useful but minimal; it does not mention potential side effects, irreversible changes, permissions required, or return value behavior. With no annotations, this is a moderate disclosure.
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 two concise sentences that pack a clear purpose and a key requirement with no filler. It front-loads the main action, then adds the prerequisite. Every sentence earns its place, making it highly efficient.
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?
Given three parameters (one required) and no schema descriptions, the description is too thin. It does not explain what 'notification_attendees' or 'subject' mean, nor does it describe any scenarios or expected outcomes beyond 'persist defaults'. Even though an output schema exists, the description leaves the agent with insufficient context to know what values to provide and why. It needs to elaborate on parameter semantics and usage context.
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 description coverage is 0%, so the description must compensate. It does provide context for the 'confirmed' parameter by stating it must be true and why, adding meaning beyond the boolean type. However, it gives no explanation for 'subject' or 'notification_attendees', which are otherwise undocumented. This is partial coverage, not enough to fully compensate for the lack of schema descriptions.
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 clearly states 'Persist leave-calendar defaults', which conveys a specific verb and resource. It explicitly notes that it writes config, which distinguishes it from reading operations like get_leave_defaults. However, it does not name any sibling tool or contrast itself beyond that, so it stops short of a full 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 gives a concrete usage requirement: 'Requires confirmed=true', which tells the agent that this parameter must be set. It also explains why (because it writes config), which implies the tool is for writing default settings rather than reading. However, it does not explicitly mention alternatives or when NOT to use this tool, leaving some ambiguity about selection among siblings.
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.
8 tool updates
v0.1.0- First observed
create_leave_calendar_blocks - First observed
get_leave_defaults - First observed
infer_leave_recipients - First observed
list_mail_folders - First observed
resolve_recipients - First observed
search_contacts - First observed
search_email - First observed
set_leave_defaults
TDQS
Scored across 8 tools
Tools are mostly distinct, but three recipient-related tools (resolve_recipients, search_contacts, infer_leave_recipients) could cause some confusion regarding when to use each. However, their descriptions clearly differentiate (address book resolution vs. contact folder search vs. historical email inference), and the other tools are unambiguous.
All tool names follow a strict verb_noun snake_case pattern (e.g., get_leave_defaults, search_email, create_leave_calendar_blocks). The pattern is predictable and consistent across all 8 tools, making it easy for an agent to infer naming conventions for hypothetical tools.
With 8 tools, the server is well-scoped for its domain of Outlook leave management and search. Each tool serves a distinct function in a cohesive workflow, and the count is within the ideal range without being overwhelming or sparse.
The tool surface covers the core leave workflow: configuration, calendar block creation, recipient inference/resolution, and search capabilities. Minor gaps exist—such as no update/delete for leave calendar blocks—but these are unsent drafts intended for manual review, so the current surface seems sufficient for the stated purpose.
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
Manage Gmail end-to-end: search, read, send, draft, label, and organize threads. Automate workflow…
Let ChatGPT, Claude & Cursor use your Mac: email, calendar, iMessage, Teams, files. Local, free.
Related MCP Servers
- AlicenseNot gradedqualityAmaintenanceEnables MCP-aware agents to interact with the classic Outlook desktop client for mail, calendar, contacts, tasks, and Out-of-Office settings via the COM API, without Azure or OAuth.24MIT
- FlicenseAqualityBmaintenanceControls the Microsoft Outlook desktop app via COM automation, enabling email, calendar, and contact management without needing Graph API or Azure registration.14-
- AlicenseNot gradedqualityCmaintenanceEnables AI assistants to read, send, and manage Outlook mail locally on Windows via COM/MAPI, without cloud APIs.86 npm1MIT
- FlicenseNot gradedqualityCmaintenanceReads and searches your local Microsoft Outlook desktop mailbox via COM, supporting folder listing, message/thread retrieval, attachment saving, bulk export, and draft creation without sending, requiring no OAuth or admin consent.-