Outlook MCP Server
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 MCP Serverfind the latest email from Contoso and create a draft reply saying thanks"
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 MCP Server
Microsoft Outlook Web (OWA) MCP-Server auf Basis einer Playwright Browser-Bridge. Steuert den echten Outlook Webclient im Chromium, Chrome oder Edge über CDP – keine komplexen Azure AD App Registrierungen oder Graph-API Admin-Consents erforderlich. Funktioniert direkt mit echten Browser-Sessions und ohne Cloud-Relay.
Ermöglicht LLM-Agenten (Antigravity, opencode, Claude Desktop, Cursor, …) den Lese- und Entwurfszugriff auf Microsoft Outlook: E-Mails suchen, Posteingang und Ordner durchsuchen, E-Mails als Markdown inklusive Teams-Besprechungslinks auslesen sowie neue E-Mail-Entwürfe sicher anlegen.
Hinweis: Dieses Repository ist vollständig organisationsneutral. Es enthält keine firmenspezifischen Accounts oder Zugangsdaten. Der gewünschte Tenant/Realm (z.B.
adesso.de,d-velop.deoder eine beliebige Microsoft 365 Domain) kann frei über Umgebungsvariablen oder direkt im Login-Tool angegeben werden.
Features
11 leistungsfähige MCP-Tools:
outlook_status: Prüft Verbindungs- und Anmeldestatus von Outlook Web.outlook_login: Öffnet ein sichtbares Browserfenster für den einmaligen interaktiven Login (inkl. SSO / MFA).outlook_search: Volltextsuche über das OWA-Suchfeld (nach Kunden, Tickets, Absendern, Stichwörtern).outlook_get_email: Liest eine E-Mail vollständig im Lesebereich aus (konvertiert in Markdown, extrahiert Teams-Links und Metadaten).outlook_list_recent: Schnelle Übersicht über die neuesten E-Mails im Posteingang.outlook_create_draft: Legt E-Mail-Entwürfe im Ordner „Entwürfe“ (Drafts) an (per OWA DeepLink & Ctrl+S).outlook_list_folders: Listet alle Navigationsordner (Posteingang, Gesendet, Archiv, Entwürfe etc.).outlook_navigate_folder: Wechselt gezielt in einen bestimmten Ordner (z.B. Sent Items, Archiv).outlook_bulk_list: Scroll-Enumeration zur Überwindung der OWA-Listen-Virtualisierung (erfasst alle Conversation-IDs).outlook_read_email: Liest gezielt eine E-Mail anhand ihrer Conversation-ID aus.outlook_close: Beendet die Hintergrund-Browserinstanz.
Sicherheits-Konzept (Draft-First): Es gibt kein Blindversenden von Mails. Der Server legt Entwürfe an, sodass der Anwender die Nachricht vor dem Absenden in Outlook sichten und freigeben kann.
Auto-Erkennung von Browsern: Findet automatisch Chromium/Chrome/Edge unter Linux, WSL, macOS und Windows (oder via
OUTLOOK_MCP_CHROME_PATH).Persistentes lokales Profil: Anmeldedaten und MFA-Tokens verbleiben sicher im lokalen Profil (
~/.outlook-browser-profile).
Related MCP server: outlook-mcp
Voraussetzungen
Node.js ≥ 20
Ein installierter Browser: Google Chrome, Microsoft Edge oder Playwright Chromium (
npx playwright install chromium).(Unter WSL/Linux) WSLg oder ein laufender X-Server für das einmalige Login-Fenster.
Installation
git clone https://github.com/pipelinedave/outlook-mcp.git
cd outlook-mcp
npm installKonfiguration (Umgebungsvariablen)
Alle Umgebungsvariablen sind optional:
Variable | Beschreibung | Standard |
| Standard-Tenant/Domain für OWA (z.B. |
|
| Expliziter Pfad zur Browser-Executable | Automatische Erkennung |
| Speicherort für das Browser-Profil |
|
| Headless-Modus ( |
|
Einbindung in MCP-Clients
Antigravity / Claude Desktop / Cursor / opencode
Füge den Server in deine MCP-Konfigurationsdatei (z.B. mcp_config.json oder opencode.json) ein:
{
"mcpServers": {
"outlook": {
"command": "node",
"args": ["/pfad/zu/outlook-mcp/index.js"],
"env": {
"OUTLOOK_MCP_REALM": "adesso.de"
}
}
}
}Oder unter WSL mit Node-Wrapper:
#!/bin/bash
export PATH="$HOME/.nvm/versions/node/v20.20.2/bin:$PATH"
export DISPLAY="${DISPLAY:-:0}"
export WAYLAND_DISPLAY="${WAYLAND_DISPLAY:-wayland-0}"
export XDG_RUNTIME_DIR="${XDG_RUNTIME_DIR:-/mnt/wslg/runtime-dir}"
export PULSE_SERVER="${PULSE_SERVER:-/mnt/wslg/PulseServer}"
exec node /pfad/zu/outlook-mcp/index.js "$@"Erste Schritte (Login)
Rufe das Tool
outlook_loginauf:{ "realm": "adesso.de" }Es öffnet sich ein sichtbares Browserfenster. Melde dich dort wie gewohnt bei deinem Microsoft 365 Account an (inkl. MFA/Passkey).
Sobald dein Posteingang geladen ist, kannst du das Fenster schließen oder geöffnet lassen.
Prüfe mit
outlook_statusden Verbindungsstatus.Das Profil wird dauerhaft lokal gespeichert – zukünftige MCP-Aufrufe laufen vollautomatisch im Hintergrund (Headless).
Tests & Syntaxprüfung
npm run check # Überprüft JS-Syntax aller Dateien
npm test # Führt Unit-Tests via node:test ausLizenz
MIT License – siehe LICENSE.
Available Tools
11 toolsoutlook_bulk_listC
Listet ALLE E-Mails eines Ordners per Scroll-Enumeration (überwindet die Virtualisierung der Nachrichtenliste). Gibt conversation-IDs + Vorschau je Mail zurück.
| Name | Required | Description | Default |
|---|---|---|---|
| folder | Yes | inbox|sentitems|archive|deleteditems|drafts|newsletter | |
| maxScrolls | No | Maximale Scroll-Iterationen (Standard 140) |
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 reveals that virtualization is bypassed and that conversation-IDs plus a preview are returned, but says nothing about read-only safety, pagination semantics of maxScrolls, cost of full enumeration, or permissions.
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 compact sentences, front-loaded with purpose and the virtualization caveat, followed by return contents. Nothing is redundant, though the tool name and description carry some overlap.
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 annotations and no output schema, the description should explain return shape, enumeration limits, and safe usage. It only partially covers returns (conversation-IDs + preview) and omits pagination behavior and the consequence of maxScrolls, so it is incomplete for the agent.
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 100%: folder's accepted values and maxScrolls' default of 140 are already documented in the schema. The description adds no syntax or format details beyond that, so it earns only the baseline.
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: it lists all emails in a folder and explicitly notes it overcomes message-list virtualization, which distinguishes it from siblings like outlook_list_recent. However, it never names those siblings, so an agent must infer which of the ten other tools it replaces.
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 when-to-use or when-not-to-use guidance. It does not contrast with outlook_list_recent or outlook_search, which are the obvious alternatives for listing or finding mail, leaving the agent to guess when scroll enumeration is preferable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
outlook_closeB
Schließt die Hintergrund-Browserinstanz.
| 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, and it discloses nothing beyond the act of closing. It does not say whether the session/login is discarded, whether in-flight operations are aborted, whether a subsequent tool call relaunches the browser, or whether the call is idempotent if no instance is running.
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 short sentence with the action front-loaded and no filler. Nothing in it is redundant.
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 lifecycle/teardown tool inside a suite of browser-backed outlook_* tools, the description omits the consequences an agent most needs: loss of session state, impact on other tools, and whether re-login is required afterwards. With no annotations and no output schema to fall back on, these gaps are unmitigated.
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 takes zero parameters, so there is nothing for the description to clarify beyond the schema. Baseline 4 applies for a parameterless tool.
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 names a specific verb and resource ('Schließt die Hintergrund-Browserinstanz'), so an agent immediately knows this tears down the background browser. It does not differentiate itself from any sibling, but no sibling performs teardown, so the gap is minor.
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 explicit statement of when to call this versus keeping the browser alive, nor any prerequisite or sequencing guidance. Use is only weakly implied by the name and by the fact that other outlook_* tools need the browser instance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
outlook_create_draftA
Erstellt einen neuen E-Mail-Entwurf im Ordner "Entwürfe" (Drafts) in Outlook Web. Du musst die E-Mail danach nur noch in Outlook öffnen, kurz gegenlesen und absenden.
| Name | Required | Description | Default |
|---|---|---|---|
| cc | No | Optionale CC-Empfänger-Adresse(n) | |
| to | Yes | Empfänger-E-Mail-Adresse (oder mehrere getrennt durch Komma/Semikolon) | |
| body | Yes | Inhalt / Text der E-Mail (Absätze werden automatisch übernommen) | |
| subject | Yes | Betreff der E-Mail |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It does add valuable behavioral context by clarifying that the email is only drafted and must be opened and sent manually, which distinguishes a draft creation from a send operation. It says nothing about authentication requirements, whether an existing draft is overwritten, or error 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?
Two short sentences, front-loaded with the core action and target folder, with no wasted verbiage. The second sentence is mildly hand-holding but earns its place by clarifying that sending is a separate manual step.
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 create-draft tool with a fully described schema and no output schema, the definition covers what the tool does, where the result lands, and that the user must send manually. It is complete enough to invoke correctly, with only minor gaps around auth and duplicate-draft handling.
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 100%, so all four parameters (to, cc, subject, body) are already documented with format hints like comma/semicolon-separated recipients. The description adds no additional parameter meaning beyond what the schema provides, making the baseline 3 appropriate.
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 ('Erstellt einen neuen E-Mail-Entwurf') and pinpoints the destination folder ('Ordner Entwürfe/Drafts in Outlook Web'). It is unambiguous, though it relies on the name rather than explicitly distinguishing itself from the read-only siblings (the tool set contains no other creation tool, so the risk is low).
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 second sentence describes the post-creation workflow ('open in Outlook, proofread, send'), which implies the tool is for staging emails that the user will send manually. However, it never states explicit conditions for choosing this tool over alternatives or any prerequisites (e.g. login), leaving usage only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
outlook_get_emailB
Liest eine E-Mail im Lesebereich vollständig aus (Markdown, Teams-Links, Metadaten). Standardmäßig die oberste E-Mail (Index 0).
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Optionale ID oder Conversation-ID der E-Mail | |
| index | No | 0-basierter Index der E-Mail in der aktuellen Liste (Standard: 0) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full disclosure burden. It adds genuine value by naming the extraction surface (Markdown, Teams links, metadata), which tells the agent what comes back. It still omits whether authentication/session state is required (a sibling 'outlook_login' exists) and whether the read has any side effects such as marking mail as read or advancing the reading pane.
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 compact sentence with the payload enumeration up front and the default-index behavior trailing, which is the right ordering. Minimal waste, though the parenthetical list is slightly dense and the index clause is largely redundant with the schema.
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?
There is no output schema, and the description compensates by describing the returned content (Markdown, Teams links, metadata), so the agent knows what to expect. Both parameters are covered by the schema. What is missing is any statement of required session/auth state or how it relates to the near-identical 'outlook_read_email' sibling.
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 100%, so both 'id' and 'index' are already documented in the schema. The description only restates the index-0 default, adding no syntax, precedence rules (what happens if both id and index are supplied), or format details beyond the structured fields; baseline 3 applies.
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 ('Liest eine E-Mail ... vollständig aus') and enumerates the returned payload (Markdown, Teams-Links, Metadaten), so the agent knows exactly what the tool produces. However, it does not distinguish itself from the sibling 'outlook_read_email', which appears to read an email as well, leaving real overlap unresolved.
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 only usage hint is the default behavior ('Standardmäßig die oberste E-Mail (Index 0)'), which restates the schema default rather than explaining when to pick this tool. No condition selects it over 'outlook_read_email', 'outlook_search', or 'outlook_list_recent', and no prerequisites (e.g. prior login via 'outlook_login') are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
outlook_list_foldersA
Listet die Ordner im Navigationsbereich (Inbox, Sent Items, Archive, Deleted Items, Drafts, Newsletter) mit ihren Namen und Item-Counts.
| 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 that results include names and item counts, which is useful. But it doesn't state whether it requires authentication first (e.g., outlook_login), whether it's a read-only operation, or if there are rate limits.
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, well-formed sentence that front-loads the verb and resource and includes the relevant return details. No wasted words.
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 zero-parameter list tool with no output schema, the description is almost adequate. However, the lack of any usage guidance or behavioral context (like auth requirements) leaves gaps for an agent that must decide between this and outlook_navigate_folder.
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?
There are zero parameters, so the baseline is 4 per the rules. The description appropriately doesn't discuss parameters since none exist.
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 uses a specific verb ("Listet") and resource ("Ordner im Navigationsbereich") and even enumerates the folder types returned. It distinguishes itself reasonably from siblings like outlook_navigate_folder, though it doesn't explicitly name an alternative.
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 – an agent can infer this is for discovering the folder structure before navigating or searching. However, there's no explicit when-to-use vs. outlook_navigate_folder or outlook_list_recent, and no stated prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
outlook_list_recentC
Listet die neuesten E-Mails im Posteingang auf.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Anzahl der E-Mails (Standard: 10) |
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 not state that the operation is read-only, what order results come in beyond "latest", whether read/unread matters, or whether results are truncated by limit. For a tool with zero annotation coverage this leaves real gaps.
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 short sentence with the key scoping information (newest, inbox) front-loaded and no filler. It is efficient, though arguably too terse given the unanswered behavioral questions.
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, no output schema, no nested objects), so little is required. Still, the description omits sorting guarantee, folder assumptions, and read-only status, which are the few things an agent would want for this call.
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 100%, and the single optional "limit" parameter is fully documented with a default of 10 in the schema itself. The description adds no additional semantics beyond what the schema already provides, so the baseline 3 applies.
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 gives a specific verb ("Listet") and resource ("E-Mails") with scope qualifiers: newest and inbox-only. That scope distinguishes it somewhat from search-style siblings, but it never names or contrasts with outlook_search, outlook_bulk_list, or outlook_read_email, so an agent must infer the boundary itself.
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 statement of when to use this tool versus outlook_search, outlook_bulk_list, or outlook_navigate_folder. The agent must infer that this is the default 'show me what's new' call from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
outlook_loginB
Öffnet ein sichtbares Browserfenster (Edge/Chromium via WSLg/Desktop), damit du dich einmalig bei Microsoft 365 / OWA anmelden kannst.
| Name | Required | Description | Default |
|---|---|---|---|
| realm | No | Tenant/Domain (Standard: d-velop.de, z.B. adesso.de oder d-velop.de) | d-velop.de |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does disclose meaningful traits: the window is visible, requires Edge/Chromium via WSLg/Desktop, and the login is one-time. It omits what happens after authentication (session persistence, whether it blocks, what it returns), which matters for an interactive auth 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?
A single, efficiently worded sentence with the key behavioral detail (visible browser window) front-loaded. No filler, though it is arguably slightly terse given the tool's interactive nature.
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 one-parameter auth tool with no output schema and no annotations, the essential trigger is conveyed. However, the post-login behavior and how it relates to the broader outlook_* session workflow are left unstated.
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 100% and the single realm parameter is already documented with its default and examples in the schema. The description adds nothing about realm, so the baseline of 3 applies.
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 concrete verb and resource: opens a visible browser window for a one-time Microsoft 365/OWA sign-in. An agent can tell this is the interactive-authentication tool distinct from read/search siblings like outlook_list_recent, though it never explicitly names how it relates to them.
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 'damit du dich einmalig ... anmelden kannst' implies this is the setup step to run before authenticated operations, but there is no explicit statement of when to invoke it versus outlook_status (e.g. to check whether a session already exists) or any preconditions/exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
outlook_read_emailB
Liest eine E-Mail vollständig im Lesebereich (Markdown) anhand ihrer conversation-ID (data-convid aus bulk_list). Scrollt ggf. automatisch durch den Ordner, bis die conversation gefunden ist.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | conversation-ID (data-convid) | |
| folder | No | Optional: Ordner, aus dem gelesen werden soll (inbox|sentitems|archive|...) |
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 a non-obvious trait: it auto-scrolls through the folder until the conversation is found, implying UI navigation side effects. But it omits whether reading alters folder/view state, what happens if the conversation is not found, and any auth/permission needs.
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 sentences, front-loaded with what the tool does and followed by the lookup/discovery behavior. No filler, though the parenthetical '(Markdown)' and '(data-convid aus bulk_list)' stack a lot of detail into one sentence.
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 UI-driven read tool with no output schema and no annotations, the description covers the return (Markdown in the reading pane) and the search-until-found behavior. It is still missing the differentiation from outlook_get_email and the failure/edge behavior, leaving the agent with meaningful unknowns.
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 100%, so both parameters are already documented. The description adds only that the id is a conversation-ID sourced from bulk_list and that folder scopes the read, which largely restates the schema; baseline 3 is appropriate.
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 ('Liest eine E-Mail vollständig im Lesebereich (Markdown) an') with a clear scope (full read, Markdown, reading pane). However, it does not distinguish itself from the sibling tool outlook_get_email, which an agent would reasonably assume reads an email too.
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?
It helpfully says the id comes from bulk_list ('data-convid aus bulk_list'), giving some usage context. But it never states when to use this versus outlook_get_email or outlook_search, so the agent must infer the distinction from names alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
outlook_searchB
Sucht E-Mails in Outlook Web anhand eines Suchbegriffs (z.B. Kundenname, Ticketnummer, Absender).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximale Anzahl an Ergebnissen (Standard: 10) | |
| query | Yes | Suchbegriff (z.B. "Fit-Connect", "Bülter", "Rechnung") |
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 says nothing about whether this search is read-only (safe), what happens on zero results, whether it searches all folders or just the inbox, or any rate limits. For a search tool with no annotation coverage, this is a significant gap.
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 that states the action, the target surface, and the input mechanism. No waste, and the key information (what it searches and how) comes first.
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 description is minimally adequate for a 2-parameter search tool with full schema coverage and no output schema. However, with no annotations and no behavioral context (read-only? scope?), an agent lacks important safety and scope information it can't infer from the schema.
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 100%, with both `query` and `limit` documented in the schema (limit's default of 10 and query's example terms are all in the schema). Baseline 3 applies when the schema does the heavy lifting.
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 ("Sucht") and resource ("E-Mails in Outlook Web") and clarifies the search is keyword-based. It doesn't differentiate itself from all siblings (e.g., outlook_list_recent, outlook_bulk_list), but the search-by-keyword scope is clear.
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 through the search-term examples (Kundenname, Ticketnummer, Absender), but the description never explicitly says when to use this tool versus outlook_list_recent or outlook_read_email. No alternatives or exclusions are named.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
outlook_statusA
Prüft den Status der Outlook Web Verbindung und ob du eingeloggt bist.
| Name | Required | Description | Default |
|---|---|---|---|
No 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. It discloses the two things reported (connection status, login state), which is the core behavioral fact for a status check, but says nothing about side effects, required permissions, or what the result looks like.
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 connection-status check is stated before the login check, and nothing is redundant.
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 zero-parameter status tool with no annotations and no output schema, the description conveys what is verified. It could go slightly further by hinting at the returned shape (e.g. a boolean or status string), since no output schema exists to cover that.
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 takes zero parameters, so schema semantics are a non-issue and the baseline of 4 applies. There is nothing for the description to disambiguate.
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: it checks the Outlook Web connection status and whether the user is logged in. This clearly distinguishes it from action-oriented siblings like outlook_login or outlook_navigate_folder, though it doesn't explicitly name an alternative.
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 says what is checked but gives no guidance on when to call it — e.g. before running other Outlook tools to verify a session, or after outlook_login to confirm success. No when-not conditions or alternatives are mentioned.
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.
11 tool updates
v1.0.0- First observed
outlook_bulk_list - First observed
outlook_close - First observed
outlook_create_draft - First observed
outlook_get_email - First observed
outlook_list_folders - First observed
outlook_list_recent - First observed
outlook_login - First observed
outlook_navigate_folder - First observed
outlook_read_email - First observed
outlook_search - First observed
outlook_status
TDQS
Scored across 11 tools
outlook_get_email (reads top email by index) and outlook_read_email (reads by conversation-ID) have heavily overlapping purposes, and outlook_list_recent vs outlook_bulk_list both enumerate emails with only subtle differences. Descriptions clarify the intended workflow, but an agent could easily pick the wrong reader or lister.
Consistent outlook_ prefix with mostly verb_noun naming (list_recent, get_email, create_draft, list_folders, navigate_folder, bulk_list). Minor deviation with bare verbs like status, login, and close, but overall readable and predictable.
11 tools is well-scoped for an OWA automation server, covering session lifecycle (login/status/close) plus core mail operations without bloat. Each tool earns its place.
Covers listing, searching, reading, folder navigation, and draft creation, but the lifecycle dead-ends at drafts — no send, reply, forward, delete, or move operations. Agents cannot complete a full email workflow without leaving the tool set.
Maintenance
Related MCP Connectors
Email infrastructure for AI agents — send, receive, search, and reply to email over MCP.
Stateful email for AI agents — read inboxes, reply in-thread, draft with approval.
Task-scoped email inboxes for AI agents: read mail, extract verification codes, and reply.
Connect any mailbox to Claude, ChatGPT & AI: read, send, reply, schedule & search emails.
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-
- AlicenseBqualityDmaintenanceEnables AI assistants to manage Microsoft Outlook email and calendar through the Microsoft Graph API, including reading, sending, searching emails, and handling calendar events.4386 npm27MIT
- FlicenseNot gradedqualityDmaintenanceProvides programmatic access to Microsoft Outlook mailboxes, enabling AI assistants to search, analyze, and extract insights from emails in personal and shared mailboxes.-
- AlicenseNot gradedqualityCmaintenanceEnables AI agents to interact with Microsoft 365 Outlook Mail, allowing email operations via natural language.12 npmMIT