Skip to main content
Glama

owa-mail-mcp

MCP-сервер к корпоративному Exchange: почта, календарь, справочник людей.

Наружу Exchange отдаёт только /owa/ (EWS SOAP, MAPI, IMAP/SMTP закрыты), поэтому сервер работает через OWA JSON API (/owa/service.svc) — тот же протокол, что и веб-клиент OWA, — поверх NTLM.

Подключение

Конфиг MCP-клиента:

{
  "mcpServers": {
    "owa-mail": {
      "command": "uvx",
      "args": ["--from", "git+https://github.com/mainpart/owa-mail-mcp.git", "owa-mail-mcp"],
      "env": {
        "EXCHANGE_USERNAME": "DOMAIN\\user",
        "EXCHANGE_PASSWORD": "..."
      }
    }
  }
}

Локальный запуск из клона: uv sync && uv run owa-mail-mcp.

Related MCP server: OWA Exchange MCP Server

Переменные окружения

Переменная

Обяз.

Дефолт

Назначение

EXCHANGE_USERNAME

да

учётка NTLM, DOMAIN\user

EXCHANGE_PASSWORD

да

пароль

EXCHANGE_OWA_URL

https://owa.example.com

хост OWA

EXCHANGE_COOKIE_FILE

~/.config/owa-mail-mcp/cookies

кэш сессии (0600), пишется сервером

EXCHANGE_VERIFY_SSL

false

true — строгая проверка TLS

EXCHANGE_ATTACHMENT_DIR

/tmp/attachments

куда сохраняются вложения

EXCHANGE_TIME_ZONE

Russian Standard Time

Windows-зона для TimeZoneContext

EXCHANGE_LOG_LEVEL

INFO

уровень логов (в stderr)

MCP_ENABLED_TOOLS

20 тулов

allowlist видимых тулов (см. «Конфиг»)

MCP_TRANSPORT / MCP_HOST / MCP_PORT

stdio

транспорт

Методы

Служебное:

Метод

Что делает

check_auth

Жив ли сеанс OWA — делает лёгкий запрос к ящику, возвращает {authenticated, user, owa_url} или not_authenticated

Почта:

Метод

Что делает

get_folders

Папки с id, счётчиками и непрочитанными (limit/offset)

find_emails

Список папки или полнотекстовый поиск (query, granularity=threads|messages); листается по позиции (offset) или по курсору (after)

get_email

Письмо целиком: тело, получатели, id вложений, ссылки (include_links)

get_thread

Вся переписка по письму или conversation_id

send_email

Отправить письмо или сохранить черновик (draft)

reply_email

Ответить / ответить всем (reply_all)

forward_email

Переслать письмо с вложениями

delete_email

Удалить (в «Удалённые» или hard_delete)

mark_email_read

Пометить прочитанным / непрочитанным

move_email

Переместить письмо в папку

Календарь:

Метод

Что делает

get_calendar_events

События за период (start/end), свои или чужие (person); окно читается целиком, сужается датами, limit — только предохранитель

get_event

Событие целиком: тело, участники, статусы ответов

get_calendars

Какие календари видны и какие из них реально читаются

get_user_availability

Занятость человека с темами встреч — даже без доступа к папке

find_meeting_time

Свободные для всех слоты в рабочих часах

create_event

Создать событие или серию, разослать приглашения

update_event

Изменить событие и уведомить участников (apply_to для серий)

cancel_event

Отменить своё событие (apply_to для серий)

respond_to_event

Принять / отклонить / под вопросом (comment, notify_organizer, apply_to)

Люди, вложения, автоответчик:

Метод

Что делает

find_people

Справочник: имя/логин/адрес → адрес; при одном совпадении — полная карточка (должность, отдел, телефоны); details раскрывает несколько, limit/offset листают

get_attachment

Скачать вложение на диск

get_oof

Прочитать настройки автоответчика

set_oof

Включить / выключить / по расписанию

⚙ — выключены по умолчанию, включаются через MCP_ENABLED_TOOLS.

Конфиг

MCP_ENABLED_TOOLS полностью заменяет дефолт — перечисляйте ровно то, что нужно; пустая строка выключает все тулы.

Включить всё (24 тула):

check_auth,get_folders,find_emails,get_email,get_thread,send_email,reply_email,forward_email,delete_email,mark_email_read,move_email,get_calendar_events,get_event,get_calendars,get_user_availability,find_meeting_time,create_event,update_event,cancel_event,respond_to_event,get_attachment,find_people,get_oof,set_oof

Только чтение:

check_auth,get_folders,find_emails,get_email,get_thread,get_calendar_events,get_event,get_calendars,get_user_availability,find_people

Available Tools

20 tools
cancel_eventCancel Calendar EventA
Destructive

Cancel an event YOU organize and notify the attendees.

The notice reaches them and cannot be recalled. Only the organizer can cancel: asked to cancel someone else's event this refuses rather than quietly deleting your copy — to take it off your own calendar, decline it with respond_to_event.

For a RECURRING event apply_to is required; nothing is cancelled until you supply it.

ParametersJSON Schema
NameRequiredDescriptionDefault
item_idYesitem_id from get_calendar_events.
messageNoexplanation carried by the cancellation notice; without one the attendees get a silent cancellation.
apply_toNorecurring events only — "this_event" cancels just this one, "whole_series" every remaining event in the series. Required when the event is recurring, ignored for one-off events. Ask the user which they meant rather than picking.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the destructiveHint annotation, the description adds crucial behavioral context: the cancellation notice cannot be recalled, the tool refuses to cancel events for non-organizers, and recurring events require apply_to before anything is cancelled. This enriches the annotation without contradiction.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise and well-structured: three short paragraphs, each serving a distinct purpose (main action, authorization/alternative, recurring rule). No redundancy or filler; every sentence contributes to understanding the tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the annotations, output schema, and full parameter coverage, the description is complete. It covers the action, recipient notification, irreversibility, authorization, alternative tool, and recurring behavior. The output schema exists, so return values need not be explained.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3. The description adds value by explicitly highlighting the consequence of not supplying apply_to ('nothing is cancelled') and reinforcing that apply_to is required for recurring events, which is useful beyond the schema's static description.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description explicitly states the action: 'Cancel an event YOU organize and notify the attendees.' It also distinguishes itself from sibling tools by clarifying that only the organizer can cancel and directing users to respond_to_event for declining someone else's event. This is a specific verb+resource with clear sibling differentiation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit when-to-use and when-not-to-use guidance: it refuses to cancel others' events and directs users to respond_to_event instead. It also specifies that apply_to is required for recurring events, and nothing is cancelled until provided, offering clear procedural guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

check_authCheck OWA SessionA
Read-onlyIdempotent

Is the OWA session live? A health check for this MCP connection.

Makes one light authenticated call to the mailbox — not just a cookie-file check — so the answer covers both the credentials and whether the OWA host is reachable, independent of any particular tool.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description goes beyond annotations by specifying that the tool makes one light authenticated call to the mailbox, not just a cookie-file check, and that the result covers both credentials and host reachability. This adds useful behavioral context about the network call involved, which annotations do not provide.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and front-loaded with the primary purpose ('Is the OWA session live?'). The additional sentence provides essential detail about the method without redundancy. Every sentence serves a purpose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (no parameters) and the presence of an output schema, the description fully explains what the tool does, how it works, and its scope. There are no significant gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, so the description correctly focuses on behavior rather than parameter syntax. The baseline for a no-parameter tool is 4, and the description adds no unnecessary parameter details.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly defines the tool as a health check for the OWA session, using a specific verb ('check') and resource ('session'). It distinguishes itself from sibling tools (e.g., get_folders, send_email) by explaining it verifies connection health rather than performing a mailbox operation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context for when to use the tool: to check if the OWA session is live and the host reachable. It notes that it is independent of any particular tool, implying it is a general connectivity check. While it doesn't explicitly name alternatives or exclusions, the unique purpose makes the intended use obvious.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_eventCreate Calendar EventA

Create a calendar event, one-off or recurring, and invite attendees.

With no attendees this is a private appointment and nothing is sent.

ParametersJSON Schema
NameRequiredDescriptionDefault
endYesend of the FIRST occurrence, ISO 8601.
bodyNoagenda / description.
startYesstart time, ISO 8601 (e.g. "2026-07-21T15:00:00").
repeatNomakes it a series.
subjectYesmeeting title.
locationNoroom or place, free text.
attendeesNorequired attendees — addresses or names (an ambiguous name is refused and nothing is created; pass an exact address).
body_typeNo"HTML" or "Text".HTML
repeat_daysNoweekly only — "Monday" or "Monday Wednesday Friday". Defaults to the weekday of `start`.
repeat_countNoend after N occurrences.
repeat_untilNoend on this date, ISO 8601. Ignored when repeat_count is set; with neither, the series never ends.
repeat_intervalNoevery N days/weeks/months.
reminder_minutesNoreminder lead time; 0 sets no reminder.
optional_attendeesNooptional attendees, same format.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate readOnlyHint false, destructiveHint false, and idempotentHint false, so the agent knows it's a non-destructive write. The description adds valuable behavioral context: with no attendees, it becomes a private appointment and nothing is sent. This goes beyond annotations and clarifies the invitation behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with the core action, and no filler. Every word earns its place. The second sentence adds crucial behavioral nuance without bloating the description.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the 14 parameters, full schema descriptions, and an output schema, the description need not re-explain return values or parameter details. It covers the essential high-level behavior (creation, recurrence, attendee invites, privacy). Slightly more context about when recurrence or attendees are used could help, but the schema and annotations fill that gap adequately.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3. The overall description does not add parameter-specific meaning beyond what the schema already provides; it only mentions invite attendees, which is also captured in the attendees parameter description. No additional semantic value is added.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Create a calendar event'), the resource (calendar event), and key distinctions (one-off or recurring, invite attendees). It is easily distinguishable from sibling tools like get_calendar_events, update_event, and cancel_event by its explicit create verb and scope.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage context (creating events) but does not explicitly state when to use this tool over alternatives or provide exclusions. The note about no attendees affecting privacy is a usage condition, but no alternative tools are mentioned. It is adequate but not explicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

delete_emailDelete EmailA
Destructive

Delete an email — to Deleted Items by default.

ParametersJSON Schema
NameRequiredDescriptionDefault
item_idYesitem_id from find_emails.
hard_deleteNopurge irrecoverably instead of moving to Deleted Items.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark the tool as destructive, and the description adds the important qualifier that deletion moves to Deleted Items by default. It doesn't highlight that hard_delete is irrecoverable, but the schema covers that; no contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One short sentence that is front-loaded and contains no filler. It states the action and the key default behavior efficiently.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple delete operation with full schema coverage, annotations, and output schema, this description is mostly sufficient. It lacks explicit usage alternatives, but the name and siblings make the purpose clear; a small mention of hard_delete's irreversibility would improve completeness but is not necessary given schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema covers both parameters at 100% with descriptions. The description's phrase 'to Deleted Items by default' reinforces the hard_delete default but adds no information beyond schema; baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description uses specific verb 'Delete' and resource 'email', and adds default behavior 'to Deleted Items'. This clearly distinguishes from sibling event actions and makes the tool's scope obvious.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No explicit when-to-use or when-not-to-use guidance is provided. Usage is implied by the tool name and sibling context, but the description doesn't discuss alternatives or conditions like when a hard delete is appropriate.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

find_emailsFind EmailsA
Read-onlyIdempotent

List emails in a folder, or search the whole mailbox by text.

Newest first. Bodies are not included — a row carries a short preview at most; full body, attachment ids and links come from get_email.

A listing answers with total/has_more and both continuations, next_offset and next_cursor — take either for the next page. A search has neither a total (the server reports 0 whatever it found) nor a cursor.

ParametersJSON Schema
NameRequiredDescriptionDefault
afterNonext_cursor from the previous answer. Does not drift. Not combinable with offset, with query, or with limit=200.
limitNo
queryNofull-text search over the OWA index — subject, body and sender, Exchange KQL (e.g. 'премия' or 'from:ivanov отчёт'). Finds old mail the web client finds. Omitted → plain folder listing.
folderNowell-known name, custom folder name, or FolderId. With `query`, search covers the whole mailbox unless you narrow it here.inbox
offsetNoskip this many rows. Drifts when mail arrives during a walk.
granularityNowith `query` only. A thread row lists only the messages that matched, not the whole conversation — for that use get_thread.threads
unread_onlyNofiltered by the server on both routes, so it reaches the whole folder or index rather than the page in hand.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the readOnly/idempotent annotations, the description discloses important behaviors: newest-first ordering, bodies omitted, pagination via total/has_more and both continuations, and unusual search behavior (total reports 0, no cursor). This adds significant context not available from annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact yet information-dense, front-loaded with the core purpose. Every sentence contributes meaningful detail, and the structure flows logically from function to limitations to pagination specifics.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the 7 parameters and output schema, the description covers all essential operational aspects: listing vs search, result contents, pagination mechanics, and exceptions. It is complete enough for an agent to select and invoke the tool correctly without further documentation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is high (86%), so baseline is 3. The description adds value by explaining how pagination parameters work in context ('take either for the next page') and clarifying that search lacks next_cursor, which goes beyond individual parameter descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool lists emails in a folder or searches the whole mailbox by text. It distinguishes itself from siblings like get_email and get_thread by explicitly noting bodies are excluded and pointing to get_email for full content.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit guidance for when to use this tool vs alternatives: 'full body, attachment ids and links come from get_email' and mentions 'for that use get_thread' in the schema. It also clarifies the two modes (folder listing vs search) and relevant pagination behavior.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

find_meeting_timeFind Meeting SlotsA
Read-onlyIdempotent

Concrete meeting slots where everyone is free, in working hours.

Feed a chosen slot straight into create_event. Slots are computed from each attendee's actual busy blocks (absolute times), not from the merged free/busy string — that string comes back shifted by the mailbox time zone on this server and would place meetings on top of existing ones.

ParametersJSON Schema
NameRequiredDescriptionDefault
endNosearch window end. Default start + 7 days.
limitNo
startNosearch window start, ISO 8601. Default now.
peopleYesattendees — addresses or names (an ambiguous name is refused).
work_endNoend of working hours, local "HH:MM".19:00
work_startNostart of working hours, local "HH:MM".09:00
skip_weekendsNoignore Saturday and Sunday.
duration_minutesNomeeting length.
tentative_is_busyNocount tentatively-accepted meetings as busy; False allows double-booking over them.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description discloses a significant behavioral detail: slots are computed from actual busy blocks (absolute times) rather than the merged free/busy string, which is shifted by the mailbox time zone and would cause double-booking. This goes well beyond the annotations and gives the agent critical information about correctness.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences, front-loading the purpose and then adding a crucial caveat. Every sentence contributes value, with no fluff or repetition of schema/annotation content.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 9-parameter tool with rich annotations and an output schema, the description covers the key purpose, the critical timezone pitfall, and a clear integration path to create_event. It provides the essential behavioral context an agent would need to use the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 89%, so the schema already documents most parameters. The description adds context about working hours and the output feeding into create_event, but does not detail individual parameter semantics beyond that. A baseline score of 3 is appropriate given the high schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific purpose: finding concrete meeting slots where all attendees are free during working hours. It clearly distinguishes itself from siblings like get_user_availability by emphasizing 'everyone is free' and by suggesting a direct follow-up to create_event.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context: use this tool to find common free slots, and then feed the result into create_event. It also warns about the timezone-shifted merged free/busy string, implying this tool is the accurate choice. However, it does not explicitly name alternative tools or state when not to use it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

find_peopleFind PeopleA
Read-onlyIdempotent

Look someone up in the corporate address book.

A single match comes back with the full card — job title, department, office, phones. Several come back as a compact list, each with the exact SMTP address send_email and create_event want. has_more only means the page came back full: the directory reports no honest total.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
queryYesname, login, or part of an address.
offsetNoskip this many matches — how to reach the ones past `limit`.
detailsNoexpand the top matches with title/department/phones even when there are several (one lookup per expanded person). A single match is always expanded regardless.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and non-destructive, so the safety profile is covered. The description adds valuable non-obvious behavior: single match returns full card vs. compact list for multiple matches, and the has_more caveat that it only means the page is full, not an honest total. This exceeds the structured data.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two short paragraphs, front-loaded with the purpose. Every sentence earns its place: the first defines the action, the second explains single vs. multiple results and the SMTP address relevance, and the third clarifies has_more behavior. No wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only lookup tool with an output schema and strong annotations, the description covers purpose, result format nuances, pagination caveat, and integration points with sibling tools. The output schema handles detailed return fields, so the description is complete for an agent to select and invoke correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 75% (limit lacks a description), so the baseline is 3. The description does not add new parameter-level semantics beyond what the schema already provides for query, offset, and details. It indirectly references details expansion but does not explain parameter syntax or constraints further.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: 'Look someone up in the corporate address book.' It clearly distinguishes this tool from siblings like find_emails or get_calendar_events by focusing on people lookup, and even mentions how results feed into send_email and create_event.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies when to use this tool: when you need to look up a person and obtain their SMTP address for other tools like send_email and create_event. It does not explicitly state when not to use it or name alternative people-search tools, but the context is clear enough among the given siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

forward_emailForward EmailA
Destructive

Forward an email with its attachments. Sends immediately.

ParametersJSON Schema
NameRequiredDescriptionDefault
toYesrecipients — addresses or names (an ambiguous name is refused and nothing is sent; pass an exact address).
bodyNonote added above the forwarded content.
item_idYesitem_id of the message to forward.
body_typeNo"HTML" or "Text".HTML

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond annotations (destructiveHint=true), the description adds 'Sends immediately,' which signals that the action is executed without delay, and 'with its attachments,' clarifying that attachments are preserved. No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences that immediately state the core function and a behavioral note. No wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the simple forward operation, the description covers the primary behavior and timing. The schema and output schema provide parameter and response details. It could have noted that it requires an existing item, but the schema makes that clear.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

All 4 parameters are fully documented in the schema with descriptions (100% coverage), so the description's omission of parameter details is acceptable. The description itself does not add parameter semantics beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses the specific verb 'Forward' and identifies the resource ('an email with its attachments'), clearly distinguishing it from send/reply tools. The phrase 'with its attachments' adds a key characteristic.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives no guidance on when to use this tool versus alternatives like 'send_email' or 'reply_email'. No exclusions or alternative tool references are provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_attachmentDownload AttachmentA

Download an attachment to disk and return its path.

Works for both mail and calendar attachments.

ParametersJSON Schema
NameRequiredDescriptionDefault
filenameNooverride the server-supplied file name.
target_dirNodestination directory. Default /tmp/attachments (override with EXCHANGE_ATTACHMENT_DIR).
attachment_idYesattachment_id from get_email or get_event.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false, so the description's 'download to disk' aligns with that. It adds the return-path behavior and the mail/calendar applicability. However, it doesn't disclose pitfalls like filename collisions or permission requirements. With annotations covering the safety profile, a 3 is appropriate.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two concise sentences, front-loaded with the core action. No redundant information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The combination of annotations, 100% schema coverage, and the description's clear scope makes the tool usable. The only missing context (where attachment_id comes from) is provided by the parameter description. Output schema exists, so return values need no explanation. A 4 reflects a minor gap: no explicit workflow advice, though it's implied.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema covers 100% of parameters with descriptions, and the description itself contains no parameter details. It relies on the schema, which already explains attachment_id source, filename override, and target_dir default. Baseline 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Download') and resource ('attachment'), stating it saves to disk and returns a path. This clearly distinguishes it from sibling tools like get_email or get_event, which handle the parent objects.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly states it works for both mail and calendar attachments, giving clear scope. It doesn't mention alternatives or when-not-to-use, but no direct alternative exists among siblings. This is clear context without exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_calendar_eventsList Calendar EventsA
Read-onlyIdempotent

Calendar events in a time window, recurrences expanded.

is_recurring on a row means it is one occurrence of a series: changing, cancelling or declining that row needs an explicit apply_to in the write tools.

There is no paging and nothing to page — the whole window is read every call, so total is exact. Narrow the answer by moving start/end.

ParametersJSON Schema
NameRequiredDescriptionDefault
endNowindow end. Default start + 7 days.
limitNosafety cap on the size of the answer, not a page — a window with more events than this is cut and the answer says so.
startNowindow start, ISO 8601 (e.g. "2026-07-20T00:00:00"). Default now.
folderNocalendar folder.calendar
personNoread someone else's calendar — address or name (an ambiguous name is refused). Works only if they shared the calendar folder with you, otherwise the call fails with "Доступ запрещён"; for anyone else use get_user_availability.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description discloses critical behavioral traits beyond annotations: recurrences are expanded, there is no paging so 'total' is exact, and modifying recurring occurrences requires an explicit 'apply_to' in write tools. Annotations already confirm read-only and idempotent, and the description adds rich operational context without contradicting them.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three short, focused paragraphs. The first sentence delivers the core function, the second explains recurrence implications, and the third covers paging behavior and tuning. Every sentence earns its place with no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only listing tool, this description covers the essential behavioral quirks: recurrence expansion, exact totals due to no paging, and how to narrow results. The output schema exists, so return structure is already defined. The description is notably complete for the tool's complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

All 5 parameters have thorough schema descriptions with 100% coverage. The main description adds cross-parameter context, such as 'the whole window is read every call' and how 'limit' acts as a safety cap, clarifying the interaction between start, end, and limit beyond the individual parameter descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states exactly what the tool does: 'Calendar events in a time window, recurrences expanded.' This clearly distinguishes it from siblings like get_event (single event) and get_user_availability. The verb and resource are specific and unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit context: 'There is no paging and nothing to page — the whole window is read every call' and advises 'Narrow the answer by moving start/end.' It also mentions an explicit alternative in the person parameter description: 'for anyone else use get_user_availability.' It lacks a direct 'when not to use' contrast with get_event, but the guidance is strong.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_calendarsList CalendarsA
Read-onlyIdempotent

List the calendars in your sidebar — yours and colleagues' — and who you can read.

A colleague's calendar being listed does NOT mean it is readable: the entry looks identical either way, and only a read attempt tells them apart — hence check_access. When someone's calendar is closed, their schedule WITH MEETING SUBJECTS is usually still available via get_user_availability.

ParametersJSON Schema
NameRequiredDescriptionDefault
check_accessNoprobe each colleague's calendar with a one-day read and report `access` as "readable" or "denied". Costs one call per colleague; False leaves `access` as "unknown".

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the readOnlyHint and idempotentHint annotations, the description discloses key behaviors: listing does not guarantee readability, access requires a probe request, check_access incurs a per-colleague cost, and closed calendars may still expose meeting subjects via get_user_availability. This adds significant non-obvious context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise and front-loaded. The first sentence summarizes the core function, and the second paragraph adds important nuance without redundancy. Every sentence contributes value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers the listing purpose, access semantics, probe cost, and a relevant alternative tool. With an output schema present, return value details are already handled externally. It fully addresses the openWorldHint by mentioning colleagues' calendars and the access uncertainty.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema already provides a thorough description of check_access, including its cost and effect. The tool description adds motivation for why the parameter exists but no new parameter-level details, so it does not exceed the schema coverage baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool lists calendars in the sidebar, including whose calendars are accessible. This is a specific verb+resource+scope, distinguishing it from sibling tools like get_calendar_events and get_user_availability.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives practical context: it explains when check_access is needed, notes that a listed calendar may not be readable, and points to get_user_availability as an alternative for meeting subjects on closed calendars. It lacks explicit 'when not to use' but provides clear situational guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_emailRead EmailA
Read-onlyIdempotent

Full email: body, all recipients, and attachment ids for get_attachment.

ParametersJSON Schema
NameRequiredDescriptionDefault
item_idYesitem_id from find_emails.
body_formatNotext strips the HTML, html returns it raw.text
include_linksNoalso return the links extracted from the body.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint and idempotentHint. The description adds behavioral context by specifying the response includes body, all recipients, and attachment IDs, which is useful for understanding what the tool returns. No contradictions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence with high information density, front-loaded with 'Full email.'

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool has an output schema, and the description covers the key return contents. With 3 params all documented, the description is adequate for a simple read tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, with descriptions for item_id, body_format, and include_links. The description does not add additional parameter semantics beyond the schema, so baseline 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states 'Full email: body, all recipients, and attachment ids for get_attachment.' This clearly identifies the tool as a read operation for retrieving the complete email, distinguishing it from siblings like find_emails (search) and get_attachment (fetches attachments).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage when you need the full email content and attachment IDs, specifically noting the dependency on get_attachment. It does not explicitly mention when not to use it, but provides clear context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_eventRead Calendar EventA
Read-onlyIdempotent

Full calendar event: body, attendees with response status, attachment ids.

ParametersJSON Schema
NameRequiredDescriptionDefault
item_idYesitem_id from get_calendar_events.
body_formatNotext strips the HTML, html returns it raw.text

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint: false, so the safety profile is covered. The description adds what specific data fields are returned (body, attendees, attachment IDs), but does not disclose any additional behavioral traits such as error conditions or external dependencies.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single concise phrase, front-loaded with the key concept 'Full calendar event', and every word adds value. No superfluous information or repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the presence of an output schema and strong annotations (read-only, idempotent), the description adequately complements the structured data. It highlights the key return elements without needing to explain return values in detail, and the tool is simple enough that the description is sufficient.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, with item_id described as coming from get_calendar_events and body_format explained as text vs html. The description does not add any parameter-specific semantics beyond what the schema already provides, so the baseline score applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly specifies that the tool returns a full calendar event including body, attendee response statuses, and attachment IDs. This distinguishes it from siblings like get_calendar_events (list) and get_attachment (single attachment), even though it lacks an explicit verb.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

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. It does not mention that it retrieves a single event by ID or contrast it with get_calendar_events, so usage context must be inferred from the name and schema.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_foldersList Mail FoldersA
Read-onlyIdempotent

List mail/calendar folders with their ids, item counts and unread counts.

Use it to turn a custom folder name into the FolderId find_emails and move_email accept. total is the server's own count of folders in view, so it is trustworthy.

ParametersJSON Schema
NameRequiredDescriptionDefault
depthNoDeep walks the whole subtree, Shallow only the direct children.Deep
limitNo
offsetNoskip this many folders — how to reach the ones past `limit`.
parentNowell-known name ("msgfolderroot", "inbox", …) or a FolderId.msgfolderroot

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds valuable behavioral context beyond the annotations: it mentions the output includes item counts and unread counts, explains that 'total' is the server's own count and trustworthy, and hints at depth behavior. This complements the readOnly/idempotent annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three sentences, front-loaded with the main function, and every sentence adds value. It is concise without being under-specified.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the presence of an output schema and strong annotations, the description is fairly complete. It covers the purpose, output contents, and a key use case. It doesn't explicitly describe pagination behavior, but the offset parameter description covers that; the note about 'total' adds trustworthiness.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 75%, so the schema already explains most parameters (depth, offset, parent). The description adds a use case (folder name to FolderId) that implies parent semantics, and the note about 'total' helps interpret pagination. However, it doesn't explain limit/offset beyond what the schema provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the function: 'List mail/calendar folders with their ids, item counts and unread counts.' It also specifies the primary use case of converting folder names to FolderIds for find_emails and move_email, which distinguishes it from sibling tools like get_calendars.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly says when to use the tool ('Use it to turn a custom folder name into the FolderId find_emails and move_email accept'), providing clear context. It doesn't explicitly mention alternatives, but given the sibling tools list, the intended use is clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_threadRead Email ThreadA
Read-onlyIdempotent

Every email in a conversation, newest first — the whole back-and-forth.

The only way to read a thread in full: search returns just the messages that matched, get_email returns one. Bodies are not included — follow up with get_email on the messages you need.

has_more only says the thread hit limit: this action has no offset and no cursor, so raise limit to see the rest.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
item_idYesany message of the thread (item_id from find_emails or get_email), or the conversation_id itself.
include_deletedNoalso include messages sitting in Deleted Items.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description discloses critical behaviors not covered by annotations: bodies are excluded, messages are ordered newest first, and the meaning of 'has_more' with no offset/cursor is explained. This adds significant transparency beyond readOnlyHint and idempotentHint.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is four sentences, each conveying essential information without redundancy. It front-loads the core purpose and immediately follows with usage distinctions and caveats, maximizing clarity per word.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the presence of an output schema, the description need not list return fields. It covers the thread scope, ordering, body exclusion, and pagination limitations, making it fully complete for a read operation with no unsupported scenarios.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description adds meaning to the 'limit' parameter by explaining that raising it is the only way to see more results since there is no offset/cursor. It also reiterates that item_id can be a conversation_id, though the schema already states this. This compensates for the schema's lack of description on 'limit'.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly specifies the tool's function: reading an entire email conversation, ordered newest first. It distinguishes itself from sibling tools by explicitly contrasting with search (which only returns matched messages) and get_email (which returns a single message), making the unique purpose unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly states when to use this tool: 'The only way to read a thread in full' and contrasts it with search and get_email. It also provides follow-up guidance on using get_email for message bodies, giving clear decision-making context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_user_availabilityRead Free/Busy ScheduleA
Read-onlyIdempotent

Read someone's schedule: their busy blocks, WITH MEETING SUBJECTS.

Works for a colleague who has not shared their calendar folder, where get_calendar_events(person=…) needs exactly that sharing and otherwise fails with "Доступ запрещён". Subjects appear when their sharing level exposes details; otherwise subject is null and the busy intervals remain.

For "when can we all meet?" use find_meeting_time.

ParametersJSON Schema
NameRequiredDescriptionDefault
endNowindow end. Default start + 7 days.
startNowindow start, ISO 8601. Default now.
peopleYesaddresses or names to check (an ambiguous name is refused).
intervalNominutes per slot in the merged status string.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already declare readOnlyHint, idempotentHint, and openWorldHint. The description adds valuable behavioral nuance beyond that: subjects appear conditionally based on sharing level, otherwise subject is null but busy intervals remain. It also documents the exact failure mode of get_calendar_events, giving agents practical expectations without contradicting the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and front-loaded: the first sentence gives the core function, the second paragraph explains an important edge case and sibling distinction, and the third gives a pointer to an alternative. No filler words; every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the output schema and annotations, the description is complete enough. It covers the core use case, the key edge case (unshared calendars), the conditional subject behavior, and points to the alternative tool for a different scenario. The output schema handles return value details, so the description does not need to enumerate them.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% for all 4 parameters, each with descriptions and defaults, so the baseline is 3. The description does not add new parameter-level semantics, but it does indirectly mention the output field 'subject' and how sharing level affects it, which relates to the people parameter. Still, the schema carries the main burden.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: 'Read someone's schedule: their busy blocks, WITH MEETING SUBJECTS.' It also distinguishes itself from sibling tools by explicitly mentioning that get_calendar_events requires calendar sharing and that find_meeting_time is for group availability, making the tool's unique purpose clear.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides direct usage guidance: 'Works for a colleague who has not shared their calendar folder' versus get_calendar_events which fails without sharing. It also gives a clear alternative for a different scenario: 'For "when can we all meet?" use find_meeting_time.' This is explicit when-to-use and when-not-to-use guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

reply_emailReply to EmailA
Destructive

Reply to an email, quoting the original. Sends immediately.

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyYesyour reply text — prepended above the quoted original.
item_idYesitem_id of the message being replied to.
body_typeNo"HTML" or "Text".HTML
reply_allNoreply to every recipient, not just the sender.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already flag destructiveHint=true and readOnlyHint=false, so the description adds valuable context: it 'sends immediately' and 'quoting the original,' which warns the user that the action is irreversible and affects the email thread. This goes beyond the structured annotations without contradicting them.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and front-loaded: two sentences that convey the core purpose, the quoting behavior, and the immediate-send consequence. Every word earns its place with no filler or repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the output schema, full annotation coverage, and complete parameter descriptions, the description sufficiently covers the tool's primary behavior. It could mention that replying includes the original text or the immediate-send consequence, which it does. Minor gaps like potential attachments or undo options are not necessary given the structured metadata.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema covers 100% of parameters with descriptions, so the description does not need to repeat them. However, it adds no new parameter-level context beyond what the schema already provides, such as the significance of body_type or reply_all. The baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Reply to an email'), the resource (email), and key behavior (quoting the original, sending immediately). This distinguishes it from sibling tools like send_email and forward_email, which send new emails or forward existing ones.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage (when you want to reply to an existing email) but does not explicitly contrast with alternatives like send_email or forward_email, nor provide exclusions. There is no 'when not to use' guidance, so it falls at the implied-usage level.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

respond_to_eventRespond to InvitationA
Idempotent

Accept, decline or tentatively accept an event invitation.

For a RECURRING event apply_to is required, and it matters: declining the series tells the organizer you are out of every future meeting, and a sent decline cannot be recalled. Nothing is sent until you supply it.

ParametersJSON Schema
NameRequiredDescriptionDefault
commentNotext sent to the organizer along with the answer.
item_idYesitem_id from get_calendar_events.
apply_toNorecurring events only — "this_event" answers for just this one, "whole_series" for the whole series. Required when the event is recurring, ignored for one-off events. Ask the user which they meant rather than picking.
responseYes
notify_organizerNomail the organizer; False records the answer silently.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description reveals critical behavioral traits beyond annotations: apply_to is required for recurring events and has material consequences, a sent decline cannot be recalled, and nothing is sent until the user supplies it. These details add significant context beyond the annotations (readOnlyHint false, idempotentHint true, destructiveHint false) and help the agent understand side effects and timing. No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and front-loaded: the first sentence states the core purpose immediately. The following two sentences provide necessary warnings about recurring events and sent declines without redundancy. Every sentence earns its place, and the structure aids quick comprehension.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has 5 parameters, an output schema, and moderate complexity, the description covers the most critical context (recurring event handling, irreversibility, and the fact that nothing is sent automatically). It does not elaborate on return values or authentication, but the output schema likely handles return details. The only minor gap is that it doesn't explicitly say what happens for one-off events, though the schema implies apply_to is ignored.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema already provides descriptions for all parameters (80% coverage). The description adds valuable nuance for apply_to, explaining that it is required for recurring events and that its choice carries irreversible implications. It also clarifies that nothing is sent until the user supplies the response, which indirectly highlights the notify_organizer parameter's default behavior. This goes beyond a simple restatement of schema fields.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description begins with a specific verb and resource: 'Accept, decline or tentatively accept an event invitation.' It clearly identifies the tool's function as responding to invitations, which distinguishes it from siblings like create_event, update_event, or cancel_event. No ambiguity about what the tool does.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides strong usage guidance for recurring events: apply_to is required, and it tells the agent to ask the user which they meant rather than guessing. It also warns about consequences (declining the series means out of all future meetings) and that a decline cannot be recalled. However, it does not explicitly state when to use this tool versus alternatives like send_email or create_event, so it misses explicit sibling differentiation.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

send_emailSend EmailA
Destructive

Send an email, or save it to Drafts. Sending is immediate — no confirmation step.

ParametersJSON Schema
NameRequiredDescriptionDefault
ccNoextra recipients, same format as `to`.
toYesrecipients — addresses, or names. A name that matches several people or none is refused and nothing is sent; pass an exact address.
bccNoextra recipients, same format as `to`.
bodyYes
draftNosave to Drafts instead of sending. Returns the draft's item_id; the user finishes and sends it from Outlook/OWA.
subjectYes
body_typeNo"HTML" or "Text".HTML
save_copyNokeep a copy in Sent Items. Ignored for a draft.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate a destructive write operation (destructiveHint=true, readOnlyHint=false). The description adds useful behavioral context by stating 'Sending is immediate — no confirmation step,' which informs the agent that the action is irreversible and immediate. It also introduces the draft-saving mode, going beyond the annotation baseline.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences, front-loaded with the main purpose, and contains no filler. Every word adds value, making it perfectly concise and well-structured.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers both primary modes (send and draft) and highlights the immediacy of sending. The schema and output schema handle parameter details and return values, so the description is adequately complete for a tool with complex parameters, though it doesn't mention the recipient-ambiguity risk (which is addressed in the schema).

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema description coverage is 75%, meaning most parameters are already documented. The description adds minimal parameter-specific meaning, only indirectly referencing the `draft` parameter via 'save it to Drafts.' Since coverage is not high enough to warrant a 3 baseline automatically and the description doesn't compensate, a 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the primary action ('Send an email') and the alternative ('save it to Drafts'), with a specific verb and resource. This distinguishes it from sibling tools like reply_email and forward_email, which focus on different email operations.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context for sending a new email or saving a draft, but it does not explicitly mention when to use this tool versus replying or forwarding, nor does it mention any exclusions or alternatives. This is a clear but basic usage description without comparative guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_eventUpdate Calendar EventA
Destructive

Change an existing event and notify attendees. Only the fields you pass change.

For a RECURRING event apply_to is required, and nothing is changed until you supply it.

ParametersJSON Schema
NameRequiredDescriptionDefault
endNonew end time, ISO 8601.
bodyNo
startNonew start time, ISO 8601.
item_idYesitem_id from get_calendar_events.
subjectNo
apply_toNorecurring events only — "this_event" changes just this one, "whole_series" every event in the series. Required when the event is recurring (get_calendar_events marks those with is_recurring), ignored for one-off events. Ask the user which they meant rather than picking.
locationNo
body_typeNo"HTML" or "Text" — applies to `body`.HTML
send_updatesNosend the update to attendees.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already flag destructiveHint and readOnlyHint, but the description adds valuable context beyond them: it notifies attendees, only applies to passed fields (not a full replace), and for recurring events nothing changes until apply_to is supplied. These are meaningful behavioral details.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two short, purposeful sentences. The first states the action and side effect; the second clarifies the recurring-event constraint. No filler or repetition—concise and well-structured.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with recurring-event complexity and attendee notifications, the description covers the essential behaviors: partial update, notification, and the apply_to requirement. An output schema exists, so return details are not necessary. It lacks error/edge-case guidance but is sufficient for most scenarios.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 67% and the schema already documents key parameters like apply_to, body_type, and send_updates in detail. The description's mention of apply_to being required repeats schema info without adding new meaning. It also does not compensate for the three undocumented parameters (body, subject, location).

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Change') and resource ('existing event'), and includes 'notify attendees' which distinguishes it from create/cancel/respond siblings. It also clarifies the partial-update behavior, making the tool's purpose unmistakable.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It clearly implies use for modifying existing events ('Change an existing event') and provides context for recurring events (apply_to required). However, it does not explicitly name alternative tools or state when not to use it, so it falls short of full usage guidance.

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. Dates show when Glama detected each change.

  1. 20 tool updatesv0.1.0
    • First observedcancel_event
    • First observedcheck_auth
    • First observedcreate_event
    • First observeddelete_email
    • First observedfind_emails
    • First observedfind_meeting_time
    • First observedfind_people
    • First observedforward_email
    • First observedget_attachment
    • First observedget_calendar_events
    • First observedget_calendars
    • First observedget_email
    • First observedget_event
    • First observedget_folders
    • First observedget_thread
    • First observedget_user_availability
    • First observedreply_email
    • First observedrespond_to_event
    • First observedsend_email
    • First observedupdate_event

TDQS

A3.9/5.0
Disambiguation4/5

Most tools target a distinct action and resource, but get_folders and get_calendars have slight overlap since both list folders for mail/calendar. The descriptions clarify the distinction, so ambiguity is low.

Naming Consistency5/5

All tool names follow a consistent verb_noun pattern in lowercase snake_case. Verbs like get, find, send, create, and update are used predictably, making the API easy to learn and navigate.

Tool Count3/5

At 20 tools, the server is heavier than the typical 3-15 range. While the dual email/calendar scope justifies the number, it falls into the 'heavy' category and could feel overwhelming for agents.

Completeness2/5

Calendar operations are well-covered with full CRUD and response handling, but the email side has significant gaps: get_folders references move_email, which does not exist, and there is no update or edit operation for emails. This creates dead ends for workflows involving moving or modifying messages.

Maintenance

ActivitySlowing
ResponsivenessSyncing

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    D
    maintenance
    MCP server for any Microsoft Exchange / OWA deployment. Gives LLM agents access to email, calendar, directory search, folders, availability, and meeting analytics via 30 tools.
    30
    7
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    MCP server for sending and managing Microsoft Outlook email via the Microsoft Graph API, including drafts, replies, contacts, and directory search.
    114
    MIT
  • A
    license
    Not graded
    quality
    A
    maintenance
    A local MCP server for on-premises Microsoft Exchange, connecting via EWS and NTLM. It provides mail, template, availability, and calendar workflow tools through stdio, with draft-first safety and Windows Credential Manager integration.
    7
    MIT

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/mainpart/owa-mail-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server