Skip to main content
Glama
nhatho0001

Outlook Email MCP Server

by nhatho0001

Outlook Email MCP Server

MCP Server cho Claude Desktop để đọc và quản lý email Microsoft 365 / Outlook qua Microsoft Graph API.

Tính năng

Tool

Mô tả

auth_login

Bắt đầu đăng nhập — trả về URL và mã xác thực

auth_confirm

Hoàn tất đăng nhập sau khi xác thực trong browser

auth_status

Kiểm tra trạng thái đăng nhập hiện tại

auth_logout

Đăng xuất, xóa token đã lưu

list_emails

Liệt kê email theo folder

read_email

Đọc nội dung đầy đủ một email

search_emails

Tìm kiếm email với nhiều điều kiện

create_draft

Tạo email nháp mới

list_drafts

Liệt kê tất cả email nháp

update_draft

Sửa nội dung email nháp

delete_draft

Xóa email nháp

send_draft

Gửi email nháp đã tạo

send_email

Soạn và gửi email ngay

mark_email_as_read

Đánh dấu email đã đọc / chưa đọc

list_attachments

Liệt kê file đính kèm của một email

read_attachment

Đọc nội dung file đính kèm (text/xlsx/pdf/docx/ảnh)

read_sharepoint_excel

Đọc nội dung file Excel từ SharePoint Online

filter_sharepoint_excel

Đọc file Excel từ SharePoint, chỉ lấy các dòng khớp filter


Related MCP server: outlook-mcp

Yêu cầu

  • Python 3.11 trở lên (nếu dùng uv ở Bước 3 - Cách 1, không cần cài Python trước — uv tự tải)

  • Claude Desktop

  • Tài khoản Microsoft 365 hoặc Outlook.com

  • Quyền truy cập Azure Portal (để đăng ký app)


Hướng dẫn cài đặt

Bước 1: Tải source code

Tải hoặc clone repo này về máy, ví dụ vào thư mục:

C:\Projects\mcp-server\

Ghi nhớ đường dẫn này — bạn sẽ dùng ở Bước 4.


Bước 2: Đăng ký Azure App

Bước này chỉ làm một lần duy nhất. Nếu đã có AZURE_CLIENT_ID, bỏ qua.

  1. Truy cập portal.azure.com và đăng nhập

  2. Tìm "App registrations" → nhấn "New registration"

  3. Điền thông tin:

    • Name: M365 MCP Server (hoặc tên bất kỳ)

    • Supported account types: chọn theo nhu cầu:

      • Accounts in any organizational directory and personal Microsoft accounts — nếu muốn dùng cả tài khoản cá nhân lẫn tổ chức

      • Accounts in this organizational directory only — nếu chỉ dùng trong nội bộ tổ chức

    • Redirect URI: để trống

  4. Nhấn Register

  5. Sau khi tạo xong, copy Application (client) ID — đây là AZURE_CLIENT_ID

Cấp quyền API

  1. Vào tab "API permissions""Add a permission""Microsoft Graph""Delegated permissions"

  2. Tìm và thêm các quyền sau:

    • Mail.Read

    • Mail.ReadWrite

    • Mail.Send

    • User.Read

    • Sites.Read.All — cần cho read_sharepoint_excel / filter_sharepoint_excel

    • Files.Read.All — cần cho read_sharepoint_excel / filter_sharepoint_excel

    • offline_access

  3. Nhấn "Grant admin consent for [tên tổ chức]" nếu bạn là admin (tùy chọn — xem phần Troubleshooting nếu không có quyền này)

Nếu app đã tạo trước đó và chỉ có 4 quyền đầu, quay lại "API permissions" để bổ sung Sites.Read.All/Files.Read.All, nếu không 2 tool SharePoint sẽ báo lỗi 403.

Bật Device Code Flow

  1. Vào tab "Authentication"

  2. Kéo xuống phần "Advanced settings"

  3. Bật "Allow public client flows"Yes

  4. Nhấn Save


Bước 3: Cài đặt dependencies

Mở terminal, điều hướng vào thư mục project:

cd "C:\Projects\mcp-server"

Cách 1: Dùng uv (Khuyên dùng — tự quản lý virtual env)

Cài uv (nếu máy chưa có):

Windows (PowerShell):

powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"

macOS / Linux:

curl -LsSf https://astral.sh/uv/install.sh | sh

Hoặc nếu máy đã có sẵn Python + pip:

pip install uv

Sau khi cài xong, đóng và mở lại terminal để PATH được cập nhật, rồi kiểm tra bằng uv --version. uv tự quản lý phiên bản Python — không cần cài Python 3.11 riêng, uv sync bên dưới sẽ tự tải nếu máy chưa có.

Cài dependencies:

uv sync

Cách 2: Dùng pip thông thường

pip install "mcp[cli]" msal httpx python-dotenv html2text openpyxl pypdf python-docx

Bước 4: Tạo file .env

Trong thư mục project, copy file mẫu:

# Windows
copy .env.example .env

# macOS / Linux
cp .env.example .env

Mở file .env và điền AZURE_CLIENT_ID lấy từ Bước 2:

AZURE_CLIENT_ID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
AZURE_TENANT_ID=common

Giá trị AZURE_TENANT_ID:

Giá trị

Dùng khi

common

Tài khoản cá nhân (Outlook.com) hoặc hỗn hợp

organizations

Chỉ tài khoản tổ chức (work/school)

<tenant-id>

Giới hạn đúng một tổ chức cụ thể


Bước 5: Cấu hình Claude Desktop

Mở file cấu hình Claude Desktop:

  • Windows: %APPDATA%\Claude\claude_desktop_config.json

  • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json

Thêm vào trong mcpServers (thay đường dẫn bằng đường dẫn thực tế trên máy bạn):

Cách 1: Dùng uv (Khuyên dùng)

{
  "mcpServers": {
    "outlook-email": {
      "command": "uv",
      "args": [
        "--directory",
        "C:\\Projects\\mcp-server",
        "run",
        "server.py"
      ]
    }
  }
}

Cách 2: Dùng python trực tiếp

{
  "mcpServers": {
    "outlook-email": {
      "command": "python",
      "args": [
        "C:\\Projects\\mcp-server\\server.py"
      ]
    }
  }
}

Lưu ý Windows: Dùng \\ thay vì \ trong đường dẫn JSON.

Restart Claude Desktop sau khi lưu file config.


Bước 6: Đăng nhập lần đầu

Sau khi restart Claude Desktop:

  1. Mở cuộc trò chuyện mới

  2. Kiểm tra biểu tượng MCP tools xuất hiện (icon công cụ)

  3. Yêu cầu Claude gọi tool auth_login:

    "Hãy đăng nhập vào Outlook email cho tôi"

  4. Claude sẽ trả về URL và mã xác thực ngay trong chat, ví dụ:

    1. Mở trình duyệt và truy cập: https://login.microsoft.com/device
    2. Nhập mã xác thực: ABCD1234
    3. Đăng nhập bằng tài khoản Microsoft của bạn
    4. Sau khi xác thực xong, gọi auth_confirm
  5. Thực hiện theo hướng dẫn trong chat, sau đó yêu cầu Claude gọi auth_confirm:

    "Tôi đã xác thực xong, hãy xác nhận đăng nhập"

  6. Claude thông báo đăng nhập thành công.

Token được lưu tại ~/.outlook-mcp-tokens.json và tự động refresh — có hiệu lực 90 ngày.


Sử dụng

Sau khi đăng nhập, bạn có thể dùng ngôn ngữ tự nhiên:

"Kiểm tra xem tôi đã đăng nhập chưa"
"Liệt kê 10 email mới nhất trong inbox"
"Tìm email từ boss@company.com"
"Tạo email nháp gửi cho colleague@company.com với tiêu đề Meeting tomorrow"
"Gửi email cho client@example.com nội dung cảm ơn hợp tác"
"Đánh dấu email vừa đọc là chưa đọc"

Troubleshooting

"Need admin approval" khi đăng nhập

Tài khoản tổ chức (work/school) yêu cầu admin của tổ chức phải grant consent cho app.

Nếu bạn là admin:

  1. Azure Portal → Enterprise Applications → tìm app → PermissionsGrant admin consent

Nếu bạn không phải admin:

  • Nhờ IT admin của tổ chức vào Azure Portal, tìm app theo tên, và grant consent

  • Hoặc admin nhấn "Have an admin account? Sign in with that account" ngay trên màn hình lỗi

Giới hạn người dùng (tùy chọn cho admin):

  • Azure Portal → Enterprise Applications → tên app → Properties → bật "Assignment required"

  • Sau đó vào Users and groups → chỉ add những người được phép dùng


MCP server không xuất hiện trong Claude Desktop

  • Kiểm tra đường dẫn trong claude_desktop_config.json có đúng không

  • Đảm bảo đã restart Claude Desktop hoàn toàn (thoát hẳn, không chỉ đóng cửa sổ)

  • Chạy thử python server.py trong terminal để kiểm tra lỗi

Lỗi sau khi gọi auth_confirm

  • Đảm bảo bạn đã hoàn thành xác thực trên browser trước khi gọi auth_confirm

  • Mã xác thực hết hạn sau ~15 phút — nếu quá thời gian, gọi lại auth_login để lấy mã mới

Token hết hạn

Token tự động refresh. Nếu bị lỗi xác thực sau 90 ngày, gọi lại auth_login để đăng nhập mới.


Cấu trúc dự án

mcp-server/
├── server.py           # Entry point
├── config.py           # Cấu hình và constants
├── pyproject.toml      # Dependencies
├── .env                # Biến môi trường (KHÔNG commit file này)
├── .env.example        # File mẫu
├── auth/               # Xác thực Microsoft
│   ├── device_flow.py  # MSAL Device Code Flow
│   ├── token_cache.py  # Lưu trữ token
│   ├── tools.py        # MCP tools: login/confirm/status/logout
│   └── __init__.py
├── graph/              # Microsoft Graph API client
│   ├── client.py       # HTTP client, pagination
│   └── __init__.py
├── mail/               # Email operations
│   ├── list_emails.py
│   ├── read_email.py
│   ├── search_emails.py
│   ├── drafts.py       # create/list/update/delete/send draft
│   ├── send_email.py
│   ├── mark_as_read.py
│   ├── attachments.py  # list_attachments, read_attachment
│   ├── folder_utils.py
│   └── __init__.py
├── sharepoint/         # Đọc file Excel từ SharePoint Online
│   ├── read_excel.py
│   ├── filter_excel.py
│   ├── excel_common.py # helper resolve URL / download / parse JSON dùng chung
│   └── __init__.py
└── utils/              # Tiện ích dùng chung
    ├── html_sanitizer.py
    └── formatting.py

Mở rộng

Để thêm tính năng mới (ví dụ Calendar):

  1. Tạo thư mục calendar_tools/ với các file tương tự mail/ (không đặt tên calendar/ — trùng tên module chuẩn của Python, sẽ gây lỗi import)

  2. Viết calendar_tools/__init__.py với hàm register_calendar_tools(mcp)

  3. Thêm vào server.py:

    from calendar_tools import register_calendar_tools
    register_calendar_tools(mcp)
  4. Thêm package vào pyproject.toml[tool.hatch.build.targets.wheel] packages

Không cần thay đổi file nào khác.

Available Tools

17 tools
auth_confirmA

Hoàn tất đăng nhập sau khi bạn đã nhập mã xác thực trong trình duyệt. Gọi tool này sau khi đã hoàn thành bước xác thực trên trang Microsoft.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior3/5

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

No annotations are provided, so the description carries full burden. It does not disclose whether the tool is read-only or mutating, nor its side effects (e.g., session creation). While the tool is simple, additional context about what happens after completion would improve transparency.

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 with no wasted words. Information is front-loaded, clearly stating the action and usage context.

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's simplicity (0 parameters, output schema exists), the description provides essential usage guidance. It could briefly mention the prerequisite (auth_login) but the context is sufficient for an agent.

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 no parameters, and schema coverage is trivially 100%. The description does not need to add parameter details. Baseline score for zero parameters is 4.

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 completes login after entering a verification code in the browser. It uses a specific verb 'complete' and resource 'login', and distinguishes from sibling tools like auth_login (initial step) and auth_logout.

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?

Explicitly specifies when to use: after entering the verification code and completing the authentication step on the Microsoft page. This provides clear context and preconditions, effectively guiding the agent.

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

auth_loginA

Bắt đầu đăng nhập Microsoft 365 qua Device Code Flow. Tool này trả về URL và mã xác thực — mở URL đó trong trình duyệt, nhập mã, sau đó gọi auth_confirm để hoàn tất.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior3/5

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

No annotations provided, so description carries burden. It discloses the tool returns URL and code and requires a follow-up step, but does not mention timeouts or limits.

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 action, 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?

Given no parameters and presence of output schema, description adequately explains purpose and next step, making it complete for this tool.

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?

No parameters; schema coverage is 100%. Description adds no parameter info, but baseline for zero params is 4.

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 clearly states it initiates Microsoft 365 login via Device Code Flow, distinguishing it from siblings like auth_confirm which completes login.

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?

Explicitly instructs to open the returned URL, enter the code, then call auth_confirm. Provides clear sequential usage, though lacks explicit when-not-to-use.

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

auth_logoutA

Đăng xuất — xóa token đã lưu, yêu cầu đăng nhập lại lần sau.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.6/5.0
Behavior3/5

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

With no annotations, the description must disclose behavior. It indicates token deletion and mandatory re-login, but omits details like whether other tokens or sessions are affected, or if the action is reversible.

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

Conciseness4/5

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

The description is a single short sentence that conveys the core action concisely. While efficient, it could benefit from a slightly more structured format (e.g., stating the outcome first).

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

Completeness3/5

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

Given no parameters and the existence of an output schema, the description covers the essential action but lacks context on error scenarios or post-conditions beyond re-login.

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?

No parameters exist, so the description has no additional burden. Baseline score of 4 applies because schema coverage is 100% and no param info is needed.

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 communicates the tool's function: logout by deleting the saved token and requiring re-login. It distinguishes itself from sibling tools like auth_login and auth_status by specifying a distinct action.

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?

No explicit guidance on when to use this tool versus alternatives. The description implies it's for ending a session, but lacks prerequisites, warnings, or comparisons with other auth tools.

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

auth_statusA

Kiểm tra trạng thái đăng nhập Microsoft 365 hiện tại.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.1/5.0
Behavior3/5

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

No annotations are provided. The description only states it checks status, without disclosing side effects, authentication requirements, or rate limits. Adequate given output schema exists.

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?

Single sentence, front-loaded, no wasted words. Perfectly concise for a simple 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?

For a simple status-check tool with an output schema, the description is complete enough. It tells the purpose, and the output schema covers return structure.

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?

No parameters exist, so the description adds no parameter info. Schema coverage is 100% trivially. Baseline 4 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 tool checks current Microsoft 365 login status. The verb 'check' and resource 'login status' are specific, and it distinguishes from siblings like auth_login and auth_logout.

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 to verify login status, but no explicit guidance on when or when not to use it, nor mention of alternatives. Clear context but lacks exclusions.

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

create_draftA

Tạo email nháp mới trong folder Drafts.

Args: to: Địa chỉ email người nhận (nhiều địa chỉ cách nhau bằng dấu phẩy). cc: Địa chỉ CC (tùy chọn). bcc: Địa chỉ BCC (tùy chọn). subject: Tiêu đề email. body: Nội dung email (hỗ trợ plain text hoặc HTML). importance: Độ ưu tiên: low, normal, hoặc high.

ParametersJSON Schema
NameRequiredDescriptionDefault
ccNo
toNo
bccNo
bodyNo
subjectNo
importanceNonormal

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?

No annotations are provided, so the description carries the burden. It correctly states the action (create draft) but does not disclose potential side effects, such as whether the draft is automatically saved or if it replaces an existing draft. It does note that body supports plain text or HTML, which adds some transparency.

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

Conciseness4/5

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

The description is concise and uses a clear bulleted Args format. It front-loads the purpose statement. However, it could be slightly shorter by omitting redundancies (e.g., 'Args:' is clear from context).

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 6 optional parameters and an output schema, the description adequately covers all parameters' usage. It does not mention prerequisites like authentication, but that is implied by sibling auth tools. The description is sufficient for an agent to invoke the tool correctly.

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?

With 0% schema description coverage, the description adds significant value by explaining each parameter's meaning and constraints. For example, it specifies that 'to' accepts multiple addresses separated by commas, and that 'importance' accepts low, normal, or high. This compensates well for the missing schema 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 creates a new draft email in the Drafts folder, using specific verb 'Tạo' (create) and resource 'email nháp mới' (new draft email). This distinguishes it from siblings like update_draft, send_draft, and list_drafts.

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 does not provide any guidance on when to use this tool versus alternatives. It does not mention that after creating a draft, one should use send_draft to send it, nor does it specify when not to use it (e.g., for updating existing drafts).

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

delete_draftA

Xóa vĩnh viễn một email nháp.

Args: message_id: ID của email nháp cần xóa.

ParametersJSON Schema
NameRequiredDescriptionDefault
message_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior3/5

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

With no annotations provided, the description carries the full burden. It states the tool 'permanently deletes' a draft, which clearly indicates a destructive operation. However, it does not disclose potential side effects, authorization requirements, or error conditions.

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 extremely concise with two sentences: one for the main purpose and one for the parameter. No extraneous information is present, and the purpose is front-loaded.

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

Completeness3/5

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

Given the tool's simplicity (1 param, output schema exists), the description covers the essentials. However, it lacks contextual cues like when to delete a draft vs. updating it, and it does not mention that the operation is irreversible. For a 'minimum viable' score, this is adequate but not comprehensive.

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

Parameters5/5

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

The input schema has 0% coverage (no descriptions on properties). The description's 'Args' section compensates fully by explaining 'message_id' as 'ID của email nháp cần xóa' (ID of the draft email to delete). This adds essential meaning beyond the schema's bare type definition.

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 'Xóa vĩnh viễn một email nháp' (permanently delete a draft email), specifying the verb 'delete' and the resource 'draft email'. It distinguishes this tool from siblings like create_draft, update_draft, and send_draft, which handle other operations on drafts.

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, such as when a draft should be deleted rather than updated or sent. No exclusions or prerequisites are mentioned.

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

list_attachmentsA

Liệt kê tất cả file đính kèm của một email.

Args: message_id: ID của email (lấy từ list_emails hoặc search_emails).

ParametersJSON Schema
NameRequiredDescriptionDefault
message_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior2/5

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

The description does not disclose any behavioral traits beyond the basic functionality. With no annotations provided, it should mention if the operation is read-only, requires authentication, or has limitations. The current description is minimal and does not add behavioral 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 extremely concise: one sentence for purpose and one sentence for parameter explanation. It is front-loaded and every sentence serves a purpose, with 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 that an output schema exists (context signals indicate true), the description does not need to explain return values. The parameter documentation is clear. However, it could briefly mention that the output is a list of attachment metadata, but the output schema covers that. Overall, 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?

The description adds meaning to the message_id parameter beyond the schema, indicating it is the email ID from list_emails or search_emails. With 0% schema description coverage, this is valuable context that helps the agent understand how to obtain the required value.

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 all attachments of an email, using the verb 'liệt kê' (list) and specific resource 'file đính kèm' (attachments). It distinguishes from siblings like read_attachment (which likely reads content) and list_emails (which lists emails).

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 specifies that the message_id is obtained from list_emails or search_emails, providing clear context for parameter usage. However, it does not explicitly state when to use this tool vs alternatives like read_attachment, so it lacks explicit when-not guidance.

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

list_draftsB

Liệt kê các email nháp trong folder Drafts.

Args: limit: Số lượng nháp tối đa (1-50).

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.4/5.0
Behavior2/5

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

No annotations are provided, and the description does not disclose any behavioral traits like rate limits, destructive potential, or return format. Minimal transparency beyond the basic action.

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

Conciseness4/5

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

The description is concise, with a brief purpose statement and a separate Args section. It is front-loaded and avoids unnecessary detail.

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

Completeness3/5

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

With an output schema present, return values are covered, but the description lacks information on ordering, pagination, or default behavior. Adequate but not complete.

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 the allowed range (1-50) for the limit parameter, which is not present in the schema. This improves parameter understanding despite schema coverage being 0%.

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 drafts from the Drafts folder, distinguishing it from siblings like list_emails and create_draft.

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?

No guidance on when to use this tool versus alternatives, such as when to use list_emails or search. No exclusions or context provided.

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

list_emailsA

Liệt kê email trong một folder.

Args: folder: Tên folder (inbox, drafts, sent, deleted, junk, archive) hoặc tên tùy chỉnh. limit: Số lượng email tối đa (1-50).

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
folderNoinbox

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.6/5.0
Behavior2/5

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

No annotations exist, so the description must cover behavioral traits. It only states the basic action without disclosing side effects (e.g., marking as read), authentication needs, or pagination behavior. The existence of an output schema is noted but not leveraged in the description.

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 extremely concise: two lines for the main action, followed by a structured args list. Every sentence adds value, and the main purpose is front-loaded.

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

Completeness3/5

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

The description is adequate for a simple tool with non-required parameters and an existing output schema. However, it lacks behavioral transparency and usage guidance, which are gaps given the complexity of the sibling toolset.

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

Parameters5/5

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

Despite 0% schema description coverage, the description fully defines both parameters: folder with examples (inbox, drafts, etc.) and limit with a range (1-50). This adds critical meaning beyond the raw 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 clearly states 'Liệt kê email trong một folder' (List emails in a folder), specifying the resource (emails) and action (list). It distinguishes from siblings like search_emails (search) and read_email (read single) by focusing on listing all emails in a folder.

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?

No guidance is provided on when to use this tool versus alternatives like search_emails or read_email. There is no mention of prerequisites, limitations, or 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.

mark_email_as_readA

Đánh dấu email là đã đọc hoặc chưa đọc.

Args: message_id: ID của email. is_read: True để đánh dấu đã đọc, False để đánh dấu chưa đọc.

ParametersJSON Schema
NameRequiredDescriptionDefault
is_readNo
message_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.6/5.0
Behavior3/5

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

With no annotations, the description carries full burden. It accurately states the action (toggling read status) but lacks details on side effects, such as whether it modifies the email's state permanently or triggers notifications. It is adequate but not thorough.

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

Conciseness4/5

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

The description is concise and structured with an Args section, making it easy to parse. Every sentence is necessary. However, being in Vietnamese may slightly reduce clarity for English-speaking agents, but it is still effective.

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

Completeness3/5

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

For a simple tool with two parameters and an output schema, the description covers the essential behavior and parameter meanings. It does not mention error handling or response format, but the output schema likely covers that. It is complete enough for basic use.

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 schema has 0% description coverage, so the description must add meaning. It explains 'is_read' explicitly (True for read, False for unread), which is helpful. 'message_id' is simply described as 'ID of email', which is sufficient but minimal.

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's function: marking an email as read or unread. The verb 'mark' and resource 'email' are specific, and it distinguishes itself from sibling tools like 'read_email' (which reads content) and 'list_emails' (which lists emails).

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 like 'mark_email_as_unread' (if existed) or other email tools. It does not mention prerequisites or context, leaving the agent without direction for tool selection.

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

read_attachmentA

Đọc và trả về nội dung file đính kèm trong email.

Hỗ trợ: txt, csv, json, html, xml, md (text), xlsx (Excel), pdf (PDF), docx (Word). Ảnh và định dạng khác trả về thông báo.

Args: message_id: ID của email chứa file đính kèm. attachment_id: ID của file đính kèm (lấy từ list_attachments).

ParametersJSON Schema
NameRequiredDescriptionDefault
message_idYes
attachment_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior4/5

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

No annotations provided, so description carries burden. It states the action (read), supported formats, and unsupported behavior. However, it does not mention authentication, rate limits, or handling of large files, which are minor omissions for a read tool.

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

Conciseness4/5

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

The description is concise, structured with a main purpose line and bullet points for parameters. It is efficient but could be slightly more streamlined.

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 has an output schema, the description covers all necessary aspects: purpose, supported formats, parameter meanings, and unsupported behavior. It is complete for an agent to invoke correctly.

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 schema has 0% description coverage, so the description compensates by explaining message_id as email ID and attachment_id as file ID from list_attachments, adding meaningful context 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 clearly states the tool reads and returns attachment content from emails, with specific supported formats, distinguishing it from sibling list_attachments which lists 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 lists supported and unsupported formats, indicating when to use. It implies prerequisites via parameter guidance (attachment_id from list_attachments) but does not explicitly state that list_attachments should be called first.

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

read_emailA

Đọc nội dung đầy đủ của một email theo ID.

Args: message_id: ID của email (lấy từ list_emails hoặc search_emails). mark_as_read: Nếu True, đánh dấu email là đã đọc sau khi xem.

ParametersJSON Schema
NameRequiredDescriptionDefault
message_idYes
mark_as_readNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.6/5.0
Behavior4/5

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

The description reveals the behavioral trait of the mark_as_read parameter, letting the agent know the email can be marked as read after viewing. This adds value beyond the schema, especially since no annotations are provided.

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 very concise, with a single clear sentence for the main purpose and two bullet points for parameters. No wasted words, and the core action is front-loaded.

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 (2 parameters, no enums, has output schema), the description covers all necessary aspects: what it does, how to use parameters, and what the key behavioral option is. It is complete for effective tool selection and invocation.

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

Parameters5/5

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

With 0% schema description coverage, the description fully compensates by explaining that message_id comes from list_emails/search_emails and that mark_as_read controls read status marking. This adds meaningful context to both parameters.

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 (read full content) and resource (email by ID), and it naturally distinguishes from sibling tools like list_emails and search_emails which are list/search operations.

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 guidance that message_id should be obtained from list_emails or search_emails, which is useful. It does not explicitly state when not to use, but the context from sibling tools makes it sufficiently clear.

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

read_sharepoint_excelB

Đọc nội dung file Excel (.xlsx) từ SharePoint Online.

Args: sharepoint_url: URL đầy đủ tới file Excel trên SharePoint. Ví dụ: https://company.sharepoint.com/sites/MySite/Shared Documents/data.xlsx sheet_name: Tên sheet cần đọc. Mặc định đọc sheet đầu tiên. max_rows: Số dòng tối đa trả về (mặc định 100, không tính header).

ParametersJSON Schema
NameRequiredDescriptionDefault
max_rowsNo
sheet_nameNo
sharepoint_urlYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.1/5.0
Behavior2/5

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

No annotations are provided, so the description carries full burden. It only states the action but does not disclose any side effects, authentication requirements, error behavior, or limitations beyond the default max_rows.

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

Conciseness4/5

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

The description is concise with a clear purpose statement followed by parameter details. It is front-loaded and contains no unnecessary information.

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

Completeness3/5

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

Given 3 parameters and an output schema, the description adequately covers input parameters but lacks details on error handling, rate limits, or behavior when files/sheets are missing. Completeness is adequate but not thorough.

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?

With 0% schema description coverage, the description adds meaning by explaining each parameter: sharepoint_url with example, sheet_name with default behavior, and max_rows with default. This compensates well for the schema gap.

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

Purpose4/5

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

The description clearly states it reads Excel files from SharePoint, specifying the file type and source. It distinguishes from sibling tools which are mostly email-related, though it doesn't explicitly differentiate.

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?

No guidance on when to use this tool versus alternatives. No mention of prerequisites or context for usage.

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

search_emailsA

Tìm kiếm email với các điều kiện lọc.

Args: query: Từ khóa tìm kiếm tự do (KQL). Ưu tiên hơn các filter khác. folder: Folder để tìm kiếm. from_address: Lọc theo địa chỉ email người gửi. subject: Lọc theo từ khóa trong tiêu đề. unread_only: Chỉ lấy email chưa đọc. has_attachments: Chỉ lấy email có đính kèm. limit: Số kết quả tối đa (1-50).

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
queryNo
folderNoinbox
subjectNo
unread_onlyNo
from_addressNo
has_attachmentsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.5/5.0
Behavior2/5

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

No annotations are provided, so the description must carry the full burden of behavioral disclosure. It focuses on parameter semantics but omits critical behavior: it does not state that the tool is read-only (no side effects), nor does it mention pagination, ordering, rate limits, or authentication requirements.

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

Conciseness4/5

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

The description is concise, using a bullet-like list of arguments. The opening sentence states the overall purpose efficiently. Minor improvement could be better structural formatting (e.g., grouping related filters).

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

Completeness3/5

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

Given the moderate complexity (7 parameters, all optional) and the presence of an output schema, the description adequately covers filtering conditions. However, it lacks details on search scope (across folders?), KQL syntax specifics, case sensitivity, or date range support, leaving gaps for an agent.

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

Parameters5/5

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

The schema description coverage is 0%, so the description fully compensates. It explains all 7 parameters in Vietnamese, adding rich context: 'query' is a free KQL search with priority over others, 'folder' defaults to inbox, 'limit' ranges 1-50, and each filter's purpose is clearly stated.

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

Purpose4/5

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

The description clearly states 'Tìm kiếm email với các điều kiện lọc' (Search emails with filtering conditions), identifying the tool's purpose. It uses a specific verb (search) and resource (emails), and implicitly distinguishes from siblings like list_emails by highlighting filtering capabilities.

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 notes that the 'query' parameter (KQL) takes priority over other filters, providing some guidance on parameter prioritization. However, it does not explicitly state when to use this tool versus alternatives (e.g., list_emails) or provide exclusions.

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

send_draftB

Gửi một email nháp đã có sẵn.

Args: message_id: ID của email nháp cần gửi.

ParametersJSON Schema
NameRequiredDescriptionDefault
message_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.4/5.0
Behavior2/5

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

No annotations are provided, so the description carries full burden. It does not disclose side effects (e.g., whether draft is deleted after sending), required permissions, or success/failure behavior. This is insufficient for a mutation tool.

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

Conciseness4/5

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

The description is very brief, but includes both a purpose sentence and a parameter list. It is front-loaded with the action. Could be slightly more structured (e.g., separate sections), but overall efficient.

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

Completeness3/5

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

With only one parameter and an output schema (not detailed), the description covers the basic function. However, it omits details on return values, error scenarios, and any dependencies, which are needed for complete context.

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 only parameter, message_id, lacks description in the input schema (0% coverage). The description adds a Vietnamese explanation meaning 'ID of the draft email to send', which clarifies the parameter's role beyond the schema's generic 'Message Id'.

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 sends an existing draft email, using a specific verb (send) and resource (draft). It distinguishes from sibling tools like send_email (sends composed email) and create_draft.

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?

No guidance on when to use this tool versus alternatives like send_email, nor prerequisites (e.g., draft must exist). The description offers no context for appropriate usage.

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

send_emailA

Soạn và gửi email ngay lập tức (không lưu nháp).

Args: to: Địa chỉ email người nhận (nhiều địa chỉ cách nhau bằng dấu phẩy). subject: Tiêu đề email. body: Nội dung email. cc: Địa chỉ CC (tùy chọn). bcc: Địa chỉ BCC (tùy chọn). is_html: True nếu body là HTML, False nếu là plain text. importance: Độ ưu tiên: low, normal, hoặc high.

ParametersJSON Schema
NameRequiredDescriptionDefault
ccNo
toYes
bccNo
bodyYes
is_htmlNo
subjectYes
importanceNonormal

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?

No annotations are provided, so the description must carry the full burden. It reveals the core behavior (immediate send, no draft) but does not disclose other traits like authentication requirements, rate limits, or whether attachments are supported.

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 clear sentence followed by a bullet list of parameters. Every part is useful and well-organized, with 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?

The description covers purpose and all parameters. The existence of an output schema reduces the need to explain return values. However, it could mention potential errors or prerequisites (e.g., authentication) for full completeness.

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 includes a full list of all 7 parameters with Vietnamese explanations, adding meaning beyond the schema's titles and defaults. Schema description coverage is 0%, so the description compensates adequately.

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 composes and sends an email immediately, with the explicit note 'không lưu nháp' (no draft saved), differentiating it from siblings like create_draft and send_draft.

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 for immediate sending without saving drafts, but does not explicitly name alternatives or state when not to use this tool. Siblings like create_draft and send_draft exist, but no comparative guidance is provided.

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

update_draftB

Cập nhật nội dung email nháp đang tồn tại.

Args: message_id: ID của email nháp cần cập nhật. subject: Tiêu đề mới (bỏ qua nếu không muốn thay đổi). body: Nội dung mới (bỏ qua nếu không muốn thay đổi). to: Người nhận mới (bỏ qua nếu không muốn thay đổi). cc: CC mới (bỏ qua nếu không muốn thay đổi). bcc: BCC mới (bỏ qua nếu không muốn thay đổi).

ParametersJSON Schema
NameRequiredDescriptionDefault
ccNo
toNo
bccNo
bodyNo
subjectNo
message_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.2/5.0
Behavior2/5

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

No annotations provided, so description must carry full burden. It lacks details on idempotency, partial update behavior (merge vs replace), authentication requirements, and error handling (e.g., missing draft).

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

Conciseness3/5

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

Description is reasonably concise with clear Args section, but the use of Vietnamese may reduce clarity for non-Vietnamese agents. Could be shortened by removing redundant 'bỏ qua nếu không muốn thay đổi' repetitions.

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

Completeness2/5

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

As a mutation tool with no annotations, description omits return value (output schema exists but not described) and prerequisites (e.g., user must be authenticated, draft must exist). Incomplete context for safe invocation.

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 0%, but description adds meaning for all 5 optional parameters, explaining their purpose and that skipping leaves them unchanged. The required message_id is also explained.

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 clearly states the verb 'Cập nhật' (update) and resource 'email nháp đang tồn tại' (existing draft email). It distinguishes from sibling tools like create_draft and send_draft.

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?

No explicit guidance on when to use this tool versus alternatives like create_draft or edit after sending. No exclusions or prerequisites 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. Dates show when Glama detected each change.

  1. 17 tool updatesv0.1.0
    • First observedauth_confirm
    • First observedauth_login
    • First observedauth_logout
    • First observedauth_status
    • First observedcreate_draft
    • First observeddelete_draft
    • First observedlist_attachments
    • First observedlist_drafts
    • First observedlist_emails
    • First observedmark_email_as_read
    • First observedread_attachment
    • First observedread_email
    • First observedread_sharepoint_excel
    • First observedsearch_emails
    • First observedsend_draft
    • First observedsend_email
    • First observedupdate_draft

TDQS

A3.7/5.0
Disambiguation5/5

Each tool has a clearly distinct purpose: authentication tools are separate from email operations, and email operations cover separate actions (create, list, read, update, delete, send, search). There is no overlap between tools.

Naming Consistency5/5

All tools use snake_case with a consistent verb_noun pattern (e.g., create_draft, list_emails, send_email). The authentication tools follow the auth_ prefix pattern, maintaining consistency within the subset.

Tool Count4/5

17 tools is slightly above the typical well-scoped range but still reasonable for a comprehensive email server. Each tool serves a specific function without redundancy, though the inclusion of read_sharepoint_excel feels a bit out of place.

Completeness3/5

The tool set covers core email workflows (send, draft, read, search, list) but lacks important operations like deleting non-draft emails, replying/forwarding, and moving emails between folders. These gaps could lead to agent failures in common scenarios.

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

  • F
    license
    A
    quality
    D
    maintenance
    A lightweight MCP server for personal Microsoft Outlook/Hotmail accounts, enabling email search, reading, attachment management, and folder operations via Microsoft Graph API with OAuth device-code flow.
    6
    1
    -
  • 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
    A
    quality
    C
    maintenance
    A local stdio MCP server that enables reading, sending, and searching emails, as well as listing calendar events via Microsoft Graph API, using device-code authentication.
    10
    114
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    MCP server providing full control over Outlook.com, Hotmail, Live, or Microsoft 365 email via Microsoft Graph API, enabling reading, searching, sending, and managing messages and folders securely.
    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/nhatho0001/M365-MCP-Server'

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