Skip to main content
Glama

M365 MCP

Powerful MCP server for Microsoft Graph API - a complete AI assistant toolkit for Outlook, Calendar, OneDrive, and Contacts.

Features

  • Email Management: Read, send, reply, manage attachments, organize folders

  • Calendar Intelligence: Create, update, check availability, respond to invitations

  • OneDrive Files: Upload, download, browse with pagination

  • Contacts: Search and list contacts from your address book

  • Multi-Account: Support for multiple Microsoft accounts (personal, work, school)

  • Unified Search: Search across emails, files, events, and people

  • ⚡ High-Performance Caching: AES-256 encrypted cache with 300x performance improvement

  • 🔒 Security & Compliance: Encrypted-at-rest cache designed for GDPR/HIPAA-aligned deployments

Related MCP server: MCP Microsoft Office

Quick Start

📚 See QUICKSTART.md for complete installation and setup guide.

TL;DR

# 1. Install
git clone https://github.com/robin-collins/m365-mcp.git
cd m365-mcp && uv sync

# 2. Configure (use .env.example template)
cp .env.example .env
# Edit .env with your M365_MCP_CLIENT_ID

# 3. Authenticate
uv run authenticate.py

# 4. Run
uv run m365-mcp

Claude Desktop

# Add M365 MCP server (replace with your Azure app ID)
claude mcp add m365-mcp -e M365_MCP_CLIENT_ID=your-app-id-here -- uvx --from git+https://github.com/robin-collins/m365-mcp.git m365-mcp

# Start Claude Desktop
claude

Usage Examples

# Email examples
> read my latest emails with full content
> reply to the email from John saying "I'll review this today"
> send an email with attachment to alice@example.com

# Calendar examples  
> show my calendar for next week
> check if I'm free tomorrow at 2pm
> create a meeting with Bob next Monday at 10am

# File examples
> list files in my OneDrive
> upload this report to OneDrive
> search for "project proposal" across all my files

# Multi-account
> list all my Microsoft accounts
> send email from my work account

Available Tools

Email Tools

  • email_list - List emails with optional body content

  • email_get - Get a specific email with attachments

  • email_create_draft - Create an email draft with attachment support

  • email_send - Send email immediately with CC/BCC and attachments

  • email_reply - Reply while maintaining thread context

  • email_reply_all - Reply to all recipients in a thread

  • email_forward - Forward an email

  • email_update - Update message metadata

  • email_move - Move email between folders

  • email_delete - Delete email

  • email_get_attachment - Download an attachment to a validated local path

  • email_mark_read - Mark email read or unread

  • email_flag - Add or clear follow-up flags

  • email_add_category - Add an Outlook category

  • email_archive - Archive an email

  • search_emails - Search emails by query

Calendar Tools

  • calendar_list_calendars - List calendars

  • calendar_create_calendar - Create a calendar

  • calendar_delete_calendar - Delete a calendar

  • calendar_list_events - List calendar events with details

  • calendar_get_event - Get specific event details

  • calendar_create_event - Create events with location and attendees

  • calendar_update_event - Reschedule or modify events

  • calendar_delete_event - Cancel events

  • calendar_respond_event - Accept, decline, or tentatively accept invitations

  • calendar_forward_event - Forward an event invitation

  • calendar_propose_new_time - Propose a new meeting time

  • calendar_get_free_busy - Get free/busy schedules

  • calendar_check_availability - Check free/busy times for scheduling

  • search_events - Search calendar events

Contact Tools

  • contact_list - List all contacts

  • contact_get - Get specific contact details

  • contact_create - Create a new contact

  • contact_update - Update contact information

  • contact_delete - Delete a contact

  • contact_create_list - Create a contact list

  • contact_add_to_list - Add contacts to a contact list

  • contact_export - Export contacts

  • search_contacts - Search contacts by query

File Tools

  • file_list - Browse OneDrive files and folders

  • file_get - Download file content

  • file_create - Upload files to OneDrive

  • file_update - Update existing file content

  • file_delete - Delete files

  • file_copy - Copy files

  • file_move - Move files

  • file_rename - Rename files

  • file_share - Create sharing links

  • file_download_url - Get a temporary download URL

  • folder_list - List OneDrive folders

  • folder_get - Get folder metadata

  • folder_get_tree - Build a recursive folder tree

  • folder_create - Create folders

  • folder_move - Move folders

  • folder_rename - Rename folders

  • folder_delete - Delete folders

  • search_files - Search files in OneDrive

Email Folder And Rule Tools

  • emailfolders_list - List mail folders

  • emailfolders_get - Get mail folder metadata

  • emailfolders_get_tree - Build a recursive mail folder tree

  • emailfolders_create - Create mail folders

  • emailfolders_rename - Rename mail folders

  • emailfolders_move - Move mail folders

  • emailfolders_delete - Delete mail folders

  • emailfolders_mark_all_as_read - Mark a folder as read

  • emailfolders_empty - Empty a mail folder

  • emailrules_list - List inbox rules

  • emailrules_get - Get a rule

  • emailrules_create - Create a rule

  • emailrules_update - Update a rule

  • emailrules_delete - Delete a rule

  • emailrules_move_top, emailrules_move_bottom, emailrules_move_up, emailrules_move_down - Reorder rules

Utility Tools

  • search_unified - Search across emails, events, files, and contacts

  • account_list - Show authenticated Microsoft accounts

  • account_authenticate - Start authentication for a new Microsoft account

  • account_complete_auth - Complete authentication after entering the device code

  • server_get_version - Return server version metadata

Cache Management Tools

  • cache_get_stats - View cache statistics (size, entries, hit rate)

  • cache_invalidate - Manually invalidate cache entries by pattern

  • cache_task_get_status - Check status of queued cache tasks

  • cache_task_list - List all cache tasks by account or status

  • cache_warming_status - View cache warming/background refresh status

⚡ High-Performance Caching

M365 MCP includes an intelligent caching system that dramatically improves performance by reducing redundant API calls to Microsoft Graph.

Key Features

  • 🔒 AES-256 Encryption: Cached data is encrypted at rest using SQLCipher by default

  • ⚡ 300x Performance Boost: Common operations like folder_get_tree go from 30s → <100ms

  • 🧠 Intelligent TTL: Three-state cache (Fresh/Stale/Expired) with automatic refresh

  • 📦 Automatic Compression: Large entries (≥50KB) automatically compressed (70-80% size reduction)

  • 🔄 Optional Cache Warming: Set M365_MCP_CACHE_WARMING=true to start the background worker, startup warming, and stale-cache refresh queue

  • 🎯 Smart Invalidation: Write operations automatically invalidate related caches

  • 🌐 Multi-Account: Complete isolation between different accounts

  • ✅ Compliance Ready: Encryption and retention controls for regulated deployments

Performance Benchmarks

Operation

Without Cache

With Cache

Speedup

folder_get_tree

30s

<100ms

300x

email_list

2-5s

<50ms

40-100x

file_list

1-3s

<30ms

30-100x

Cache Hit Rate

N/A

>80%

70%+ API call reduction

Cache Configuration

The cache works automatically, but you can control its behavior:

# Use cache (default - recommended)
folder_get_tree(account_id, path="/Documents")

# Force refresh (bypass cache, update with fresh data)
folder_get_tree(account_id, path="/Documents", force_refresh=True)

# Disable cache for this request only
email_list(account_id, folder="inbox", use_cache=False)

Cache Security

  • Encryption: AES-256 encryption via SQLCipher. If SQLCipher is missing while encryption is enabled, startup fails instead of silently using plaintext.

  • Key Storage: System keyring (macOS Keychain, Windows Credential Manager, Linux Secret Service)

  • Fallback: Environment variable M365_MCP_CACHE_KEY for headless servers; if neither keyring nor the env var is available, a generated ephemeral key is used with a warning

  • Plaintext Mode: Only used when cache encryption is explicitly disabled by code, primarily for tests and diagnostics

Cache Management

View cache statistics:

stats = cache_get_stats()
# Returns: total_entries, size_bytes, hit_rate, oldest_entry, etc.

Manually invalidate cache:

# Invalidate all email caches
cache_invalidate("email_*")

# Invalidate specific account's caches
cache_invalidate("email_*", account_id="account-123")

📚 For complete cache documentation, see CLAUDE.md

Manual Setup

1. Azure App Registration

  1. Go to Azure Portal → Microsoft Entra ID → App registrations

  2. New registration → Name: m365-mcp

  3. Supported account types: Personal + Work/School

  4. Authentication → Allow public client flows: Yes

  5. API permissions → Add these delegated permissions:

  • offline_access (required for refresh tokens; the CLI retries against the consumers authority if a personal account flags it as reserved)

  • Mail.ReadWrite

  • Calendars.ReadWrite

  • Files.ReadWrite

  • Contacts.Read

  • People.Read

  • User.Read

  1. Copy Application ID

2. Installation

git clone https://github.com/robin-collins/m365-mcp.git
cd m365-mcp
uv sync

3. Authentication

# Set your Azure app ID
export M365_MCP_CLIENT_ID="your-app-id-here"

# Run authentication script
uv run authenticate.py

# Force-refresh a cached token to verify silent renewal
uv run authenticate.py --re-auth <account-id-or-email>

# Remove an account, its tokens, and its local data cache
uv run authenticate.py --remove <account-id-or-email>

# Follow the prompts to authenticate your Microsoft accounts

4. Claude Desktop Configuration

Add to your Claude Desktop configuration:

macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
Windows: %APPDATA%\Claude\claude_desktop_config.json

{
  "mcpServers": {
    "microsoft": {
      "command": "uvx",
      "args": ["--from", "git+https://github.com/robin-collins/m365-mcp.git", "m365-mcp"],
      "env": {
        "M365_MCP_CLIENT_ID": "your-app-id-here"
      }
    }
  }
}

Or for local development:

{
  "mcpServers": {
    "m365-mcp": {
      "command": "uv",
      "args": ["--directory", "c:\\projects\\m365-mcp", "run", "m365-mcp"],
      "env": {
        "M365_MCP_CLIENT_ID": "your-app-id-here"
      }
    }
  }
}

Transport Modes

M365 MCP supports two transport modes for different use cases:

stdio (Default) - For Desktop Apps

Use for: Claude Desktop, local MCP clients

Security: Inherently secure through process isolation (no authentication required)

# Default mode - no configuration needed
export M365_MCP_CLIENT_ID="your-app-id"
uv run m365-mcp

Streamable HTTP - For Web/API Access

Use for: Web applications, remote access, multi-client scenarios

Security: ⚠️ Requires authentication (bearer token or OAuth)

Protocol: Uses MCP Streamable HTTP (spec 2025-03-26+)

# Generate secure token
export MCP_AUTH_TOKEN=$(openssl rand -hex 32)

# Configure Streamable HTTP with bearer authentication
export M365_MCP_CLIENT_ID="your-app-id"
export MCP_TRANSPORT="http"
export MCP_AUTH_METHOD="bearer"
export MCP_HOST="127.0.0.1"
export MCP_PORT="8000"

# Start server
uv run m365-mcp

Client connection:

from mcp.client.http import http_client

async with http_client(
    "http://localhost:8000/mcp",
    headers={"Authorization": f"Bearer {your_token}"}
) as (read, write):
    # Use the session...

📚 See SECURITY.md for complete security guide and authentication options

Multi-Account Support

Account-scoped tools require an account_id argument. Established public tool signatures keep their historical parameter order for compatibility, so use the tool schema or examples for exact ordering instead of assuming account_id is always first.

# List accounts to get IDs
accounts = account_list()
account_id = accounts[0]["account_id"]

# Use account for operations
email_send(account_id, "user@example.com", "Subject", "Body", confirm=True)
email_list(account_id, limit=10, include_body=True)
calendar_create_event(account_id, "Meeting", "2024-01-15T10:00:00Z", "2024-01-15T11:00:00Z")

Development

# Run tests
uv run pytest tests/ -v

# Type checking
uv run pyright

# Format code
uvx ruff format .

# Lint
uvx ruff check --fix --unsafe-fixes .

Example: AI Assistant Scenarios

Smart Email Management

# Get account ID first
accounts = account_list()
account_id = accounts[0]["account_id"]

# List latest emails with full content
emails = email_list(account_id, limit=10, include_body=True)

# Reply maintaining thread
email_reply(account_id, email_id, "Thanks for your message. I'll review and get back to you.", confirm=True)

# Download attachments locally
email = email_get(email_id, account_id)
for attachment in email["attachments"]:
    email_get_attachment(
        email_id,
        attachment["id"],
        f"C:/Users/you/Downloads/{attachment['name']}",
        account_id,
    )

Intelligent Scheduling

# Get account ID first
accounts = account_list()
account_id = accounts[0]["account_id"]

# Check availability before scheduling
availability = calendar_check_availability(account_id, "2024-01-15T10:00:00Z", "2024-01-15T18:00:00Z", ["colleague@company.com"])

# Create meeting with details
calendar_create_event(
    account_id,
    "Project Review",
    "2024-01-15T14:00:00Z", 
    "2024-01-15T15:00:00Z",
    location="Conference Room A",
    body="Quarterly review of project progress",
    attendees=["colleague@company.com", "manager@company.com"]
)

Security Notes

  • Tokens are cached locally in ~/.m365_mcp_token_cache.json

  • Cache data is encrypted at rest using AES-256 SQLCipher in ~/.m365_mcp_cache.db

  • Encryption keys are loaded from system keyring or M365_MCP_CACHE_KEY; generated non-persistent keys produce a warning

  • SQLCipher is required when cache encryption is enabled; plaintext cache mode is only used when explicitly requested by code

  • Use app-specific passwords if you have 2FA enabled

  • Only request permissions your app actually needs

  • Consider using a dedicated app registration for production

Troubleshooting

  • Authentication fails: Check your CLIENT_ID is correct

  • "Need admin approval": Use M365_MCP_TENANT_ID=consumers for personal accounts

  • Missing permissions: Ensure all required API permissions are granted in Azure

  • Token errors: Delete ~/.m365_mcp_token_cache.json and re-authenticate

  • Cache issues: Delete ~/.m365_mcp_cache.db to reset cache. If the stored key cannot open the database, the cache is recreated automatically.

  • Slow first requests: Normal on a cold cache. Set M365_MCP_CACHE_WARMING=true to enable startup warming and stale-cache background refresh.

License

MIT

Available Tools

85 tools
account_authenticateAuthenticate AccountA

✏️ Authenticate a new Microsoft account using device flow (requires user confirmation recommended)

Initiates device flow authentication for adding a new Microsoft account. Returns authentication instructions with a device code and verification URL.

The user must:

  1. Visit the verification URL

  2. Enter the device code

  3. Sign in with their Microsoft account

  4. Use account_complete_auth to finish the process

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior4/5

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

Annotations indicate readOnlyHint=false and idempotentHint=false. The description adds that it initiates device flow, requires user confirmation, and is not idempotent, providing behavioral context beyond annotations.

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 front-loaded with the purpose and uses structured steps. It is slightly lengthy but well-organized and clear.

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 zero parameters and the presence of an output schema, the description fully covers the tool's function and process, linking to the completion step.

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?

There are zero parameters, so default to baseline 4. The description adds no parameter info, which is unnecessary.

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 it authenticates a Microsoft account using device flow and returns instructions. It distinguishes itself from the sibling tool account_complete_auth, which completes the process.

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 outlines the steps for the user and mentions that account_complete_auth should be used afterward, providing clear context on when to use this tool. However, it does not explicitly state when not to use it or list alternatives.

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

account_complete_authComplete AuthenticationA

✏️ Complete device flow authentication (requires user confirmation recommended)

Completes the authentication process after the user has entered the device code at the verification URL.

Args: flow_cache: The flow data returned from account_authenticate (the _flow_cache field)

Returns: Account information if authentication was successful, or pending status if the user hasn't completed authentication yet.

ParametersJSON Schema
NameRequiredDescriptionDefault
flow_cacheYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior4/5

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

The description adds context beyond annotations: it describes return values (account info or pending status) and the pending nature if user hasn't completed. Given readOnlyHint=false and destructiveHint=false, the description appropriately indicates a mutating but non-destructive operation.

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 with two clear sentences, an emoji for visibility, and labeled Args/Returns sections. No unnecessary information.

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 one simple parameter and an output schema, the description fully covers the tool's purpose, prerequisite, and return possibilities. Complete for this 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?

With 0% schema coverage, the description provides crucial meaning: it explains 'flow_cache' is the flow data returned from account_authenticate (the _flow_cache field). This clarifies the parameter's origin and type.

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 it completes device flow authentication, specifying the verb 'Completes' and the resource 'authentication process'. It distinguishes itself from sibling account_authenticate by referencing the prior step and the flow_cache argument.

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 explains that it is used after the user enters the device code at the verification URL, and that flow_cache comes from account_authenticate. It implies a prerequisite but does not explicitly state when not to use or provide alternative tools.

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

account_listList AccountsA
Read-onlyIdempotent

📖 List all signed-in Microsoft accounts (read-only, safe for unsupervised use)

Returns a list of authenticated Microsoft accounts with their usernames, account IDs, and account types (personal or work/school).

Returns: List of account dictionaries with: - username: Account email/username - account_id: Unique account identifier - account_type: "personal", "work_school", or "unknown"

Example: [ { "username": "user@outlook.com", "account_id": "abc123...", "account_type": "personal" }, { "username": "user@contoso.com", "account_id": "def456...", "account_type": "work_school" } ]

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?

Annotations already declare readOnlyHint and idempotentHint, so the description reinforces these. It adds value by detailing the return structure (username, account_id, account_type) and providing an example.

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 yet fully informative, using clear sections and an example. Every sentence adds value without redundancy.

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 an output schema, the description sufficiently explains the return values and provides a complete example. Annotations cover safety and idempotency.

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 baseline is 4. The description correctly omits parameter details as none exist.

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 action ('List all signed-in Microsoft accounts') and its resource scope, distinguishing it from sibling tools like account_authenticate that handle authentication.

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 indicates it's 'read-only, safe for unsupervised use,' implying low-risk usage. However, it does not explicitly state when not to use it or suggest alternatives.

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

cache_get_statsGet Cache StatisticsA
Read-onlyIdempotent

📖 Get cache statistics and performance metrics (read-only, safe for unsupervised use)

Retrieve comprehensive statistics about the cache system including size, hit rates, entry counts, and performance metrics.

Returns: Dictionary containing cache statistics: - total_entries: Total number of cached entries - total_bytes: Total size of cache in bytes - total_size_mb: Total size in megabytes - size_percentage: Percentage of max cache size used - total_hits: Number of cache hits - hit_rate: None until cache misses are tracked - entries_by_resource_type: Count of entries per resource type - average_entry_size_bytes: Average size per entry - compressed_entries: Number of compressed entries - compression_ratio: Average compression ratio - oldest_entry_age_hours: Age of oldest entry in hours - cleanup_triggered: Whether cleanup threshold has been reached - last_cleanup: Timestamp of last cleanup operation

Example: stats = cache_get_stats() print(f"Cache size: {stats['total_size_mb']:.2f} MB") print(f"Size used: {stats['size_percentage']:.1f}%")

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already provide readOnlyHint=true, destructiveHint=false, idempotentHint=true, and openWorldHint=true. The description adds value by detailing the exact statistics returned, such as hit rates and compression ratios, and reassures 'safe for unsupervised use'. No contradiction.

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 well-structured with a header, safety note, bullet list of return fields, and an example. It is somewhat lengthy but every sentence adds value. Front-loading of key info is good.

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 zero parameters and a likely rich output schema, the description thoroughly explains the return fields and provides an example. It is fully self-contained for an agent to understand the tool's purpose and output.

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?

There are zero parameters, so the description naturally has minimal param info. The schema coverage is 100% (none). The description provides an example usage, adding practical meaning 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 retrieves cache statistics and performance metrics, distinguishing it from sibling tools like 'cache_invalidate' and 'cache_warming_status'. It emphasizes 'read-only, safe for unsupervised use', which is a specific verb+resource combo.

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 marks the tool as safe and read-only, implying it's appropriate for any monitoring context. While it does not provide explicit exclusions or alternatives, the context is clear enough for an agent to decide when to use it.

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

cache_invalidateInvalidate Cache EntriesA
Idempotent

✏️ Invalidate cache entries matching a pattern (requires user confirmation recommended)

Delete cache entries that match the specified pattern. This is useful for forcing fresh data retrieval or clearing stale cache entries.

Args: pattern: Pattern to match cache keys (supports wildcards): - "" matches any characters within a segment - Use "email_list:" to invalidate all email lists - Use "email_list:account@example.com:" for specific account - Use "folder_get_tree:" to invalidate all folder trees account_id: Optional account ID to scope invalidation (None = all accounts). reason: Reason for invalidation (for audit logging).

Returns: Dictionary containing: - entries_deleted: Number of cache entries deleted - pattern: Pattern that was used - account_id: Account ID filter (if specified) - reason: Invalidation reason - timestamp: When invalidation occurred

Examples: # Invalidate all email lists cache_invalidate("email_list:*", reason="email_sent")

# Invalidate specific account's folder tree
cache_invalidate(
    "folder_get_tree:user@example.com:*",
    account_id="user@example.com",
    reason="folder_created"
)

# Invalidate all cache for an account
cache_invalidate("*:user@example.com:*", reason="account_refresh")
ParametersJSON Schema
NameRequiredDescriptionDefault
patternYes
account_idNo
reasonNomanual_invalidation

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior2/5

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

The description mentions deletion of cache entries, implying a destructive action, yet the destructiveHint annotation is false. This is a contradiction. Additionally, while it discloses the return values and pattern matching behavior, it does not discuss performance implications or authentication requirements beyond the optional account_id parameter. The annotation contradiction reduces 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 well-structured with sections (Args, Returns, Examples) and front-loaded with a clear purpose. It is slightly verbose but every sentence adds value. The emoji provides instant recognition. Could be more concise, but overall efficient.

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 exists and is referenced in the description, the description covers all aspects: what the tool does, parameters, return values, and examples. The tool has moderate complexity and the description is complete for effective use.

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 provides extensive details for each parameter: pattern supports wildcards with examples, account_id scoping, and reason default/audit logging. This fully compensates for the lacking schema descriptions and adds significant meaning 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 it invalidates cache entries matching a pattern. It uses specific verbs ('Invalidate', 'Delete') and specifies the resource ('cache entries'). It distinguishes from sibling cache tools like cache_get_stats and cache_warming_status by explicitly being the invalidation tool.

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 explains when to use it: for forcing fresh data retrieval or clearing stale cache entries. It includes examples for common use cases. Although it doesn't explicitly state when not to use it, the context of sibling tools and the note about user confirmation provide sufficient guidance. Lacks explicit exclusion of alternatives.

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

cache_task_get_statusGet Cache Task StatusA
Read-onlyIdempotent

📖 Get status of a background cache task (read-only, safe for unsupervised use)

Retrieve the current status, progress, and result/error information for a specific background cache task.

Args: task_id: The unique identifier for the cache task.

Returns: Dictionary containing task status information: - task_id: Task identifier - status: Current status (queued, running, completed, failed) - operation: Operation type (e.g., folder_get_tree, email_list) - account_id: Associated account - progress: Progress percentage (0-100) - created_at: Task creation timestamp - updated_at: Last update timestamp - result: Operation result (if completed) - error: Error message (if failed) - retry_count: Number of retries attempted

Raises: ValueError: If task_id is not found.

ParametersJSON Schema
NameRequiredDescriptionDefault
task_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already provide readOnlyHint, idempotentHint, etc. The description adds value by detailing the return structure (fields like status, progress, error) and the error case (ValueError for missing task_id), which goes beyond annotations.

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 front-loaded with purpose and uses clear sections (Args, Returns, Raises). It is slightly verbose due to the detailed Returns list, but every sentence adds value. Could be slightly more concise without losing information.

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 simple tool (one required parameter) and the existence of an output schema, the description covers purpose, parameter, return structure, and error handling thoroughly. No gaps are apparent.

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%, so the description must fully explain parameters. It describes task_id as 'the unique identifier for the cache task', adding meaning beyond the schema's simple type definition. The single parameter is well-described.

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 verb 'Get status' and the resource 'background cache task'. It distinguishes from sibling tools like cache_task_list (which lists all tasks) and cache_get_stats (which likely returns aggregate stats) by focusing on a single task's status.

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 notes the tool is 'read-only, safe for unsupervised use' and implies it should be used to check status of a specific background cache task. However, it does not explicitly state when to use alternatives like cache_task_list or when not to use this tool.

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

cache_task_listList Cache TasksA
Read-onlyIdempotent

📖 List background cache tasks (read-only, safe for unsupervised use)

Retrieve a list of background cache tasks, optionally filtered by account and status.

Args: account_id: Optional account ID to filter tasks (None = all accounts). status: Optional status filter (queued, running, completed, failed). limit: Maximum number of tasks to return (default: 50).

Returns: List of task dictionaries, each containing: - task_id: Task identifier - status: Current status - operation: Operation type - account_id: Associated account - priority: Task priority (1=highest, 10=lowest) - created_at: Creation timestamp - updated_at: Last update timestamp - retry_count: Number of retries

Example: # List all tasks for a specific account tasks = cache_task_list(account_id="user@example.com")

# List only failed tasks
failed = cache_task_list(status="failed")

# List recent queued tasks
queued = cache_task_list(status="queued", limit=10)
ParametersJSON Schema
NameRequiredDescriptionDefault
account_idNo
statusNo
limitNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.8/5.0
Behavior5/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, idempotentHint=true, openWorldHint=true. The description adds 'read-only, safe for unsupervised use' and fully documents the return format (list of task dictionaries with fields), providing useful context beyond annotations. 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?

Well-structured with an initial summary line, then Args, Returns, and Examples sections. Every sentence adds value, no fluff or repetition. Front-loaded with key information.

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?

Even with an output schema, the description details return fields. Covers purpose, safety, parameters, output, and examples. Complete for a read-only listing tool.

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?

Schema description coverage is 0%, but the description thoroughly explains each parameter (account_id, status, limit) with purpose, types, and defaults, plus examples. Fully compensates for 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?

Clearly states 'List background cache tasks' with verb and resource, and adds 'read-only, safe for unsupervised use' to distinguish it from mutation tools. Siblings like cache_invalidate are clearly different.

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?

Implies usage by detailing filtering options and providing examples, but does not explicitly compare to alternatives like cache_task_get_status. No '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.

cache_warming_statusGet Cache Warming StatusA
Read-onlyIdempotent

📖 Get cache warming status and progress (read-only, safe for unsupervised use)

Retrieve the current status of the cache warming process, including progress, completion estimates, and statistics.

Returns: Dictionary containing warming status: - is_warming: Whether cache warming is currently active - started_at: When warming started (if active) - completed_at: When warming completed (if finished) - operations_total: Total number of warming operations - operations_completed: Number of completed operations - operations_failed: Number of failed operations - progress_percent: Progress percentage (0-100) - estimated_completion: Estimated completion time - accounts_warmed: Number of accounts warmed - operations_by_type: Breakdown of operations by type - status: Current status message

Example: status = cache_warming_status() if status['is_warming']: print(f"Warming in progress: {status['progress_percent']:.1f}%") else: print("Cache warming complete or not started")

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, destructiveHint, idempotentHint, and openWorldHint as true. The description reinforces that it's read-only and safe, and adds value by detailing the return fields (e.g., is_warming, progress_percent) and providing an example. 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.

Conciseness4/5

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

The description is well-structured with a clear lead sentence, a bulleted list of return fields, and an example. It is not overly long, though the emoji and detailed list could be slightly trimmed. The information is front-loaded and every sentence adds 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?

For a tool with no parameters and existing annotations, the description fully covers the behavior and return format. It lists all expected fields in the response, provides context on when each field is populated (e.g., started_at when active), and includes a usage example. No gaps remain.

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?

There are no parameters, and schema description coverage is 100% (trivially). The description adds meaning beyond the schema by documenting the full return dictionary with field descriptions and an example, which helps the agent understand the output without needing an explicit output schema.

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 'Get cache warming status and progress', specifying the verb (get) and resource (cache warming status). It includes a read-only badge, but does not differentiate from sibling tools like cache_get_stats or cache_task_get_status, which could also provide related status info.

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 safe unsupervised use ('read-only, safe for unsupervised use') which suggests it can be called freely, but it does not explicitly state when to use this tool over alternatives or when not to use it. No exclusions or comparisons to siblings are provided.

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

calendar_check_availabilityCheck Calendar AvailabilityA
Read-onlyIdempotent

📖 Check calendar availability for scheduling (read-only, safe for unsupervised use)

Returns free/busy information for the user and optional attendees. Useful for finding meeting times.

Args: account_id: Microsoft account ID start: Start time in ISO format end: End time in ISO format attendees: Optional email address(es) to check availability

Returns: Schedule information with free/busy slots

Raises: ValidationError: If start/end datetimes or attendee addresses are invalid. ValueError: If the current account email address is unavailable.

ParametersJSON Schema
NameRequiredDescriptionDefault
account_idYes
startYes
endYes
attendeesNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false. The description adds context by repeating 'read-only, safe for unsupervised use,' and details return type (free/busy information) and possible errors (ValidationError, ValueError). This goes beyond 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 concise, well-structured, and front-loaded with the main purpose. Each section (args, returns, raises) is clearly separated, and every sentence adds 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?

Given the tool has 4 parameters and an output schema, the description covers purpose, parameters, return format, and errors. The presence of an output schema means the description does not need to detail the return structure, making it 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?

Despite 0% schema description coverage, the description lists each parameter with a brief explanation (e.g., 'start: Start time in ISO format'). This adds meaning that the schema alone does not provide, compensating for the lack of schema descriptions.

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 the tool checks calendar availability for scheduling and returns free/busy information. It is distinct from siblings like calendar_create_event, but could differentiate from calendar_get_free_busy, which also deals with free/busy data.

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 says 'Useful for finding meeting times,' implying usage context. However, it does not specify when not to use this tool or mention alternatives like calendar_get_free_busy, leaving room for ambiguity.

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

calendar_create_calendarCreate CalendarA

✏️ Create a new calendar (requires user confirmation recommended)

Creates a new calendar in the user's mailbox. Useful for organizing events into separate calendars (work, personal, project-specific, etc.).

Args: account_id: Microsoft account ID name: Name for the new calendar

Returns: Created calendar object with ID and metadata

Raises: ValidationError: If calendar name is empty or invalid.

ParametersJSON Schema
NameRequiredDescriptionDefault
account_idYes
nameYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior4/5

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

Annotations indicate readOnlyHint=false and destructiveHint=false. The description adds a user confirmation recommendation and explicit error handling (ValidationError), providing behavioral context beyond annotations.

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 well-structured with sections for usage, args, returns, and raises, though the emoji and redundant phrasing could be trimmed slightly.

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 (create a calendar), the description covers purpose, parameters, return value, and error conditions. The presence of an output schema reduces the need to detail return structure further.

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, but the description explicitly explains both parameters (account_id and name) in the Args section, adding meaning beyond the bare 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 verb 'creates' and resource 'calendar in the user's mailbox.' Among siblings like calendar_delete_calendar and calendar_list_calendars, it is distinct 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 clear use cases (work, personal, project-specific calendars) but does not explicitly state when not to use or mention alternatives like updating an existing calendar.

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

calendar_create_eventCreate Calendar EventA

✏️ Create a calendar event (requires user confirmation recommended)

Creates a new calendar event with optional attendees and location. Attendees will receive meeting invitations. Addresses are validated, deduplicated, and limited to 500 unique recipients.

Args: account_id: Microsoft account ID subject: Event title start: Start time in ISO format (e.g., "2024-01-15T10:00:00") end: End time in ISO format location: Location name (optional) body: Event description (optional) attendees: Email address(es) of attendees (optional) timezone: Timezone for the event (default: "UTC")

Returns: Created event object with ID

Raises: ValidationError: If datetime values, timezone, or attendee addresses are invalid.

ParametersJSON Schema
NameRequiredDescriptionDefault
account_idYes
subjectYes
startYes
endYes
locationNo
bodyNo
attendeesNo
timezoneNoUTC

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior4/5

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

Annotations provide basic mutation flags (readOnlyHint=false, destructiveHint=false). The description adds valuable behavioral details: attendees receive invitations, addresses are validated/deduplicated/limited to 500, and ValidationError raised for invalid inputs.

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 well-structured with a summary, parameter details, returns, and raises sections. It is front-loaded with the purpose. Minor redundancy (e.g., 'optional' repeated) but overall efficient and clear.

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 complexity (8 parameters, 4 required), the description covers parameter syntax, error conditions, and side effects (attendees invited). The return type is vaguely mentioned but an output schema is noted to exist, so this is acceptable.

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?

Schema description coverage is 0%, so the description carries the full burden. The 'Args' section explains each parameter's meaning (e.g., account_id is Microsoft account ID, start/end in ISO format), adding critical semantic value beyond the schema's type-only definitions.

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 'Create a calendar event' with specific verb and resource. It differentiates from sibling tools like calendar_update_event and calendar_delete_event by its focus on creation.

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 implicitly indicates this tool is for creating events, but lacks explicit guidance on when not to use it or alternative tools. The 'requires user confirmation' note is more about safety than usage context.

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

calendar_delete_calendarDelete CalendarA
DestructiveIdempotent

🔴 Delete a calendar permanently (always require user confirmation)

WARNING: This action permanently deletes the calendar and ALL events contained within it. This action cannot be undone.

Note: The default calendar cannot be deleted.

Args: account_id: Microsoft account ID calendar_id: The calendar ID to delete confirm: Must be True to confirm deletion (prevents accidents)

Returns: Status confirmation

Raises: ValidationError: If confirm is False. ValueError: If attempting to delete the default calendar.

ParametersJSON Schema
NameRequiredDescriptionDefault
account_idYes
calendar_idYes
confirmNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.6/5.0
Behavior4/5

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

Annotations indicate destructiveHint=true and idempotentHint=true. The description adds context: the action is permanent, cannot be undone, and the confirm parameter prevents accidents. Also explains the error when trying to delete the default calendar.

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?

Well-structured with a prominent warning emoji, clear sections for args, returns, and raises. Every sentence adds value, and the warning is front-loaded. No unnecessary 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?

Covers all essential aspects: preconditions (default calendar not deletable), required confirmation, permanent nature, and error cases. The output schema (not shown) is likely sufficient, and the description explains return type and raises. Complete for this destructive operation.

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% description coverage, but the description fully explains each parameter: account_id, calendar_id, and confirm (with its role in preventing accidents). Provides clear 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 clearly states the action: 'Delete a calendar permanently.' It specifies the resource (calendar) and includes a warning about data loss. Distinguishes from sibling tools like calendar_create_calendar and calendar_delete_event by focusing on calendar deletion.

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 notes that the default calendar cannot be deleted and requires user confirmation via the 'confirm' parameter. However, no explicit alternatives are given for cases where deletion is not intended, though siblings provide other calendar operations.

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

calendar_delete_eventDelete Calendar EventA
DestructiveIdempotent

🔴 Delete a calendar event (always require user confirmation)

WARNING: This action permanently deletes the event and cannot be undone. If this is a meeting, attendees will receive cancellation notices.

Args: account_id: Microsoft account ID event_id: The event to delete send_cancellation: Whether to notify attendees (default: True) confirm: Must be True to confirm deletion (prevents accidents)

Returns: Status confirmation

ParametersJSON Schema
NameRequiredDescriptionDefault
account_idYes
event_idYes
send_cancellationNo
confirmNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior5/5

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

Beyond annotations (destructiveHint=true, readOnlyHint=false), the description adds critical behavioral context: always requires user confirmation, permanent deletion, attendee cancellation notices, and need for confirm parameter to be True.

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 efficient and well-structured: opens with a clear action, includes a warning, then lists parameters in a clean args block. No unnecessary sentences.

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 tool has 4 parameters, 2 required, destructive, and an output schema. The description covers purpose, irreversibility, attendee notices, parameter meanings, and return confirmation. Lacks mention of error handling or prerequisites but is sufficient for a delete operation.

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 explains all 4 parameters with purpose and semantics (e.g., account_id as Microsoft account ID, event_id as the event to delete, send_cancellation default true, confirm must be True to prevent accidents).

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 deletes a calendar event, with a permanent irreversible action. This verb+resource combination is distinct from sibling tools like calendar_create_event, calendar_update_event, etc.

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 deleting events and warns about permanence and attendee notifications, but does not explicitly state when to use this tool vs alternatives or provide exclusion criteria.

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

calendar_forward_eventForward Calendar EventA

📧 Forward a calendar event to recipients (always require user confirmation)

WARNING: Meeting invitation will be sent immediately to specified recipients. This action cannot be undone.

Addresses are validated, deduplicated across To/CC, and limited to 500 unique recipients in total.

Args: account_id: Microsoft account ID event_id: The event ID to forward to: Recipient email address(es) cc: CC recipient email address(es) (optional) message: Optional comment/message to include with forward (plain text) confirm: Must be True to confirm sending (prevents accidents)

Returns: Status confirmation

Raises: ValidationError: If recipients are invalid, exceed limits, or confirm is False.

ParametersJSON Schema
NameRequiredDescriptionDefault
account_idYes
event_idYes
toYes
ccNo
messageNo
confirmNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior5/5

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

The description discloses critical behaviors: immediate sending, irreversibility, validation, deduplication, recipient limit of 500, and the need for confirm=True. Annotations (readOnlyHint=false, destructiveHint=false) are consistent and the description adds substantial context beyond 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 concise and well-structured: a header line, a crucial warning, then a list of parameters with explanations. No extraneous information; every sentence adds 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 purpose, usage, parameter details, behavioral warnings, errors, and return type. Given the tool's complexity (6 params, sending action) and the presence of an output schema, the description is complete and self-sufficient.

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 (e.g., 'to: Recipient email address(es)', 'confirm: Must be True to confirm sending'). It also mentions validation and limits. However, it does not detail format for account_id or event_id, missing some depth.

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 'Forward a calendar event to recipients,' clearly identifying the verb and resource. It is distinct from sibling tools like email_forward (email) and calendar_respond_event (response), so an agent can differentiate it.

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 includes important usage instructions: user confirmation required, immediate sending, irreversibility, and recipient limits. It does not explicitly contrast with alternative tools, but the context and warning provide adequate guidance for when to use this tool.

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

calendar_get_eventGet Calendar EventA
Read-onlyIdempotent

📖 Get full event details (read-only, safe for unsupervised use)

Returns complete event information including recurrence patterns and online meeting details.

Args: event_id: The event ID account_id: Microsoft account ID use_cache: Whether to use cache (default: True) force_refresh: Bypass cache and fetch fresh data (default: False)

Returns: Complete event object with all metadata

ParametersJSON Schema
NameRequiredDescriptionDefault
event_idYes
account_idYes
use_cacheNo
force_refreshNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior3/5

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

Annotations already provide readOnlyHint, destructiveHint, idempotentHint, openWorldHint. The description adds 'safe for unsupervised use' and specifies return content (recurrence, meeting details), which is useful but does not contradict 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?

Very concise with clear structure: emoji header, one-sentence purpose, then parameter list. No superfluous information; every sentence adds value.

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?

Covers purpose, parameters, and return content. Output schema exists so return details are not needed. Minor lack of cache behavior nuances, but adequate for a read-only tool.

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 description explicitly lists and explains all four parameters with roles and defaults. Since the input schema lacks descriptions, the description fully compensates (schema coverage 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 'Get full event details (read-only)' and mentions recurrence and online meeting details. It distinguishes from sibling tools like calendar_list_events and calendar_update_event by emphasizing completeness and read-only nature.

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 includes 'safe for unsupervised use' but does not explicitly state when to use this tool versus alternatives like calendar_list_events or calendar_get_free_busy. No when-not-to-use guidance is provided.

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

calendar_get_free_busyGet Free/Busy TimesA
Read-onlyIdempotent

📖 Get simplified free/busy times for attendees (read-only, safe for unsupervised use)

Returns a simplified view of free/busy information for specified attendees. This is similar to calendar_check_availability but focuses on availability view strings rather than detailed schedule information.

Args: account_id: Microsoft account ID attendees: Email address(es) to check availability for start: Start time in ISO format end: End time in ISO format time_interval: Interval in minutes for availability view (default: 30)

Returns: Free/busy information with availability view strings

Raises: ValidationError: If start/end datetimes or attendee addresses are invalid.

ParametersJSON Schema
NameRequiredDescriptionDefault
account_idYes
attendeesYes
startYes
endYes
time_intervalNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.8/5.0
Behavior5/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, and idempotentHint=true. The description reinforces this by stating 'read-only, safe for unsupervised use' and explains the output type ('availability view strings'), adding value beyond the structured 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 concise, starting with a emoji-summarized safety note, then a clear explanation, sibling comparison, and structured Args section. Every sentence adds value without redundancy.

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?

With an output schema present, the description only needs to hint at returns, which it does ('Free/busy information with availability view strings'). It also lists possible exceptions. For a simple read tool with 5 params and rich annotations, it is fully complete.

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?

Schema description coverage is 0%, but the description provides clear explanations for all five parameters in the Args section (e.g., 'ISO format' for start/end, 'default: 30' for time_interval), compensating fully for the bare 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 'Get simplified free/busy times for attendees' with a specific verb ('get'), resource ('free/busy times'), and scope ('for attendees'). It also distinguishes from the sibling tool calendar_check_availability, ensuring no ambiguity.

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 compares itself to calendar_check_availability, noting it 'focuses on availability view strings rather than detailed schedule information,' which guides selection. However, it does not provide explicit when-not-to-use or alternative scenarios beyond that one comparison.

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

calendar_list_calendarsList CalendarsA
Read-onlyIdempotent

📖 List all available calendars (read-only, safe for unsupervised use)

Returns all calendars accessible by the user, including primary calendar and any additional calendars (shared, group, etc.).

Caching: Results are cached for 15 minutes (fresh) / 1 hour (stale). Use force_refresh=True to bypass cache and fetch fresh data.

Args: account_id: Microsoft account ID use_cache: Whether to use cached data if available (default: True) force_refresh: Force refresh from API, bypassing cache (default: False)

Returns: List of calendar objects with metadata. Each calendar includes _cache_status and _cached_at fields.

ParametersJSON Schema
NameRequiredDescriptionDefault
account_idYes
use_cacheNo
force_refreshNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.8/5.0
Behavior5/5

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

The description adds significant behavioral context beyond annotations: caching details (15 min fresh, 1 hour stale), return fields (_cache_status, _cached_at), and safety guarantee. Annotations already declare readOnlyHint=true, which the description reinforces.

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 well-structured with sections (Args, Returns), uses an emoji for quick scanning, and is concise without redundancy. Every sentence adds 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?

Despite the output schema existing but not shown, the description adequately describes the return format (list of calendar objects with metadata, including _cache_status and _cached_at). It covers caching, parameters, and return behavior completely for the tool's complexity.

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 schema description coverage at 0%, the description fully explains all parameters: account_id as Microsoft account ID, use_cache (default True), force_refresh (default False), adding meaning 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 lists all available calendars for the user, using a specific verb ('List') and resource ('calendars'). It is distinct from sibling tools like calendar_create_calendar or calendar_list_events.

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 context about when to use the tool (e.g., read-only, safe) and caching behavior (fresh vs. stale), but does not explicitly state when not to use it or contrast with alternatives beyond the implied domain.

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

calendar_list_eventsList Calendar EventsA
Read-onlyIdempotent

📖 List upcoming calendar events (read-only, safe for unsupervised use)

Returns calendar events from now until the specified number of days ahead.

Caching: Results are cached for 5 minutes (fresh) / 30 minutes (stale). Use force_refresh=True to bypass cache and fetch fresh data.

Args: account_id: Microsoft account ID days_ahead: Number of days ahead to look for events (1-365, default: 7) include_details: Include full event details like attendees and body (default: False) limit: Maximum events to return (1-200, default: 50) use_cache: Whether to use cached data if available (default: True) force_refresh: Force refresh from API, bypassing cache (default: False)

Returns: List of calendar events with metadata. Each event includes _cache_status and _cached_at fields.

ParametersJSON Schema
NameRequiredDescriptionDefault
account_idYes
days_aheadNo
include_detailsNo
limitNo
use_cacheNo
force_refreshNo

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?

Beyond annotations (readOnlyHint, idempotentHint), the description adds caching specifics (5 min fresh, 30 min stale), force_refresh option, and confirms it is safe for unsupervised use. 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.

Conciseness4/5

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

The description is well-structured with sections for caching, parameters, and returns. It is concise without unnecessary words. Slightly verbose due to full parameter listing, but this is justified given 0% schema coverage.

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 complexity (6 parameters, output schema exists), the description is complete. It covers caching, parameter details, safety, and return fields like _cache_status. The output schema covers event properties, so no additional detail needed.

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% description coverage, but the description manually documents all 6 parameters with defaults, ranges (1-365 for days_ahead, 1-200 for limit), and semantics (e.g., include_details for full event details). This fully compensates 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 it lists upcoming calendar events from now until a specified number of days ahead. It uses specific verb-resource ('List Calendar Events') and distinguishes from siblings like search_events or calendar_get_event by focusing on upcoming events from a specific account.

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 context: it is read-only and safe for unsupervised use, and explains caching behavior. However, it does not explicitly state when not to use this tool or mention alternatives like calendar_get_event for single events or calendar_get_free_busy for availability checks.

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

calendar_propose_new_timePropose New Meeting TimeA

✏️ Propose a new time for a meeting (requires user confirmation recommended)

Proposes a new meeting time to the organizer. This is useful when you've been invited to a meeting but the time doesn't work for you.

Note: This only works for meetings where you are an attendee, not the organizer.

Args: account_id: Microsoft account ID event_id: The event ID to propose new time for proposed_start: Proposed start time in ISO format (e.g., "2024-01-15T10:00:00") proposed_end: Proposed end time in ISO format message: Optional message explaining the proposed change

Returns: Status confirmation

Raises: ValidationError: If datetime values are invalid.

ParametersJSON Schema
NameRequiredDescriptionDefault
account_idYes
event_idYes
proposed_startYes
proposed_endYes
messageNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior3/5

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

Annotations indicate write operation and side effects (openWorldHint=true). The description adds 'requires user confirmation recommended' but doesn't detail the process or potential side effects adequately.

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 well-structured with a summary, usage note, and parameter list. It's slightly lengthy but not wasteful. The 'requires user confirmation recommended' could be phrased more concisely.

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 covers basic usage, but given openWorldHint=true and an output schema exists, more details about what happens after proposing (e.g., organizer receives request) would improve completeness.

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 coverage, the description includes detailed Args with examples (ISO date formats) and explains each parameter's purpose, fully compensating for the schema's lack of 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 proposes a new meeting time, specifying it's for attendees only, which distinguishes it from sibling tools like calendar_update_event for organizers.

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 says when to use: when invited but the time doesn't work, and notes the limitation of only working for attendees. It doesn't name alternatives 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.

calendar_respond_eventRespond to Calendar EventA
Idempotent

⚠️ Respond to a calendar event invitation (requires user confirmation recommended)

IMPORTANT: This sends a response to the event organizer.

Valid responses: - "accept" - Accept the invitation - "decline" - Decline the invitation - "tentativelyAccept" - Mark as tentative (Input is case-insensitive; "tentative" is accepted as an alias.)

Args: account_id: Microsoft account ID event_id: The event ID to respond to response: Response type (default: "accept") message: Optional message to the organizer

Returns: Status confirmation

Raises: ValidationError: If the response value or message payload is invalid.

ParametersJSON Schema
NameRequiredDescriptionDefault
account_idYes
event_idYes
responseNoaccept
messageNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior4/5

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

The description adds behavioral context beyond annotations: it recommends user confirmation, states the action sends a response to the organizer, mentions case-insensitivity and alias for 'tentative', and notes potential ValidationError. Annotations indicate idempotentHint=true and readOnlyHint=false, which are consistent with the described behavior.

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 well-structured with clear sections (warning, important note, valid responses, args, returns, raises). It is front-loaded with a warning but includes some redundancy (e.g., default value mentioned in description and schema). Overall, it is appropriately sized for the tool's complexity.

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 the tool's purpose, parameter semantics, expected output (status confirmation), and possible errors. With a relatively simple tool and an output schema available (context indicates exists), the description is sufficiently complete for agent 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?

The input schema has 0% description coverage according to context signals, meaning no parameter descriptions in the schema. The tool description compensates by providing an Args section that explains each parameter, including valid values for 'response' and its case-insensitivity. This adds significant meaning 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 action 'Respond to a calendar event invitation' and identifies the resource as a calendar event invitation. It distinguishes from sibling tools like calendar_create_event or calendar_delete_event by specifying the response action.

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 usage context by listing valid response values ('accept', 'decline', 'tentativelyAccept') and notes that it sends a response to the organizer. However, it does not explicitly state when not to use this tool or suggest alternatives for other operations.

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

calendar_update_eventUpdate Calendar EventA
Idempotent

✏️ Update event properties (requires user confirmation recommended)

Modifies event details like time, location, or attendees. Attendees will receive update notifications.

Allowed update keys: subject, start, end, timezone, location, body, attendees.

Args: event_id: The event ID to update updates: Dictionary with fields to update (subject, start, end, location, body) account_id: Microsoft account ID

Returns: Updated event object

ParametersJSON Schema
NameRequiredDescriptionDefault
event_idYes
updatesYes
account_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.8/5.0
Behavior5/5

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

Annotations indicate mutability and idempotency, but the description adds crucial behaviors: user confirmation is recommended, and attendees receive update notifications. This goes beyond the structured metadata and helps the agent anticipate real-world effects.

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 brief yet covers purpose, usage, parameters, and behavior. It uses a clear structure with an introductory sentence, a bullet list of allowed keys, and an Args section. Every sentence adds value without redundancy.

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 does not need to detail return values. It already covers all necessary aspects: what the tool does, when to use it, what fields to update, and behavioral side effects (user confirmation, notifications). No gaps remain.

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 lacks descriptions for all three parameters (0% coverage). The description compensates thoroughly by listing allowed update keys (subject, start, end, location, body) and providing brief explanations for event_id, updates, and account_id. This makes parameter usage clear.

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 updates an existing calendar event, listing specific properties like time, location, and attendees. This verb+resource combination uniquely identifies the tool among siblings (create, delete, get, list), making 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 Guidelines4/5

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

The description provides context for when to use the tool (to modify event details) and mentions side effects (notifications sent). However, it does not explicitly exclude scenarios like proposing new times or responding to events, though these are distinct operations handled by sibling tools.

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

contact_add_to_listAdd Contact to ListA

✏️ Add a contact to a contact list (requires user confirmation recommended)

Adds an existing contact to a contact folder (list). The contact is copied to the list, so it will exist in both the original location and the list.

Args: account_id: Microsoft account ID contact_id: The contact ID to add list_id: The contact list/folder ID

Returns: Copy of the contact in the new list

Raises: ValueError: If contact or list is not found.

ParametersJSON Schema
NameRequiredDescriptionDefault
account_idYes
contact_idYes
list_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior4/5

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

The description discloses key behavioral traits: the contact is copied (not moved), and it requires user confirmation. Annotations only indicate readOnlyHint=false and openWorldHint=true, so the description adds significant context beyond 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 concise and well-structured, with a purpose statement, behavior details, parameter list, return value, and error information. No unnecessary 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 the tool's simplicity, the description is complete: it explains the operation, all parameters, return type, and possible error. Even with an existing output schema, it provides necessary context.

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 explains each parameter (account_id, contact_id, list_id) with clear meanings. This compensates entirely for the lack of 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 action 'Add a contact to a contact list' and explains that the contact is copied, distinguishing it from creating a new contact or list. It uses a specific verb-resource pair.

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 adding existing contacts to lists but does not explicitly state when to use this tool vs alternatives like contact_update or search_contacts. No exclusions or context for when not to use it are provided.

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

contact_createCreate ContactA

✏️ Create a new contact (requires user confirmation recommended)

Creates a contact with name, email addresses, and phone numbers.

Args: account_id: Microsoft account ID given_name: First name (required) surname: Last name (optional) email_addresses: Email address(es) (optional) phone_numbers: Phone numbers dict with keys: business, home, mobile (optional)

Returns: Created contact object with ID

ParametersJSON Schema
NameRequiredDescriptionDefault
account_idYes
given_nameYes
surnameNo
email_addressesNo
phone_numbersNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.9/5.0
Behavior3/5

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

Annotations already indicate readOnlyHint=false and destructiveHint=false. The description adds 'requires user confirmation recommended' and clarifies it creates data, providing some behavioral context beyond annotations.

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 fairly concise, using an emoji for visual cue and front-loading purpose. The Args section adds value but could be slightly more streamlined.

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 key creation parameters and includes a Returns line. Given the presence of an output schema, it is reasonably complete, though it omits error conditions and permission requirements.

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 schema description coverage at 0%, the description compensates by listing each parameter with clear explanations, including required status and acceptable types (e.g., phone_numbers as dict with specific keys).

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 'Create a new contact' and details the components (name, email, phone). It distinguishes itself from sibling tools like contact_update and contact_delete.

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 when to use the tool (to create a contact) but offers no explicit guidance on when not to use it or mention of alternatives among siblings.

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

contact_create_listCreate Contact ListA

✏️ Create a new contact list (requires user confirmation recommended)

Creates a contact folder (list) for organizing contacts into groups. Useful for creating distribution lists, project teams, or other groupings.

Args: account_id: Microsoft account ID list_name: Name for the contact list/folder

Returns: Created contact folder object with ID

Raises: ValidationError: If list name is empty or invalid.

ParametersJSON Schema
NameRequiredDescriptionDefault
account_idYes
list_nameYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already indicate readOnlyHint=false and destructiveHint=false. The description adds the behavioral trait 'requires user confirmation recommended,' which is beyond what annotations provide. It also clarifies the resource type ('contact folder/list'). No contradiction with annotations. However, it omits details on permissions or rate limits.

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

Conciseness5/5

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

The description is concise and well-structured: it opens with a clear purpose, then provides usage context, parameter descriptions, return information, and error details. Each sentence adds value, and the formatting (Args, Returns, Raises) makes it easy to scan.

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 (2 params, output schema exists), the description is fairly complete. It explains the function, parameters, return object, and error case. It does not explicitly mention prerequisites like authentication, but since sibling tools include account_authenticate, this is likely understood. A small gap is the lack of uniqueness constraints on list_name.

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 fills the gap by providing semantic meaning for both parameters: 'account_id: Microsoft account ID' and 'list_name: Name for the contact list/folder.' This adds necessary context beyond the schema's bare property definitions, though more detail (e.g., allowed formats) could be helpful.

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 contact list (folder) for organizing contacts. It uses a specific verb ('Creates') and resource ('contact list'), and the examples of use cases (distribution lists, project teams) distinguish it from sibling tools like contact_create (which creates individual contacts) and contact_add_to_list (which adds to existing lists).

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 mentions it is 'useful for creating distribution lists, project teams, or other groupings,' giving context for when to use it. However, it does not explicitly state when not to use it or compare it with alternatives like contact_add_to_list for adding contacts to existing lists. The guidance is implied but not sharply differentiated.

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

contact_deleteDelete ContactB
DestructiveIdempotent

🔴 Delete a contact permanently (always require user confirmation)

WARNING: This action permanently deletes the contact and cannot be undone.

Args: contact_id: The contact to delete account_id: Microsoft account ID confirm: Must be True to confirm deletion (prevents accidents)

Returns: Status confirmation

ParametersJSON Schema
NameRequiredDescriptionDefault
contact_idYes
account_idYes
confirmNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.4/5.0
Behavior4/5

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

Beyond the annotations (destructiveHint, readOnlyHint), the description adds critical context: permanent deletion, requirement for user confirmation, and the need to set confirm=True. This is valuable information for safe invocation.

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 short warning and bullet-style argument list. Every sentence adds value, and the structure is easy to parse.

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 covers the action, warning, and parameter meanings. However, it omits details about the output schema (only says 'Status confirmation') and does not mention required parameters explicitly.

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?

With 0% schema description coverage, the description compensates by listing the three parameters and their purposes. However, it lacks details on formats, constraints, or how to obtain values.

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 the tool deletes a contact permanently. It uses a specific verb and resource, distinguishing it from other contact tools like create or update.

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. The description only explains the deletion behavior but does not help an agent decide between similar tools.

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

contact_exportExport ContactA
Read-onlyIdempotent

📖 Export a contact in vCard format (read-only, safe for unsupervised use)

Exports contact information in vCard format for portability and sharing. vCard is a standard format supported by most contact management applications.

Args: account_id: Microsoft account ID contact_id: The contact ID to export format: Export format (currently only "vcard" is supported)

Returns: Dictionary containing the vCard data and metadata

Raises: ValidationError: If format is not supported. ValueError: If contact is not found.

ParametersJSON Schema
NameRequiredDescriptionDefault
account_idYes
contact_idYes
formatNovcard

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, destructiveHint, idempotentHint, and openWorldHint, so the tool is safe. The description adds context about error conditions (ValidationError, ValueError) and the format limitation (only 'vcard' supported), enhancing transparency beyond 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 concise, structured with a summary line, Args, Returns, and Raises sections. It front-loads key information (emoji, read-only tag) and contains no unnecessary 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 that the tool is read-only with comprehensive annotations and an output schema (not shown), the description covers input parameters, error behavior, and output intent. It is complete for its purpose.

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 the description includes an Args section that explains all three parameters: account_id, contact_id, and format (with supported value). This compensates for the missing schema descriptions and meets the baseline of 4 for low 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 clearly states 'Export a contact in vCard format (read-only, safe for unsupervised use)', which is a specific verb-resource combination. It distinguishes from sibling tools like contact_get, contact_list, and contact_update by focusing on export.

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 exporting contacts to vCard and mentions read-only safety, but does not explicitly contrast with sibling tools or provide when-not-to-use guidance. No alternatives are named.

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

contact_getGet ContactA
Read-onlyIdempotent

📖 Get contact details (read-only, safe for unsupervised use)

Returns complete contact information including all fields.

Caching: Results are cached for 30 minutes (fresh) / 4 hours (stale). Use force_refresh=True to bypass cache and fetch fresh data.

Args: contact_id: The contact ID account_id: Microsoft account ID use_cache: Whether to use cached data if available (default: True) force_refresh: Force refresh from API, bypassing cache (default: False)

Returns: Contact details with: - _cache_status: Cache state (fresh/stale/miss) - _cached_at: When data was cached (ISO format)

ParametersJSON Schema
NameRequiredDescriptionDefault
contact_idYes
account_idYes
use_cacheNo
force_refreshNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, destructiveHint, idempotentHint, openWorldHint. The description adds valuable behavioral context: caching details (30 min fresh, 4 hours stale, use_cache, force_refresh) and output fields _cache_status and _cached_at. This goes beyond what annotations provide, though it does not mention error handling or rate limits.

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

Conciseness5/5

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

The description is well-structured with a header, caching paragraph, parameter list, and return format. It uses emojis for visual cues and every sentence adds value. 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 the presence of an output schema (context signal) and rich annotations, the description covers all essential aspects: purpose, caching behavior, parameter semantics, and return fields. It is complete for a read-only get 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?

Schema coverage is 0% (no descriptions in JSON schema). The description explains all four parameters with meaningful labels: contact_id, account_id, use_cache, force_refresh, including defaults and behaviors like 'bypass cache'. This compensates well for the missing schema descriptions, though format details (e.g., contact_id format) are absent.

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 'Get contact details (read-only, safe for unsupervised use)' and 'Returns complete contact information including all fields.' This is a specific verb-resource pair that distinguishes it from sibling tools like contact_list, contact_create, etc.

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 retrieving a single contact's details, with caching options. However, it does not explicitly state when to use this vs alternatives like contact_list or search_contacts, nor does it provide when-not or exclusion criteria.

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

contact_listList ContactsA
Read-onlyIdempotent

📖 List contacts (read-only, safe for unsupervised use)

Returns contacts with names, email addresses, and phone numbers.

Caching: Results are cached for 20 minutes (fresh) / 2 hours (stale). Use force_refresh=True to bypass cache and fetch fresh data.

Args: account_id: Microsoft account ID limit: Maximum contacts to return (1-500, default: 50) use_cache: Whether to use cached data if available (default: True) force_refresh: Force refresh from API, bypassing cache (default: False)

Returns: List of contact objects with metadata. Each contact includes _cache_status and _cached_at fields.

ParametersJSON Schema
NameRequiredDescriptionDefault
account_idYes
limitNo
use_cacheNo
force_refreshNo

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?

Annotations already declare readOnlyHint, destructiveHint, and idempotentHint. The description adds caching behavior (20 min fresh, 2 hours stale) and the force_refresh parameter, which provides additional behavioral context beyond 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 well-structured with an emoji, clear sections for output, caching, arguments, and returns. Every sentence is informative and necessary, with 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 the tool's complexity (4 parameters, many siblings, output schema exists), the description covers safety, caching, parameter details, and return fields. It is sufficiently complete for effective use.

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?

Schema description coverage is 0%, so the description fully compensates by explaining each parameter in detail: account_id, limit (with range), use_cache, and force_refresh. It clarifies defaults and caching logic, adding significant meaning 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's purpose: '📖 List contacts (read-only, safe for unsupervised use)'. It specifies what it returns ('names, email addresses, and phone numbers'), distinguishing it from siblings like search_contacts and contact_get.

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?

While the description indicates the tool is read-only and safe, it does not explicitly guide when to use this tool versus alternatives (e.g., search_contacts for searching, contact_get for a single contact). The caching advice is helpful but does not address usage context.

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

contact_updateUpdate ContactA
Idempotent

✏️ Update contact information (requires user confirmation recommended)

Modifies contact fields like name, email, or phone numbers.

Allowed update keys: givenName, surname, displayName, emailAddresses, businessPhones, homePhones, mobilePhone, jobTitle, companyName, department.

Args: contact_id: The contact ID to update updates: Dictionary with fields to update account_id: Microsoft account ID

Returns: Updated contact object

ParametersJSON Schema
NameRequiredDescriptionDefault
contact_idYes
updatesYes
account_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already provide readOnlyHint, destructiveHint, idempotentHint, and openWorldHint. The description adds behavioral context like requiring user confirmation and listing allowed update keys, but does not detail side effects or partial update 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?

The description is well-structured with a summary, field list, parameter explanations, and return value, all in a concise format 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 allowed fields and return type, but lacks clarification on whether the update is partial or full replacement. Given the output schema exists, this is a minor gap.

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?

Schema description coverage is 0%, but the description lists allowed update keys and explains each parameter (contact_id, updates, account_id) with clear descriptions, adding significant meaning 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 it updates contact information, lists specific modifiable fields, and distinguishes from sibling tools like contact_create, contact_delete, and contact_get.

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 includes a note about user confirmation but lacks explicit guidance on when to use this tool versus alternatives, and does not specify prerequisites or exclusions.

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

email_add_categoryAdd Email CategoryA

✏️ Add categories to an email (requires user confirmation recommended)

Simpler alternative to email_update for managing email categories. This replaces all existing categories with the specified ones.

Args: email_id: The email ID to update account_id: Microsoft account ID categories: Category name(s) to apply (single string or list)

Returns: Updated email object

Raises: ValueError: If email_id is invalid ValidationError: If categories is empty or contains invalid values

ParametersJSON Schema
NameRequiredDescriptionDefault
email_idYes
account_idYes
categoriesYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.6/5.0
Behavior4/5

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

Discloses that the tool 'replaces all existing categories with the specified ones' – a key behavioral trait not captured by annotations. Also lists raised errors (ValueError, ValidationError). Annotations indicate destructiveHint=false, but the replacement behavior could be considered destructive; however, the description is transparent about this.

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?

Front-loaded with emoji and key info. Each sentence serves a purpose: purpose, usage guidance, behavioral warning, args, returns, raises. No redundant text.

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?

Covers all aspects: purpose, behavior, parameters, return value, and error handling. Has output schema, so return details are sufficient. Complexity low, but description is complete.

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 describing each parameter in the Args section: email_id, account_id, and categories, adding context beyond the schema's type definitions.

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?

Clearly states 'Add categories to an email' with a specific verb and resource. Distinguishes itself from sibling 'email_update' by noting it is a 'simpler alternative for managing email categories'.

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?

Provides guidance by recommending use as a simpler alternative to email_update and mentions user confirmation. However, does not explicitly state when not to use or list other alternatives.

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

email_archiveArchive EmailA
Idempotent

✏️ Archive an email (requires user confirmation recommended)

Quick action to move an email to the Archive folder. This is a convenience wrapper around email_move that specifically targets the archive folder.

Args: email_id: The email ID to archive account_id: Microsoft account ID

Returns: Status confirmation with new email ID

Raises: ValueError: If email_id is invalid or archive folder not found

ParametersJSON Schema
NameRequiredDescriptionDefault
email_idYes
account_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior4/5

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

Annotations indicate idempotentHint=true and non-destructive. The description adds that it requires user confirmation (recommended), returns a status confirmation with new email ID, and raises ValueError for invalid email ID or missing archive folder. 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.

Conciseness4/5

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

The description is concise and well-structured with clear sections for Args, Returns, and Raises. Front-loaded with the main purpose.

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 exists and the tool is simple, the description covers the essential behavior and return value. Sibling tools are many, but the differentiation from email_move is clear.

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

Parameters2/5

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

Schema description coverage is 0%, and the description only adds minimal one-line explanations for each parameter (email_id and account_id). More detail would help, but the parameters are simple.

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 (archive an email) and resource (email), and explicitly distinguishes from sibling tool email_move by calling it a convenience wrapper that targets the archive folder.

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 explains it is a quick action for archiving, recommends user confirmation, and notes it's a wrapper around email_move, implying it should be used when archiving vs moving to other folders. However, it does not explicitly 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.

email_create_draftCreate Email DraftA

✏️ Create an email draft (requires user confirmation recommended)

Creates a draft email message that can be edited later before sending. Supports attachments from local file paths.

Args: account_id: Microsoft account ID to: Recipient email address(es) subject: Email subject body: Email body (plain text) cc: CC recipient email address(es) (optional) attachments: Local file path(s) for attachments (optional)

Returns: Created draft message with ID

ParametersJSON Schema
NameRequiredDescriptionDefault
account_idYes
toYes
subjectYes
bodyYes
ccNo
attachmentsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior4/5

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

Annotations indicate a non-read-only, non-destructive write operation. The description adds context: 'requires user confirmation recommended', drafts can be edited, and supports attachments. This goes beyond annotations.

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 well-structured with a purpose sentence, an Args list, and a Returns section. It is concise, though the emoji is minor clutter. Front-loaded with key 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 description covers purpose, parameters, and basic return. An output schema exists for detailed return structure. Missing mentions of authentication or prerequisites, but given sibling tools and annotations, it is fairly complete.

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?

Schema coverage is 0%, so the description must explain parameters. It provides an Args section with brief descriptions for all six parameters (account_id, to, subject, body, cc, attachments), adding value 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 'Creates a draft email message that can be edited later before sending.' It uses the verb 'create' and the resource 'email draft', distinguishing it from siblings like email_send, email_reply, and email_get.

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: creating drafts for later sending, but lacks explicit guidance on when to use this tool versus alternatives like email_send or email_update. It mentions 'requires user confirmation recommended' but does not provide when-not-to-use or alternative tools.

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

email_deleteDelete EmailA
DestructiveIdempotent

🔴 Delete an email permanently (always require user confirmation)

WARNING: This action permanently deletes the email and cannot be undone.

For safety, consider moving items to the deleted items folder first using email_move.

Args: email_id: The email to delete account_id: The account ID confirm: Must be True to confirm deletion (prevents accidents)

Returns: Status confirmation

ParametersJSON Schema
NameRequiredDescriptionDefault
email_idYes
account_idYes
confirmNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior4/5

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

Description adds permanent deletion warning and confirmation requirement beyond annotations. 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?

Extremely concise, front-loaded with purpose, uses warnings and emoji effectively. 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?

Description covers all needed behavioral and usage context for a simple destructive tool with output schema present.

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 three parameters explained with roles and the confirm parameter's required value, compensating for 0% 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?

Clearly states 'Delete an email permanently' with explicit warning. Distinguishes from siblings like email_move and email_archive.

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?

Suggests using email_move as safer alternative. Mentions required user confirmation. Could be more explicit about 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.

email_flagFlag EmailA
Idempotent

✏️ Flag or unflag an email (requires user confirmation recommended)

Simpler alternative to email_update for flagging emails.

Args: email_id: The email ID to update account_id: Microsoft account ID flag_status: Flag status - "notFlagged", "flagged", or "complete" (default: "flagged")

Returns: Updated email object

Raises: ValueError: If email_id is invalid or flag_status is unsupported

ParametersJSON Schema
NameRequiredDescriptionDefault
email_idYes
account_idYes
flag_statusNoflagged

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already indicate mutability (readOnlyHint=false) and safety (destructiveHint=false). The description adds valuable behavioral context like the recommendation for user confirmation, return format note, and potential errors, going beyond 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 extremely concise: one emoji-tagged purpose line, one comparative guidance line, and a clear Args/Returns/Raises block. Every sentence earns its place, 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 simple tool nature and presence of an output schema, the description covers all bases: purpose, parameter semantics, behavior (user confirmation), sibling differentiation, and error handling. No gaps remain.

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 each parameter's purpose, default value, and possible values for flag_status (listed as options). This adds meaning that the raw schema lacks.

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 purpose: 'Flag or unflag an email' with a specific verb and resource. It further distinguishes from sibling 'email_update' by positioning itself as a 'Simpler alternative for flagging emails,' 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 Guidelines4/5

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

The description explicitly directs agents to use this tool for flagging when they would otherwise consider 'email_update,' and recommends user confirmation. It lacks explicit guidance on when not to use it, but the comparison covers key usage context.

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

emailfolders_createCreate Email FolderA

✏️ Create a new mail folder (requires user confirmation recommended)

Creates a new mail folder in the mailbox, either at the root level or as a child of an existing folder.

Args: display_name: Name for the new folder account_id: Microsoft account ID parent_folder_id: Parent folder ID (None = root level)

Returns: Created folder object with id, displayName, and other metadata

Raises: ValueError: If display_name is empty or parent_folder_id is invalid

ParametersJSON Schema
NameRequiredDescriptionDefault
display_nameYes
account_idYes
parent_folder_idNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior4/5

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

Annotations indicate not read-only, destructive, or idempotent. Description adds the behavioral trait of requiring user confirmation and lists possible ValueError, providing context beyond annotations.

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?

Description is well-structured with Args, Returns, Raises sections, and is concise overall. The emoji and recommendation add value without excessive verbosity.

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 presence of output schema, description still provides return and error details. Covers creation scenarios and error conditions, making it complete for a creation 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?

Schema has 0% description coverage, so description compensates by explaining each parameter's meaning and default behavior for parent_folder_id. Also describes return 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 verb 'create' and resource 'mail folder', with additional scope (root level or child of existing folder). This distinguishes it from siblings like rename, delete, etc.

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 mentions 'requires user confirmation recommended' and explains parent_folder_id for root vs child, but does not explicitly state when to use this tool vs alternatives 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.

emailfolders_deleteDelete Email FolderA
Destructive

🔴 Delete a mail folder permanently (always require user confirmation)

WARNING: This action permanently deletes the folder and all its contents (emails and subfolders) and cannot be undone.

Args: folder_id: The folder ID to delete account_id: Microsoft account ID confirm: Must be True to confirm deletion (prevents accidents)

Returns: Status confirmation

Raises: ValueError: If folder_id is invalid or confirm is False

ParametersJSON Schema
NameRequiredDescriptionDefault
folder_idYes
account_idYes
confirmNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior5/5

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

Beyond the annotations (destructiveHint=true, readOnlyHint=false), the description adds critical behavior: 'WARNING: This action permanently deletes the folder and all its contents (emails and subfolders) and cannot be undone.' It also clarifies the confirm parameter requirement, which is not in annotations.

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 structured with a clear warning, parameter list, and returns/raises sections. Each sentence serves a purpose, though the multiple warnings could be slightly condensed without losing clarity.

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 destructive nature (destructiveHint=true) and the output schema presence, the description covers all necessary aspects: purpose, usage warnings, parameter semantics, return values, and error conditions. It leaves no critical gaps for an AI 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?

Despite 0% schema description coverage, the description fully explains each parameter: folder_id (the folder ID), account_id (Microsoft account ID), and confirm (must be True to confirm). It also documents the ValueError for invalid folder_id or false confirm, adding semantic value 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 'Delete a mail folder permanently' and includes a warning about permanent deletion. It distinguishes itself from sibling tools like emailfolders_create, emailfolders_rename, and others by specifying the destructive nature.

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 notes that the action 'always require[s] user confirmation' and warns about permanent deletion. It implicitly guides usage by emphasizing the need for caution, though it does not explicitly list alternatives or 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.

emailfolders_emptyEmpty Email FolderA
Destructive

🔴 Delete all messages in a folder (always require user confirmation)

WARNING: This action permanently deletes all messages in the folder and cannot be undone. The folder itself remains but all messages are permanently deleted.

Args: folder_id: The folder ID to empty account_id: Microsoft account ID confirm: Must be True to confirm deletion (prevents accidents)

Returns: Status confirmation with count of messages deleted

Raises: ValueError: If folder_id is invalid or confirm is False

ParametersJSON Schema
NameRequiredDescriptionDefault
folder_idYes
account_idYes
confirmNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.6/5.0
Behavior4/5

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

Beyond annotations (destructiveHint=true, idempotentHint=false), description adds that deletion is permanent, cannot be undone, and folder remains. 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?

Well-structured with clear sections (purpose, warning, args, returns, raises), uses bold and emoji for emphasis, every sentence is necessary and concise.

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 an output schema exists and the description includes Returns and Raises, it fully covers operation, parameters, behavior, and errors, making it complete.

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?

Schema coverage is 0%, but description fully explains all three parameters: folder_id, account_id, and confirm (clarifying it must be True to prevent accidents, overriding schema default of false).

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 'Delete all messages in a folder' with the verb 'Empty' and resource 'Email Folder', distinguishing it from siblings like 'email_delete' (single email) or 'emailfolders_delete' (delete folder).

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?

Provides explicit warning about permanent deletion, requires user confirmation via 'confirm' parameter, and notes the folder remains. However, does not explicitly compare to alternative tools like 'emailfolders_delete'.

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

emailfolders_getGet Email FolderA
Read-onlyIdempotent

📖 Get detailed information about a specific mail folder (read-only, safe for unsupervised use)

Returns complete folder metadata including counts and hierarchy information.

Args: folder_id: The folder ID to retrieve account_id: Microsoft account ID

Returns: Folder object with full metadata including id, displayName, childFolderCount, unreadItemCount, totalItemCount

ParametersJSON Schema
NameRequiredDescriptionDefault
folder_idYes
account_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, destructiveHint, idempotentHint. The description adds 'read-only, safe for unsupervised use' and specifics about returned fields (counts, hierarchy). This adds some value beyond annotations but not extensive 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 concise, with a clear structure: purpose, safety note, return summary, and args. No unnecessary words, and front-loaded with key information.

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, output schema exists), the description fully explains the purpose, parameters, and return fields. It is complete for the agent to understand how to use it.

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 the description includes a brief explanation for both parameters (folder_id and account_id), giving basic context that the schema lacks. This compensates 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 it retrieves detailed info about a specific folder, with a specific verb and resource. It distinguishes itself from related tools like emailfolders_list and emailfolders_get_tree by focusing on a single folder's metadata.

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: 'read-only, safe for unsupervised use' and mentions the returned data type. It does not explicitly say when not to use or name alternatives, but the context implies its use for getting a single folder's details.

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

emailfolders_get_treeGet Email Folder TreeA
Read-onlyIdempotent

📖 Recursively build a tree of mail folders (read-only, safe for unsupervised use)

Returns a hierarchical tree structure showing all folders and their nested children. Useful for understanding mailbox folder organization.

Args: account_id: Microsoft account ID parent_folder_id: Root folder to start from (None = root) max_depth: Maximum recursion depth to prevent infinite loops (1-25, default: 10) include_hidden: Whether to include hidden folders (default: False)

Returns: Nested tree structure with folders and their children

ParametersJSON Schema
NameRequiredDescriptionDefault
account_idYes
parent_folder_idNo
max_depthNo
include_hiddenNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.8/5.0
Behavior5/5

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

The description explicitly confirms read-only behavior ('safe for unsupervised use'), matching annotations. It adds valuable behavioral context: recursion with depth control (max_depth 1-25), handling of parent folder as root, and hidden folder inclusion. This goes beyond what annotations (readOnlyHint, idempotentHint) convey.

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 well-structured with an emoji for quick scanning, a one-line summary, then clearly labeled Args and Returns sections. Every sentence adds value, with no unnecessary repetition. It is front-loaded with the key purpose and safety note.

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 (not shown but confirmed), the description sufficiently explains what the tool does, its parameters, and the hierarchical return. It addresses safety (read-only), recursion limits, and hidden folder control, making it complete for an AI agent to use correctly.

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 detailing each parameter: account_id, parent_folder_id (None=root), max_depth (1-25, default 10), include_hidden (default False). This adds critical meaning beyond the bare schema types and defaults.

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 verb ('Recursively build'), resource ('tree of mail folders'), and scope ('read-only, safe for unsupervised use'). It effectively distinguishes the tree-building functionality from sibling tools like emailfolders_list (likely flat) and emailfolders_get (single folder).

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 notes the tool is 'useful for understanding mailbox folder organization,' which implies a hierarchical exploration use case. However, it does not explicitly specify when to avoid this tool in favor of alternatives (e.g., emailfolders_list for flat listing or emailfolders_get for a single folder). The guidance is clear but lacks exclusion criteria.

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

emailfolders_listList Email FoldersA
Read-onlyIdempotent

📖 List mail folders from mailbox (read-only, safe for unsupervised use)

Returns root folders or child folders of a specific parent with metadata including unread counts and child folder information.

Args: account_id: Microsoft account ID parent_folder_id: If None, lists root folders. If provided, lists child folders. include_hidden: Whether to include hidden folders (default: False) limit: Maximum number of folders to return (1-250, default: 100)

Returns: List of folder objects with: id, displayName, childFolderCount, unreadItemCount, totalItemCount, parentFolderId, isHidden

ParametersJSON Schema
NameRequiredDescriptionDefault
account_idYes
parent_folder_idNo
include_hiddenNo
limitNo

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?

Annotations already provide readOnlyHint=true, destructiveHint=false, idempotentHint=true, openWorldHint=true. The description adds value by confirming it is 'safe for unsupervised use' and details metadata like unread counts and child folder information, beyond what annotations convey.

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 with a front-loaded purpose indicated by an emoji. It is structured into clear Args and Returns sections, with each sentence adding necessary information. No redundancies.

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?

With 4 parameters, one required, and an output schema available, the description provides complete context: it explains the return structure (list of folder objects with fields) and all parameter behaviors. There are no gaps for safe 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?

The input schema has 0% description coverage, meaning the JSON schema itself lacks parameter descriptions. The description compensates fully by explaining each parameter: account_id as Microsoft account ID, parent_folder_id's null vs provided behavior, include_hidden default, and limit's range and default.

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 mail folders from a mailbox with a read-only safe behavior. It distinguishes itself from siblings like emailfolders_get (detail) and emailfolders_get_tree (hierarchy) by focusing on listing either root or child folders.

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 explains when to use root vs child folder listing via the parent_folder_id parameter. It does not explicitly state when not to use, but sibling names imply alternatives for specific folder details or tree structure.

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

emailfolders_mark_all_as_readMark All Emails in Folder as ReadA
Idempotent

✏️ Mark all messages in a folder as read (requires user confirmation recommended)

Updates all messages in the specified folder to mark them as read. This operation may take time for folders with many messages.

Args: folder_id: The folder ID containing messages to mark as read account_id: Microsoft account ID

Returns: Status confirmation with count of messages updated

Raises: ValueError: If folder_id is invalid

ParametersJSON Schema
NameRequiredDescriptionDefault
folder_idYes
account_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.9/5.0
Behavior4/5

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

The description adds behavioral context beyond annotations: it notes potential slowness for large folders, recommends confirmation, and specifies a ValueError for invalid folder_id. Annotations already indicate idempotent and non-destructive, and the description aligns.

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: a clear one-line summary followed by a short elaboration, then structured Args/Returns/Raises sections. 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 behavior, parameters, return type, and errors. Given the tool's simplicity and the presence of an output schema (though not detailed here), it is fairly complete. Minor omission: no mention of whether the operation is all-or-nothing.

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 has 0% description coverage, but the description's Args section provides meaningful explanations for both parameters: folder_id as the folder to mark and account_id as the Microsoft account. This adds value beyond the raw schema.

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 marks all messages in a folder as read, but does not explicitly differentiate from the sibling email_mark_read tool which works on individual emails. The verb 'mark all' is specific, but lack of direct comparison reduces clarity.

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 mentions that the operation may take time and recommends user confirmation, but provides no direct guidance on when to use this tool versus alternatives like email_mark_read. The usage context is implied but not explicit.

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

emailfolders_moveMove Email FolderA
Idempotent

✏️ Move a mail folder to a different parent (requires user confirmation recommended)

Moves a mail folder to become a child of a different parent folder.

Args: folder_id: The folder ID to move destination_folder_id: The destination parent folder ID account_id: Microsoft account ID

Returns: Updated folder object with new parentFolderId

Raises: ValueError: If folder_id or destination_folder_id is invalid

ParametersJSON Schema
NameRequiredDescriptionDefault
folder_idYes
destination_folder_idYes
account_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior4/5

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

The description adds value beyond annotations by noting user confirmation is recommended and clarifying the move operation's effect. Annotations already indicate non-destructive and idempotent behavior, but the description doesn't contradict 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 concise, front-loaded with a summary, and uses a structured Args list. Every sentence adds value without unnecessary fluff.

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, parameters, return value, and a safety note. It lacks details on permissions, error handling beyond ValueError, or integration with sibling tools like emailfolders_get_tree, but is adequate given the output schema.

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 provides clear, helpful explanations for each parameter (folder_id, destination_folder_id, account_id), significantly adding meaning beyond the schema's type and required attributes.

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 ('Move a mail folder to a different parent') and the resource ('mail folder'), distinguishing it from sibling tools like emailfolders_rename or emailfolders_delete.

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 mentions user confirmation recommendation but provides no explicit guidance on when to use this tool versus alternatives (e.g., emailfolders_delete, emailfolders_empty), nor 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.

emailfolders_renameRename Email FolderA
Idempotent

✏️ Rename a mail folder (requires user confirmation recommended)

Updates the display name of an existing mail folder.

Args: folder_id: The folder ID to rename new_display_name: New name for the folder account_id: Microsoft account ID

Returns: Updated folder object with new displayName

Raises: ValueError: If folder_id is invalid or new_display_name is empty

ParametersJSON Schema
NameRequiredDescriptionDefault
folder_idYes
new_display_nameYes
account_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior4/5

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

The description adds behavioral traits beyond annotations: it warns that user confirmation is recommended and lists error conditions (ValueError for invalid folder_id or empty new_display_name). Annotations indicate idempotentHint=true and destructiveHint=false but lack detail on confirmation or error handling.

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 (4 sentences) and well-structured with sections for Args, Returns, and Raises. The emoji front-loads the action, and every sentence provides essential information without redundancy.

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 rename tool with 3 parameters and existing output schema, the description covers purpose, parameters, return ('Updated folder object with new displayName'), and error cases. It lacks details about authentication requirements beyond the account_id parameter, but overall it is complete enough for an agent to understand and invoke it 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 schema description coverage at 0%, the description compensates by explicitly defining each parameter in the Args section: 'folder_id: The folder ID to rename', 'new_display_name: New name for the folder', 'account_id: Microsoft account ID'. This adds meaning beyond the schema's type-only definitions.

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 ('Rename a mail folder') and the resource ('mail folder'), with a specific verb 'rename' that distinguishes it from sibling tools like emailfolders_create, delete, or move. The title 'Rename Email Folder' reinforces this.

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 does not explicitly state when to use this tool versus alternatives (e.g., emailfolders_move, emailfolders_update). The context of 'renaming' is implied but no comparison or exclusion criteria are provided, leaving the agent to infer usage from the name alone.

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

email_forwardForward EmailA

📧 Forward an email to recipients (always require user confirmation)

WARNING: Email will be forwarded immediately to specified recipients. This action cannot be undone.

Addresses are validated, deduplicated across To/CC, and limited to 500 unique recipients in total.

Args: account_id: Microsoft account ID email_id: The email ID to forward to: Recipient email address(es) cc: CC recipient email address(es) (optional) body: Optional comment/message to include with forward (plain text) confirm: Must be True to confirm sending (prevents accidents)

Returns: Status confirmation

Raises: ValidationError: If recipients are invalid, exceed limits, or confirm is False.

ParametersJSON Schema
NameRequiredDescriptionDefault
account_idYes
email_idYes
toYes
ccNo
bodyNo
confirmNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior5/5

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

The description adds significant behavioral context beyond annotations: forwarding is immediate and irreversible, addresses are validated/deduplicated with a 500 limit, confirm must be true. No contradictions 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.

Conciseness4/5

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

The description is well-structured with sections: emoji line, warning, validation info, Args list, Returns, Raises. It is slightly lengthy but each sentence adds value. Front-loaded with purpose and warning.

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 6 parameters, output schema exists, and no enums, the description covers behavior, validation, parameter requirements, and error conditions comprehensively. Returns are summarized as 'Status confirmation', sufficient since output schema exists.

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 listing all parameters with explanations: account_id (Microsoft account ID), email_id, to/cc (recipients), body (optional plain text), confirm (must be True). Provides meaning beyond parameter names.

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 'Forward an email to recipients', which is a specific verb and resource. It distinguishes itself from sibling tools like email_send (send new email) and email_reply by specifying forwarding an existing email with an optional comment.

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 (forwarding) and includes warnings and constraints, but does not explicitly compare to alternatives like email_send or email_reply. However, the context from sibling tools makes it fairly clear.

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

email_getGet EmailA
Read-onlyIdempotent

📖 Get detailed information about a specific email (read-only, safe for unsupervised use)

Includes full headers, body content, and attachment metadata. Body content is truncated at 50,000 characters by default.

Caching: Results are cached for 15 minutes (fresh) / 1 hour (stale). Use force_refresh=True to bypass cache and fetch fresh data.

Args: email_id: The email ID account_id: The account ID include_body: Whether to include the email body (default: True) body_max_length: Maximum characters for body content (1-500000, default: 50000) include_attachments: Whether to include attachment metadata (default: True) use_cache: Whether to use cached data if available (default: True) force_refresh: Force refresh from API, bypassing cache (default: False)

Returns: Email details with: - _cache_status: Cache state (fresh/stale/miss) - _cached_at: When data was cached (ISO format)

ParametersJSON Schema
NameRequiredDescriptionDefault
email_idYes
account_idYes
include_bodyNo
body_max_lengthNo
include_attachmentsNo
use_cacheNo
force_refreshNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already cover readOnlyHint, destructiveHint, idempotentHint, and openWorldHint. The description adds value by detailing body truncation at 50,000 characters, caching freshness (15 min fresh, 1 hour stale), and the effect of force_refresh. No 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 well-structured, using emojis for visual cues, bullet points for clarity, and front-loading the key purpose. Every sentence adds value without unnecessary verbosity.

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

Completeness5/5

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

Given 7 parameters, presence of output schema, and annotations, the description is thorough. It covers return values including _cache_status and _cached_at, and explains caching behavior, making it 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.

Parameters5/5

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

Schema description coverage is 0%, but the description explains all 7 parameters: email_id, account_id, include_body, body_max_length, include_attachments, use_cache, and force_refresh, including defaults and purpose. This fully compensates for the lack of 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 it retrieves detailed information about a specific email, specifying it's read-only and safe for unsupervised use. It distinguishes itself from sibling tools like email_list and email_get_attachment by focusing on a single email with full details.

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 guidance on caching behavior and when to use force_refresh. It also implies safe usage (read-only, unsupervised). However, it does not explicitly mention when not to use this tool versus alternatives like email_list.

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

email_get_attachmentGet Email AttachmentA
Idempotent

Download an email attachment to a validated local path.

Args: email_id: Microsoft Graph message identifier containing the attachment. attachment_id: Target attachment identifier within the message. save_path: Destination path for the attachment. Validated via ensure_safe_path; existing files are never overwritten. account_id: Microsoft account identifier.

Returns: Attachment metadata, including saved path and content size.

ParametersJSON Schema
NameRequiredDescriptionDefault
email_idYes
attachment_idYes
save_pathYes
account_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior4/5

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

The description discloses safety validation via ensure_safe_path and that existing files are never overwritten. This adds value beyond annotations, which already indicate idempotency and non-destructiveness. Missing error handling details, but sufficient for the tool's simplicity.

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: one sentence purpose, then clear Args and Returns sections. No extraneous information; every sentence adds necessary detail.

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, the description sufficiently covers inputs and key behavior. It lacks error handling descriptions, but for a tool with 4 simple parameters, it is adequately 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?

With 0% schema description coverage, the description elaborates on each parameter, including validation for save_path and the role of email_id and attachment_id. This compensates well, though format constraints (e.g., path requirements) are not specified.

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 downloads an attachment to a validated local path, using specific verbs and resources. It distinguishes itself from sibling tools like 'email_get' which retrieves the message itself, not the attachment.

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 such as 'email_get' or other attachment-related tools. The agent must infer usage from the tool name and description.

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

email_listList EmailsA
Read-onlyIdempotent

📖 List emails from a mailbox folder (read-only, safe for unsupervised use)

Returns recent emails with subject, sender, date, size, and attachment info.

Caching: Results are cached for 2 minutes (fresh) / 10 minutes (stale). Use force_refresh=True to bypass cache and fetch fresh data.

Args: account_id: Microsoft account ID folder: Folder name (inbox, sent, drafts, deleted, junk, archive) folder_id: Direct folder ID - takes precedence over folder name limit: Maximum emails to return (1-200, default: 10) include_body: Whether to include email body content (default: True) use_cache: Whether to use cached data if available (default: True) force_refresh: Force refresh from API, bypassing cache (default: False)

Returns: List of email messages with metadata and optionally body content. Each message includes _cache_status and _cached_at fields.

ParametersJSON Schema
NameRequiredDescriptionDefault
account_idYes
folderNo
folder_idNo
limitNo
include_bodyNo
use_cacheNo
force_refreshNo

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?

Beyond annotations (readOnlyHint, etc.), the description adds caching details (2 min fresh, 10 min stale), return field information, and parameter behavior (force_refresh). 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.

Conciseness4/5

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

The description is well-structured with sections (Returns, Caching, Args) and an emoji for visual cue. It is slightly verbose but each sentence adds value. Front-loading with purpose is effective.

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 7 parameters, output schema presence, and sibling tools, the description covers all aspects: function, parameters, caching, return format, and safety. No gaps remain.

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?

Schema coverage is 0% but the description's Args section thoroughly explains each parameter: account_id, folder (with allowed values), folder_id, limit (with range), include_body, use_cache, force_refresh. This adds meaning far 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 'List emails from a mailbox folder' with a specific verb and resource. It distinguishes from siblings like email_get (single email) and email_send. The emoji and 'read-only' further clarify purpose.

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 indicates this is 'read-only, safe for unsupervised use' and explains caching behavior. However, it does not explicitly contrast with alternatives like search_emails or when not to use it, slightly reducing clarity.

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

email_mark_readMark Email Read/UnreadA
Idempotent

✏️ Mark an email as read or unread (requires user confirmation recommended)

Simpler alternative to email_update for marking emails as read/unread.

Args: email_id: The email ID to update account_id: Microsoft account ID is_read: Whether to mark as read (True) or unread (False) (default: True)

Returns: Updated email object

Raises: ValueError: If email_id is invalid ValidationError: If is_read is not a boolean

ParametersJSON Schema
NameRequiredDescriptionDefault
email_idYes
account_idYes
is_readNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already indicate idempotent, not read-only, not destructive. The description adds behavioral context such as 'requires user confirmation recommended' and the return of an updated email object, providing extra clarity beyond 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 extremely concise, with a single introductory sentence and a structured list of arguments. Every sentence adds value; no fluff.

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 explains the return type (updated email object) and raises ValueError/ValidationError. It does not cover prerequisites like authentication status, but for a simple tool with an output schema, it is largely 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?

Despite the schema having 0% description coverage, the description lists each parameter with clear explanations (e.g., 'The email ID to update', 'Microsoft account ID', 'Whether to mark as read (True) or unread (False)'), effectively compensating for the schema's lack of 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 explicitly states the action 'Mark an email as read or unread' and identifies the resource (email), distinguishing itself from the sibling tool email_update by calling itself a simpler alternative for this specific purpose.

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 guidance by positioning itself as a simpler alternative to email_update for marking read/unread, implying when to use it. It also mentions 'requires user confirmation recommended', but does not exhaustively cover 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.

email_moveMove EmailA
Idempotent

✏️ Move an email to a different folder (requires user confirmation recommended)

Moves the email to the specified folder without deleting it from the source.

Valid folder names: inbox, sent, drafts, deleted, junk, archive.

Args: email_id: The email ID to move destination_folder: Folder name to move to account_id: Microsoft account ID

Returns: Status confirmation with new email ID

ParametersJSON Schema
NameRequiredDescriptionDefault
email_idYes
destination_folderYes
account_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior4/5

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

Adds behavior beyond annotations: notes that it does not delete from source, requires user confirmation, and returns a new email ID. Annotations already indicate non-readonly and idempotent.

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?

Concise and well-structured with a clear title, emoji, short explanation, valid folder list, Args, and Returns.

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?

Complete for a simple move operation given the output schema and annotations; could mention behavior for invalid folders or pre-existing emails.

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 explains all three parameters (email_id, destination_folder, account_id) and lists valid folder names, adding essential meaning.

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 it moves an email to a different folder, distinguishing it from sibling tools like email_delete, email_archive, and emailfolders_move.

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 valid folder names and recommends user confirmation, but does not explicitly compare to alternatives or state 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.

email_replyReply to EmailA

📧 Reply to an email (always require user confirmation)

WARNING: Reply will be sent immediately to the original sender. This action cannot be undone.

Body content is stripped of surrounding whitespace and must not be empty before sending.

Args: account_id: Microsoft account ID email_id: The email ID to reply to body: Reply message body (plain text) confirm: Must be True to confirm sending (prevents accidents)

Returns: Status confirmation

Raises: ValidationError: If the reply body is empty/whitespace or confirm is False.

ParametersJSON Schema
NameRequiredDescriptionDefault
account_idYes
email_idYes
bodyYes
confirmNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior4/5

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

The description discloses critical behaviors: requires user confirmation, sends immediately, cannot be undone, body is whitespace-stripped and validated. This adds value beyond annotations, though auth requirements are omitted.

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 front-loaded with a warning and key constraints. Each sentence serves a purpose, but the args list could be integrated more naturally.

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, the description adequately covers purpose, parameters, behavior, and error conditions. It mentions return status and possible ValidationError, which is sufficient for a straightforward 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?

With 0% schema coverage, the description explicitly lists and explains each parameter (account_id as Microsoft account ID, email_id as email ID, body as plain text, confirm must be True). The explanations are clear and sufficient, though more detail on formats could improve.

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 this tool replies to an email, with specific mention of sending to the original sender. It distinguishes from sibling tools like email_reply_all and email_forward by specifying 'original sender'.

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 when to use this tool (to reply to original sender) but does not explicitly contrast with alternatives like email_reply_all or email_forward. No prerequisites or context for when to avoid are provided.

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

email_reply_allReply All to EmailA

📧 Reply to all recipients of an email (always require user confirmation)

WARNING: Reply will be sent immediately to ALL recipients (original sender, To, and Cc recipients). This action cannot be undone.

Body content is stripped of surrounding whitespace and must not be empty before sending.

Args: account_id: Microsoft account ID email_id: The email ID to reply to body: Reply message body (plain text) confirm: Must be True to confirm sending (prevents accidents)

Returns: Status confirmation

Raises: ValidationError: If the reply body is empty/whitespace or confirm is False.

ParametersJSON Schema
NameRequiredDescriptionDefault
account_idYes
email_idYes
bodyYes
confirmNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior5/5

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

Annotations have destructiveHint=false, but the description explicitly warns that the action cannot be undone and sends immediately. This adds crucial behavioral context beyond annotations, with 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.

Conciseness4/5

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

The description is well-structured with an emoji header, warning, and docstring-style sections. It is informative but slightly verbose; could be more concise.

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 mutation tool with output schema and 4 parameters, the description covers all critical aspects: purpose, usage constraints, parameter semantics, return values, and errors. No gaps remain.

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?

Schema description coverage is 0%, but the description provides full parameter explanations in the Args section, including that 'confirm' must be True and 'body' is stripped of whitespace. This compensates fully.

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 'Reply to all recipients of an email', indicating a specific verb and resource. It implies differentiation from the sibling 'email_reply' by specifying 'all' recipients.

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 includes a warning that reply will be sent immediately to all recipients and cannot be undone, guiding use. It also notes user confirmation is required, but does not explicitly state 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.

emailrules_createCreate Email RuleA

✏️ Create a new inbox message rule to automatically process emails (requires user confirmation recommended)

Rules are executed in priority order (sequence number).

Conditions examples: {"fromAddresses": [{"address": "john@example.com"}]} {"subjectContains": ["urgent", "important"]} {"senderContains": ["@company.com"]} {"hasAttachments": true}

Actions examples: {"moveToFolder": "folder_id"} {"markAsRead": true} {"forwardTo": [{"emailAddress": {"address": "manager@example.com"}}]} {"assignCategories": ["Red category"]} {"delete": true}

Args: account_id: Microsoft account ID display_name: Name for the rule (e.g., "Move work emails to Projects") conditions: Conditions that trigger the rule actions: Actions to perform when conditions match sequence: Rule execution order (lower numbers execute first, default: 1) is_enabled: Whether the rule is active (default: True) exceptions: Optional conditions that prevent rule execution

Returns: Created rule with its ID and full configuration

ParametersJSON Schema
NameRequiredDescriptionDefault
account_idYes
display_nameYes
conditionsYes
actionsYes
sequenceNo
is_enabledNo
exceptionsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior4/5

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

Annotations provide readOnlyHint=false and destructiveHint=false, which the description complements by indicating the tool creates rules (write operation) and recommending user confirmation. It also explains execution order, adding behavioral context beyond annotations. However, it doesn't detail failure modes or side effects.

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 well-structured with sections for purpose, behavior, examples, arguments, and returns. It is front-loaded with the key purpose. While comprehensive, it is slightly longer than necessary; the examples could be more concise.

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 complexity (7 parameters, nested objects, no output schema in structured input), the description is thorough. It explains conditions/actions with examples, covers all parameters, and describes the return value. It is complete enough for an agent to understand and use the tool.

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?

Although the input schema lacks parameter descriptions (coverage 0%), the description compensates with a detailed 'Args' list explaining each parameter, including default values and examples for complex objects like conditions and actions. This adds significant semantic 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 explicitly states the tool creates a new inbox message rule to automatically process emails, using a specific verb and resource. It clearly distinguishes itself from sibling tools like emailrules_update or emailrules_list by focusing on creation.

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 mentions that user confirmation is recommended and explains priority order, but does not specify when to avoid using this tool or provide explicit comparisons to siblings like emailrules_update. It lacks guidance on prerequisites or scenarios where the tool should not be used.

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

emailrules_deleteDelete Email RuleA
DestructiveIdempotent

🔴 Delete a message rule permanently (always require user confirmation)

WARNING: This action permanently deletes the rule and cannot be undone. Emails will no longer be automatically processed by this rule.

Args: rule_id: The message rule ID to delete account_id: Microsoft account ID confirm: Must be True to confirm deletion (prevents accidents)

Returns: Status confirmation

ParametersJSON Schema
NameRequiredDescriptionDefault
rule_idYes
account_idYes
confirmNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior5/5

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

Adds critical behavioral details beyond annotations: requires confirmation (confirm param), permanent deletion, and impact on email processing. Annotations already indicate destructive and idempotent, but description enriches 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?

Well-structured with emoji, warnings, args, returns. Every sentence adds value; no fluff. Efficiently communicates all necessary information.

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 output schema exists, return values need no elaboration. Description covers destructive nature, parameter semantics, and consequences, making it complete for agent selection and 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?

With 0% schema description coverage, description compensates by explaining rule_id, account_id (Microsoft account ID), and confirm (must be True to prevent accidents). Provides meaning beyond type/required.

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?

Clearly states 'Delete a message rule permanently', with a verb and specific resource. Distinguishes from sibling tools like emailrules_create, emailrules_update, etc.

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?

Warns that action requires user confirmation and cannot be undone. While it doesn't explicitly contrast with other tools, the clear purpose and warnings imply appropriate usage.

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

emailrules_getGet Email RuleA
Read-onlyIdempotent

📖 Get details of a specific message rule (read-only, safe for unsupervised use)

Returns complete rule configuration including conditions, actions, and execution order.

Args: rule_id: The message rule ID account_id: Microsoft account ID

Returns: Rule details including conditions, actions, sequence, and enabled status

ParametersJSON Schema
NameRequiredDescriptionDefault
rule_idYes
account_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already provide readOnlyHint, destructiveHint, idempotentHint, openWorldHint. Description adds 'safe for unsupervised use' and details return content (conditions, actions, execution order), which adds value beyond 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?

Concise, well-structured with overview, args, and returns sections. Front-loaded with key read-only hint. No unnecessary 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 two simple required parameters and the presence of an output schema (not shown), the description explains return value comprehensively. No gaps for a retrieval 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?

Schema coverage is 0%, but description includes 'Args' section that briefly describes rule_id as 'The message rule ID' and account_id as 'Microsoft account ID', providing essential context for parameter usage.

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?

Clear verb 'Get' and resource 'message rule' with read-only hint. Distinguished from sibling tools that create, delete, or update rules.

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 states read-only and safe for unsupervised use, providing context for when to use. Could explicitly mention alternative tools for writing, but context is clear from sibling names.

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

emailrules_listList Email RulesB
Read-onlyIdempotent

📖 List all inbox message rules (read-only, safe for unsupervised use)

Message rules automatically process incoming emails based on conditions. Rules are executed in sequence order (1, 2, 3...).

Args: account_id: Microsoft account ID

Returns: List of rules with: id, displayName, sequence, isEnabled, conditions, actions

ParametersJSON Schema
NameRequiredDescriptionDefault
account_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already provide readOnlyHint, destructiveHint, idempotentHint, and openWorldHint. The description adds that rules are executed in sequence order and labels the tool as read-only, but does not disclose any additional behavioral traits like rate limits, authentication requirements, or error handling. It does not contradict annotations.

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 well-structured with sections for Args and Returns, uses an emoji for visual appeal, and every sentence adds value. It is appropriately sized and front-loaded with the core purpose. No unnecessary 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?

For a straightforward list tool with one parameter and an output schema, the description covers the core functionality, parameter, and return fields. It lacks context on obtaining the account_id or error scenarios, but given the tool's simplicity and the presence of annotations and output schema, it is mostly complete.

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?

With 0% schema description coverage, the description compensates by specifying 'account_id: Microsoft account ID' in the Args section. This adds basic meaning but lacks details such as format, source, or constraints. The explanation is minimal but sufficient for a simple string parameter.

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 states 'List all inbox message rules' with a specific verb and resource. It uses emoji and mentions read-only nature, clearly indicating it's a list operation. However, it does not explicitly differentiate from sibling tools like emailrules_get or emailrules_create, though the action is distinct.

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 includes 'safe for unsupervised use' but provides no guidance on when to use this tool versus alternatives such as emailrules_get for a specific rule or emailrules_create for adding rules. No exclusions or context for appropriate use cases.

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

emailrules_move_bottomMove Email Rule to BottomA

✏️ Move a message rule to the bottom of execution order (requires user confirmation recommended)

Rules execute in sequence order. Moving to bottom means it runs after all other rules.

Args: rule_id: The message rule ID to move account_id: Microsoft account ID

Returns: Updated rule with new sequence number

ParametersJSON Schema
NameRequiredDescriptionDefault
rule_idYes
account_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior4/5

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

The description adds nuance beyond annotations, noting that user confirmation is recommended and specifying that the tool returns an updated rule with a new sequence number. This complements the annotations which indicate a non-destructive modification.

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 well-structured, using a brief heading, callout, and separate Args/Returns sections. No unnecessary words, though it could be slightly more organized.

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, parameter semantics, and return value adequately. Given that an output schema exists, the return value description is sufficient. However, it lacks information on error handling, prerequisites, or rate limits, which is acceptable 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?

Given the 0% schema description coverage, the description compensates by providing brief but clear descriptions for both parameters: rule_id is the message rule ID to move, account_id is the Microsoft account ID. This gives agents basic understanding of each parameter.

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 that the tool moves a message rule to the bottom of execution order, using the verb 'move' and resource 'email rule'. This distinguishes it from sibling tools like move_down, move_top, and move_up, which move rules in different ways.

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 explains that rules execute in sequence order and that moving to bottom means the rule runs after all others. It provides clear context for when to use the tool, though it does not explicitly mention when not to use it or compare with alternatives.

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

emailrules_move_downMove Email Rule DownA

✏️ Move a message rule down one position in execution order (requires user confirmation recommended)

Decreases the rule's priority by moving it one position lower in the execution order. Rules at the bottom cannot be moved down further.

Args: rule_id: The message rule ID to move account_id: Microsoft account ID

Returns: Updated rule with new sequence number

ParametersJSON Schema
NameRequiredDescriptionDefault
rule_idYes
account_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior4/5

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

Annotations (readOnlyHint=false, destructiveHint=false) indicate mutation; the description adds that it moves the rule down one position, cannot be moved if at the bottom, and requires user confirmation. No contradictions, and adds useful behavioral context beyond 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 concise, using an emoji-title, a short paragraph, and clearly labelled args and returns. No unnecessary words, front-loaded with key information.

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 move operation, the description covers purpose, constraints, required parameters, and return type. With an output schema present, the return description ('Updated rule with new sequence number') is sufficient.

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 provides brief but clear parameter meanings ('The message rule ID to move' and 'Microsoft account ID'). This is adequate but could include format or source 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 states the action: 'Move a message rule down one position in execution order' and 'Decreases the rule's priority.' It specifies the resource (message rule) and effect, and distinguishes from siblings like emailrules_move_up and emailrules_move_bottom.

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 mentions a constraint ('Rules at the bottom cannot be moved down further') and notes that user confirmation is recommended, but lacks explicit guidance on when to use this vs. alternatives like emailrules_move_up or emailrules_move_bottom. Only implied usage.

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

emailrules_move_topMove Email Rule to TopA

✏️ Move a message rule to the top of execution order (requires user confirmation recommended)

Rules execute in sequence order. Moving to top means it runs before all other rules. Sets the rule's sequence number to 1.

Args: rule_id: The message rule ID to move account_id: Microsoft account ID

Returns: Updated rule with new sequence number

ParametersJSON Schema
NameRequiredDescriptionDefault
rule_idYes
account_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior4/5

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

The description adds behavioral details beyond annotations: explains the effect on execution order and sequence number, and notes user confirmation. 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?

Extremely concise: two-line summary plus structured bullet points for args and returns. No superfluous words; every sentence adds 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?

Covers the action, parameters, return value (updated rule), and context (execution order, user confirmation). With an output schema present, the description suffices for complete understanding.

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?

Despite 0% schema coverage, the description explicitly defines both parameters (rule_id as the message rule ID, account_id as Microsoft account ID), adding necessary meaning for agent usage.

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 moves an email rule to the top of execution order, explains the meaning (runs before all others, sets sequence number to 1), and distinguishes it from siblings like move_up, move_down, move_bottom.

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?

Provides context about execution order and recommends user confirmation. While it does not explicitly state when to use this over alternatives, the sibling names (move_up, move_down, move_bottom) make the distinction clear.

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

emailrules_move_upMove Email Rule UpA

✏️ Move a message rule up one position in execution order (requires user confirmation recommended)

Increases the rule's priority by moving it one position higher in the execution order. Rules at the top (sequence = 1) cannot be moved up.

Args: rule_id: The message rule ID to move account_id: Microsoft account ID

Returns: Updated rule with new sequence number

ParametersJSON Schema
NameRequiredDescriptionDefault
rule_idYes
account_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior4/5

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

Annotations are minimal, but the description adds behavioral context: requiring user confirmation, incrementally moving up, and the inability to move the top rule. This goes beyond 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 concise with a clear title, short paragraph, and structured Args/Returns sections. No unnecessary information.

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 simple tool (2 parameters, no nested objects) and the presence of output schema, the description covers the purpose, constraints, and return value 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 coverage is 0%, but the description includes a one-line explanation for each parameter ('The message rule ID to move', 'Microsoft account ID'), adding some meaning beyond the parameter names.

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 ('Move a message rule up one position in execution order') and the resource ('message rule'), distinguishing it from sibling tools like emailrules_move_down and emailrules_move_top.

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 context on when to use (to increase priority) and a constraint ('rules at the top cannot be moved up'), but does not explicitly compare to alternatives like move_down or move_top.

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

emailrules_updateUpdate Email RuleA
Idempotent

✏️ Update an existing message rule (requires user confirmation recommended)

Modifies rule properties, conditions, actions, or execution order. At least one field must be provided to update.

Allowed parameters: display_name, conditions, actions, sequence, is_enabled, exceptions.

Args: rule_id: The message rule ID to update account_id: Microsoft account ID display_name: New name for the rule (optional) conditions: New conditions (optional) actions: New actions (optional) sequence: New execution order (optional) is_enabled: Enable or disable the rule (optional) exceptions: New exception conditions (optional)

Returns: Updated rule configuration

ParametersJSON Schema
NameRequiredDescriptionDefault
rule_idYes
account_idYes
display_nameNo
conditionsNo
actionsNo
sequenceNo
is_enabledNo
exceptionsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior4/5

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

Annotations indicate non-destructive and idempotent behavior. The description adds the important behavioral note that user confirmation is recommended, which goes beyond annotation hints. It does not contradict any annotations.

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 reasonably concise and well-structured, using a bullet-like list for parameters and front-loading key information with an icon. It avoids unnecessary elaboration.

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 an update tool with 8 parameters and no nested objects, the description covers the essential purpose, allowed fields, and return value. The presence of an output schema (not shown) reduces the need to describe return format further.

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?

With 0% schema description coverage, the description adds basic semantics for each parameter (e.g., 'New name for the rule (optional)'). However, it lacks details for complex parameters like conditions, actions, and exceptions, which remain opaque.

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 (update) and the resource (an existing message rule). It lists the modifiable properties and distinguishes from sibling tools like emailrules_create or emailrules_delete. The verb+resource combination is 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 notes that user confirmation is recommended and that at least one field must be provided. While it doesn't explicitly state when not to use this tool versus alternatives (e.g., emailrules_create for new rules), the context from sibling names makes the distinction clear.

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

email_sendSend EmailA

📧 Send an email to recipients (always require user confirmation)

WARNING: Email will be sent immediately upon execution. This action cannot be undone.

Supports multiple recipients, CC, attachments, and HTML formatting. Addresses are validated, deduplicated across To/CC, and limited to 500 unique recipients in total.

Args: account_id: Microsoft account ID to: Recipient email address(es) subject: Email subject body: Email body (plain text) cc: CC recipient email address(es) (optional) attachments: Local file path(s) for attachments (optional) confirm: Must be True to confirm sending (prevents accidents)

Returns: Status confirmation

Raises: ValidationError: If recipients are invalid, exceed limits, or confirm is False.

ParametersJSON Schema
NameRequiredDescriptionDefault
account_idYes
toYes
subjectYes
bodyYes
ccNo
attachmentsNo
confirmNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior5/5

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

Discloses immediate sending, irreversibility, recipient validation, deduplication, 500 recipient limit, and confirmation requirement. Annotations do not contradict; destructiveHint=false is consistent as sending is not data destruction. Rich 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.

Conciseness4/5

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

Well-structured with warning, details, args, returns. Front-loaded with critical info. Slightly verbose (e.g., 'Addresses are validated...' could be part of param description), but still efficient and clear.

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 7 parameters, output schema exists, and no nested objects, the description covers purpose, behavior, all parameters, return values (by referencing status), and errors (ValidationError). No gaps.

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?

Schema coverage is 0%, but description adds full meaning for all 7 parameters, including types, purpose, constraints (validation, dedup, limit), and the critical confirm parameter. Compensates excellently for 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?

Clearly states 'Send an email to recipients' with immediate sending and irreversibility. Differentiates from siblings like email_create_draft by emphasizing sending vs drafting. Specific verb and resource.

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 requires user confirmation and warns of immediate irreversible action. Context is clear for sending, but no direct mention of when not to use (e.g., for draft use email_create_draft). Still strong guidance.

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

email_updateUpdate Email PropertiesA
Idempotent

✏️ Update email properties (requires user confirmation recommended)

Modifies properties like isRead status, categories, and flags without changing email content.

Examples: email_update(email_id, {"isRead": True}, account_id) email_update(email_id, {"categories": ["Important"]}, account_id)

Allowed update keys: isRead, categories, importance, flag, inferenceClassification.

Args: email_id: The email ID to update updates: Dictionary of properties to update account_id: Microsoft account ID

Returns: Updated email object

ParametersJSON Schema
NameRequiredDescriptionDefault
email_idYes
updatesYes
account_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already indicate idempotent and non-destructive. Description adds that user confirmation is recommended and specifies allowed update keys, adding behavioral context beyond 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?

Well-structured with icon, summary, examples, allowed keys, args, and returns. No fluff, efficient use of text.

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?

Covers inputs, allowed keys, examples, and user confirmation. Output schema exists and description mentions 'Updated email object', which is sufficient given the available output schema.

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 explains each parameter: email_id as 'The email ID to update', updates as a dictionary with allowed keys, and account_id as 'Microsoft account ID'. This adds significant meaning beyond schema names.

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 tool updates email properties like isRead, categories, and flags, and explicitly says it does not change email content. This distinguishes it from sibling tools like email_mark_read and email_flag.

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?

Provides a note about user confirmation recommended and gives examples, but does not explicitly guide when to use this tool versus other email siblings like email_mark_read or email_add_category.

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

file_copyCopy FileA

✏️ Copy a file within OneDrive (requires user confirmation recommended)

Creates a copy of a file in a specified destination folder. The copy operation is asynchronous and may take time for large files.

Args: file_id: The file ID to copy destination_folder_id: The destination folder ID account_id: Microsoft account ID new_name: Optional new name for the copied file

Returns: Copy operation status with location URL to monitor progress

Raises: ValueError: If file_id or destination_folder_id is invalid

ParametersJSON Schema
NameRequiredDescriptionDefault
file_idYes
destination_folder_idYes
account_idYes
new_nameNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already flag it as non-read-only, non-destructive, non-idempotent, and open-world. The description adds valuable context: the operation is asynchronous and may take time for large files, and it requires user confirmation. 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.

Conciseness4/5

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

The description is concise with a clear structure: purpose sentence, then Args, Returns, Raises sections. The emoji and 'recommended' comment are slightly informal but do not add unnecessary length. Every sentence contributes value, though some details could be condensed.

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 sibling tools, the description covers purpose, async behavior, parameters, returns, and errors. Missing details include default naming behavior when new_name is omitted and permission requirements, but overall it's fairly complete.

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 0%, so the description carries the burden. It provides brief explanations for each parameter (e.g., 'file_id: The file ID to copy'), but lacks details on formats, sources, or constraints (e.g., where to find account_id, naming rules for new_name). This is minimal but sufficient for basic use.

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 'Copy a file within OneDrive', specifying the verb 'copy' and resource 'file'. It distinguishes from sibling tools like file_move (which moves instead of copies) and file_create (which creates a new empty file).

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 via 'copy a file' and notes it's asynchronous, but does not explicitly state when to use this tool versus alternatives like file_move or file_rename. It mentions 'requires user confirmation recommended' but lacks prerequisites or exclusions.

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

file_createCreate FileA

✏️ Upload a local file to OneDrive (requires user confirmation recommended)

Args: onedrive_path: Destination path within OneDrive (must start with '/'). local_file_path: Absolute path to the local file to upload. Paths are validated via ensure_safe_path to prevent traversal and restrict uploads to trusted directories. account_id: Microsoft account identifier.

Returns: Metadata for the created OneDrive file.

ParametersJSON Schema
NameRequiredDescriptionDefault
onedrive_pathYes
local_file_pathYes
account_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior4/5

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

Adds context beyond annotations: requires user confirmation, path validation to prevent traversal, returns metadata. Annotations are neutral.

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?

Concise, uses structured Args/Returns, front-loaded with emoji. Could be slightly more succinct.

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?

Covers all 3 parameters, mentions output metadata and security validation. Adequate for a file upload tool with many siblings.

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 coverage, description explains each parameter: onedrive_path must start with '/', local_file_path is absolute path with validation, account_id is identifier.

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 verb 'Upload' and resource 'local file to OneDrive', distinguishing from siblings like file_copy, file_delete.

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?

Gives specific action but no when-to-use or when-not-to-use guidance vs. alternatives among many file-related siblings.

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

file_deleteDelete FileB
DestructiveIdempotent

🔴 Delete a OneDrive file or folder permanently (always require user confirmation)

WARNING: This action permanently deletes the file or folder and cannot be undone.

ParametersJSON Schema
NameRequiredDescriptionDefault
file_idYes
account_idYes
confirmNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.4/5.0
Behavior2/5

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

While annotations provide destructiveHint=true, the description contradicts the schema by stating confirmation is always required, yet the 'confirm' parameter is optional with default false. This misrepresentation lowers 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 sentences, no fluff, with an effective warning. Every word serves a purpose.

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 covers the core behavior but lacks details on prerequisites, error conditions, or the output. The contradiction with the confirm parameter also reduces completeness.

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

Parameters2/5

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

Schema coverage is 0% and the description only implicitly references the 'confirm' parameter. It does not explain 'file_id' or 'account_id', leaving their meaning ambiguous.

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 ('delete') and the resource ('OneDrive file or folder'), distinguishing it from sibling tools like file_copy, file_move, etc.

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 warns about permanence and user confirmation, but does not explicitly guide when to use this tool versus the sibling 'folder_delete' tool, which could cause confusion.

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

file_download_urlGet File Download URLA
Read-onlyIdempotent

📖 Get direct download URL for a OneDrive file (read-only, safe for unsupervised use)

Returns a temporary download URL that can be used to download the file directly without authentication. The URL expires after a short period.

Args: file_id: The file ID to get download URL for account_id: Microsoft account ID

Returns: Dictionary containing the download URL and file metadata

Raises: ValueError: If file_id is invalid or file not found

ParametersJSON Schema
NameRequiredDescriptionDefault
file_idYes
account_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false. The description adds that the URL expires after a short period and raises ValueError for invalid files, going beyond annotations to disclose important behavioral traits.

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 brief and well-structured with an introductory sentence, Args/Returns/Raises sections. No superfluous content; every sentence adds 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?

Given the tool's simplicity (2 required params, clear read-only behavior, output schema present), the description fully covers input, output, and error conditions without requiring additional detail.

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?

Input schema has no descriptions (0% coverage). The description provides clear, concise explanations for both parameters: 'file_id: The file ID to get download URL for' and 'account_id: Microsoft account ID', adding meaning where schema lacks.

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 identifies the tool as getting a temporary download URL for a OneDrive file, with the verb 'get' and specific resource 'download URL'. It distinguishes from sibling tools like file_get or file_share by focusing on direct download via URL.

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 states it is 'read-only, safe for unsupervised use' and explains the URL is temporary and expires. This provides context for when to use, but does not explicitly compare to alternatives or state 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.

file_getGet FileA
Idempotent

✏️ Download a OneDrive file to a local path (requires user confirmation recommended)

The download URL is supplied by Microsoft Graph (never user input) and is validated against an allow-list of Microsoft domains before use. The file is streamed to disk in configurable chunks with retry behaviour to protect against transient failures. Download size and timeouts respect the environment variables MCP_FILE_DOWNLOAD_MAX_MB and MCP_FILE_DOWNLOAD_TIMEOUT.

Args: file_id: The Microsoft Graph file identifier to download. account_id: Microsoft account identifier associated with the file. download_path: Absolute path where the file will be stored locally. Must reside within an allowed root directory.

Returns: Dictionary containing download metadata (name, size_mb, mime_type).

Raises: ValidationError: If input parameters are invalid. RuntimeError: If all download attempts fail.

ParametersJSON Schema
NameRequiredDescriptionDefault
file_idYes
account_idYes
download_pathYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior5/5

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

The description discloses key behaviors: user confirmation, security validation (allow-list of Microsoft domains), streaming, chunking, retry, and environment variable controls. This adds value beyond the annotations (which show idempotentHint=true, etc.) by explaining actual execution behavior.

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 well-structured with sections (Args, Returns, Raises) and front-loads the core purpose. While it is comprehensive, it could be slightly more concise without losing important details. Every sentence adds value, making it a strong 4.

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 three parameters, no nested objects, and presence of an output schema, the description is remarkably complete. It covers parameter validation, security, error handling, environment variables, and return format. No gaps are evident.

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 schema coverage 0%, the description fully compensates by clearly defining each parameter: file_id, account_id, download_path (including constraint 'Must reside within an allowed root directory'). It also describes the return dictionary and exception types, providing rich semantics beyond the bare 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's purpose: 'Download a OneDrive file to a local path'. This is a specific verb ('download') and resource ('OneDrive file' with local path). It distinguishes from sibling tools like 'file_download_url' by emphasizing the actual download to disk and mentioning user confirmation.

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 notes 'requires user confirmation recommended' and mentions environment variables for size/timeout limits, giving guidance on when to use. However, it does not explicitly state when not to use or compare with alternatives like 'file_download_url', so it falls short of a perfect score.

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

file_listList FilesA
Read-onlyIdempotent

📖 List files and/or folders in OneDrive (read-only, safe for unsupervised use)

Returns items from OneDrive with names, sizes, and modification dates.

Caching: Results are cached for 10 minutes (fresh) / 1 hour (stale). Use force_refresh=True to bypass cache and fetch fresh data.

Args: account_id: Microsoft account ID path: Path to list from (default: "/") folder_id: Direct folder ID (takes precedence over path) limit: Maximum items to return (1-500, default: 50) type_filter: Filter by type - "all", "files", or "folders" (default: "all") use_cache: Whether to use cached data if available (default: True) force_refresh: Force refresh from API, bypassing cache (default: False)

Returns: List of items matching the filter criteria. Each item includes _cache_status and _cached_at fields.

ParametersJSON Schema
NameRequiredDescriptionDefault
account_idYes
pathNo/
folder_idNo
limitNo
type_filterNoall
use_cacheNo
force_refreshNo

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?

Annotations already indicate read-only, non-destructive, idempotent, and open-world. The description adds caching details (10 min fresh, 1 hour stale) and force_refresh option, and mentions _cache_status and _cached_at fields in return, exceeding annotation information.

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?

Well-structured with clear sections (description, caching, args, returns) using emoji and bullet points. Every sentence adds value with no redundancy.

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 high annotation coverage and presence of output schema, the description is complete. It documents all parameters, caching behavior, and return fields, leaving no ambiguity for the 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?

Despite 0% schema coverage, the description provides a detailed 'Args' section explaining each of the 7 parameters with defaults and meanings, fully compensating 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?

Clearly states it lists files and/or folders in OneDrive, is read-only, and returns names, sizes, and dates. Distinguishes from sibling tools like search_files and folder_list by specifying listing of both files and folders.

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?

Provides usage context (read-only, safe for unsupervised use) and caching behavior, but lacks explicit guidance on when not to use it or alternatives such as search_files for searching across files.

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

file_moveMove FileA

✏️ Move a file to a different folder (requires user confirmation recommended)

Moves a file to a different parent folder within OneDrive.

Args: file_id: The file ID to move destination_folder_id: The destination folder ID account_id: Microsoft account ID

Returns: Updated file object with new parentReference

Raises: ValueError: If file_id or destination_folder_id is invalid

ParametersJSON Schema
NameRequiredDescriptionDefault
file_idYes
destination_folder_idYes
account_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already indicate readOnlyHint=false and destructiveHint=false, so the description's mention of moving and returning an updated object aligns without contradiction. It adds value by recommending user confirmation, but does not detail side effects like permission changes.

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, using an emoji for quick recognition, and well-structured with Args and Returns sections. Every sentence is informative and earns its place.

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, the description appropriately notes the return type. It covers the main aspects of the operation, though it could mention scope (OneDrive) and authentication requirements more explicitly.

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 description coverage is 0%, so the description carries full burden. It lists all three parameters with meaningful labels ('file ID', 'destination folder ID', 'Microsoft account ID') that add context beyond the schema's property names.

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 'Move a file to a different folder' and 'Moves a file to a different parent folder within OneDrive', providing a clear verb+resource combination. It distinguishes from siblings like file_copy or file_delete by specifying 'move' and targeting a different folder.

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 includes 'requires user confirmation recommended', indicating a precondition. However, it does not explicitly contrast with folder_move or specify when not to use this tool. The context is clear enough for the intended use case.

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

file_renameRename FileA

✏️ Rename a file (requires user confirmation recommended)

Updates the name of an existing OneDrive file.

Args: file_id: The file ID to rename new_name: New name for the file account_id: Microsoft account ID

Returns: Updated file object with new name

Raises: ValueError: If file_id is invalid or new_name is empty

ParametersJSON Schema
NameRequiredDescriptionDefault
file_idYes
new_nameYes
account_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.9/5.0
Behavior3/5

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

Annotations already indicate mutation (readOnlyHint=false) and non-destructive nature. The description adds a recommendation for user confirmation but does not detail side effects, permission requirements, or behavior on conflict. 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.

Conciseness4/5

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

The description is concise and front-loaded with the purpose. The use of an emoji and docstring format is clear, though some lines (e.g., returns/raises) are standard and could be slightly more compact.

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, the description sufficiently covers return values and errors. However, it lacks details on edge cases like name conflicts or whether the operation is reversible, which would improve completeness for a mutation 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?

The description provides meaningful descriptions for all three parameters (file_id, new_name, account_id) beyond the raw schema types and required flags, and also documents return and error types. With 0% schema description coverage, the description fully compensates.

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 renames a file ("Updates the name of an existing OneDrive file") with a specific verb and resource. It distinguishes from sibling tools like file_move and folder_rename by focusing on renaming.

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?

While the description mentions "requires user confirmation recommended," it does not explicitly state when to use this tool versus alternatives like file_move or file_update. No exclusions or context for avoiding misuse are provided.

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

file_shareShare FileA

✏️ Create a sharing link for a OneDrive file (requires user confirmation recommended)

Creates a sharing link that allows others to access the file. Permission types control what recipients can do with the file.

Args: file_id: The file ID to share account_id: Microsoft account ID permission_type: Type of permission - "view" or "edit" (default: "view") scope: Link scope - "anonymous" or "organization" (default: "anonymous")

Returns: Sharing link details including the web URL

Raises: ValueError: If file_id is invalid or permission_type/scope is unsupported

ParametersJSON Schema
NameRequiredDescriptionDefault
file_idYes
account_idYes
permission_typeNoview
scopeNoanonymous

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior4/5

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

Beyond annotations (readOnlyHint=false, destructiveHint=false), the description adds that it 'creates a sharing link' and requires user confirmation. It also lists raised exceptions (ValueError). This gives the agent useful behavioral context beyond the structured 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 concise, well-structured with a summary line, separate Args/Returns/Raises sections, and no redundant information. Every sentence adds 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?

Given the tool's complexity (4 parameters, output schema exists), the description covers purpose, parameter semantics, return values (including web URL), and error conditions. No critical information is missing.

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% description coverage, so the description fully compensates by detailing all four parameters: file_id, account_id, permission_type (with default 'view'), and scope (with default 'anonymous'), explaining their roles. This adds complete meaning that the schema alone lacks.

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 'Create a sharing link for a OneDrive file', specifying the action, resource, and includes a recommendation for user confirmation. It distinguishes itself from sibling file tools like file_copy or file_delete by focusing on sharing links.

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 mentions 'requires user confirmation recommended' but does not provide explicit guidance on when to use this tool versus alternatives or when not to use it. There is no mention of prerequisites or exclusions.

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

file_updateUpdate FileA
Idempotent

✏️ Replace OneDrive file content with local file (requires user confirmation recommended)

Args: file_id: Target OneDrive file identifier to replace. local_file_path: Absolute path to the replacement file. Validated via ensure_safe_path to block traversal and enforce workspace roots. account_id: Microsoft account identifier.

Returns: Updated file metadata returned by Microsoft Graph.

ParametersJSON Schema
NameRequiredDescriptionDefault
file_idYes
local_file_pathYes
account_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior4/5

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

Beyond annotations (readOnlyHint=false, destructiveHint=false, idempotentHint=true), the description adds critical behavioral details: it performs a replacement (modification), validates local_file_path with ensure_safe_path to prevent traversal, and recommends user confirmation. These traits are not fully captured by annotations alone.

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 line summary with emoji, then clear argument and return sections. Every sentence adds value, with no fluff or redundancy.

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 complexity (3 required string params, output schema exists), the description covers the operation, parameter details, validation, and user confirmation recommendation. It is complete for an agent to select and invoke correctly, especially with an output schema.

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 coverage, the description fully explains each parameter: file_id is 'target OneDrive file identifier', local_file_path is 'absolute path... validated via ensure_safe_path', and account_id is simply identified. This adds significant meaning beyond the bare schema names.

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 'Replace OneDrive file content with local file', using a specific verb and resource. This distinguishes it from sibling tools like file_copy (copy), file_create (create new), file_delete (delete), etc., which have different purposes.

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 content replacement and includes a recommendation for user confirmation. However, it does not explicitly state when to use versus alternatives, nor does it provide exclusions or conditions for use. Sibling tools are not mentioned for comparison.

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

folder_createCreate OneDrive FolderA

✏️ Create a new OneDrive folder (requires user confirmation recommended)

Creates a new folder in OneDrive, either at the root level or as a child of an existing folder.

Args: name: Name for the new folder account_id: Microsoft account ID parent_folder_id: Parent folder ID (None = root level)

Returns: Created folder object with id, name, and other metadata

Raises: ValueError: If name is empty or parent_folder_id is invalid

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes
account_idYes
parent_folder_idNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already indicate non-read-only and non-destructive. The description adds behavioral traits: creates at root or child, requires user confirmation, raises ValueError for invalid inputs. 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.

Conciseness4/5

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

Description is concise with clear sections (Args, Returns, Raises) and no redundant information. The emoji and user confirmation note are front-loaded. Could remove the 'Args:' prefix since schema already defines, but it's still efficient.

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 moderate complexity (3 params, output schema exists), the description covers creation behavior, parameter semantics, return value, and error cases. Missing details like behavior on duplicate names or permissions, but overall 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?

Input schema has 0% parameter descriptions, so the description compensates by explaining the purpose and constraints of each parameter (name, account_id, parent_folder_id with default None). Could include validation rules or formatting, but still adds significant 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 verb (create), resource (OneDrive folder), and scope (root or child of existing folder). It distinguishes itself from sibling tools like file_create and emailfolders_create by specifying it's for OneDrive folders.

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 mentions 'requires user confirmation recommended' but does not provide explicit guidance on when to use this tool versus alternatives (e.g., folder_move, folder_rename) or when not to use it. No reference to sibling tools.

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

folder_deleteDelete OneDrive FolderA
Destructive

🔴 Delete an OneDrive folder permanently (always require user confirmation)

WARNING: This action permanently deletes the folder and all its contents (files and subfolders) and cannot be undone.

Args: folder_id: The folder ID to delete account_id: Microsoft account ID confirm: Must be True to confirm deletion (prevents accidents)

Returns: Status confirmation

Raises: ValueError: If folder_id is invalid or confirm is False

ParametersJSON Schema
NameRequiredDescriptionDefault
folder_idYes
account_idYes
confirmNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already set destructiveHint=true. Description adds details: 'permanently delete', 'cannot be undone', 'always require user confirmation'. No contradiction.

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?

Well-structured with sections for args, returns, raises. Slightly verbose but every sentence adds value. Front-loaded with warning.

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?

Covers behavior, parameters, return value, and error conditions (ValueError). Output schema exists, but description mentions return type. Complete for a destructive tool.

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?

Schema coverage is 0%, but description fully explains all 3 parameters: folder_id, account_id, and the confirm flag (must be True). Adds meaning beyond 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?

Clear verb 'Delete' and resource 'OneDrive Folder'. Distinguishes from sibling tools like folder_create, folder_rename, file_delete.

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 warns about permanence and requires user confirmation via the confirm parameter. Does not explicitly compare to alternatives 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.

folder_getGet FolderA
Read-onlyIdempotent

📖 Get metadata for a specific OneDrive folder (read-only, safe for unsupervised use)

Returns folder details including child count and web URL.

Args: account_id: Microsoft account ID folder_id: Folder ID (takes precedence if provided) path: Folder path (e.g., "/Documents/Projects")

Returns: Folder metadata including childCount, webUrl, and parent info

ParametersJSON Schema
NameRequiredDescriptionDefault
account_idYes
folder_idNo
pathNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, destructiveHint, idempotentHint, and openWorldHint. The description adds 'read-only, safe for unsupervised use' and mentions returned properties but does not disclose any other behavioral traits like rate limits or auth requirements beyond the account_id parameter.

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 structured with a main sentence, then Args and Returns sections. It is fairly concise with no fluff, though the docstring format adds a bit of formality. Could be slightly shorter but is well-organized.

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, the description adequately explains return values (childCount, webUrl, parent info). It mentions folder_id precedence but lacks discussion of error cases or resolution behavior for path. Overall, it covers the essential context for a simple get tool.

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 provides detailed explanations for all three parameters: account_id as Microsoft account ID, folder_id with precedence note, and path with an example. This fully compensates for the missing schema descriptions and adds clarity.

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 'Get metadata for a specific OneDrive folder' with a verb and resource. It distinguishes from siblings like folder_get_tree (which likely returns tree structure) and folder_list (which lists folders). The read-only and safe qualifier further clarifies its 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 for retrieving metadata but does not explicitly mention when not to use it or suggest alternatives like folder_list for listing contents. The 'safe for unsupervised use' hints at appropriate contexts, but lacks explicit guidance.

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

folder_get_treeGet Folder TreeA
Read-onlyIdempotent

📖 Recursively build a tree of OneDrive folders (read-only, safe for unsupervised use)

Returns a hierarchical tree structure showing all folders and nested subfolders. Useful for understanding OneDrive folder organization.

Caching: Results are cached for 30 minutes (fresh) / 2 hours (stale). Use force_refresh=True to bypass cache and fetch fresh data.

Args: account_id: Microsoft account ID path: Starting path (default: "/") folder_id: Starting folder ID (takes precedence over path) max_depth: Maximum recursion depth (1-25, default: 10) use_cache: Whether to use cached data if available (default: True) force_refresh: Force refresh from API, bypassing cache (default: False)

Returns: Nested tree structure with folders and their children, including: - _cache_status: Cache state (fresh/stale/miss) - _cached_at: When data was cached (ISO format)

ParametersJSON Schema
NameRequiredDescriptionDefault
account_idYes
pathNo/
folder_idNo
max_depthNo
use_cacheNo
force_refreshNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already provide readOnlyHint, destructiveHint, idempotentHint, openWorldHint. The description adds caching behavior (30 min fresh/2 hours stale), force refresh option, and return fields like _cache_status. This significantly enriches behavioral transparency beyond annotations.

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 well-structured with emoji, line breaks, and sections (caching, args, returns). Every sentence earns its place, though it is slightly verbose. Front-loaded key purpose and safety note.

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 6 parameters, existence of output schema, and complexity of building a tree, the description covers purpose, usage context, caching, all parameters, and return structure including cache metadata. It is complete and informative.

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 coverage, the description provides detailed parameter meanings: account_id, path (default ''/''), folder_id (takes precedence over path), max_depth (1-25, default 10), use_cache, force_refresh. This adds substantial value 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 the tool recursively builds a tree of OneDrive folders (read-only, safe for unsupervised use). It specifies the verb 'build a tree' and the resource 'OneDrive folders', and distinguishes from sibling tools by highlighting its read-only nature and hierarchical output.

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 mentions the tool is 'useful for understanding OneDrive folder organization' and provides caching details, but does not explicitly state when not to use it or offer alternatives like folder_list. It gives context for use but lacks exclusion criteria.

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

folder_listList FoldersA
Read-onlyIdempotent

📖 List only folders (not files) in OneDrive (read-only, safe for unsupervised use)

Returns folders with child counts and hierarchy information.

Caching: Results are cached for 15 minutes (fresh) / 1 hour (stale). Use force_refresh=True to bypass cache and fetch fresh data.

Args: account_id: Microsoft account ID path: Path to list folders from (e.g., "/Documents", default: "/") folder_id: Direct folder ID (takes precedence over path) limit: Maximum folders to return (1-500, default: 50) use_cache: Whether to use cached data if available (default: True) force_refresh: Force refresh from API, bypassing cache (default: False)

Returns: Dictionary with: - folders: List of folder objects with id, name, childCount, path, parentId - _cache_status: Cache state (fresh/stale/miss) - _cached_at: When data was cached (ISO format)

ParametersJSON Schema
NameRequiredDescriptionDefault
account_idYes
pathNo/
folder_idNo
limitNo
use_cacheNo
force_refreshNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false. The description adds caching details, return fields (childCount, hierarchy), and the force_refresh option, which goes beyond the annotated metadata.

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 well-structured with a summary line, parameter list, and return description. It is slightly long but each sentence adds value. Front-loads the key purpose and safety note.

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?

With 6 parameters and an output schema (though not detailed here), the description covers all inputs and the return structure adequately. Mentions cache status fields which are important for the 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?

Despite 0% schema description coverage, the description thoroughly explains all 6 parameters with defaults, precedence (folder_id over path), and caching flags. This compensates fully for the schema gap.

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 starts with a clear verb ('List only folders') and distinguishes from files and sibling tools like file_list and folder_get_tree. It specifies the scope (OneDrive) and read-only nature.

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 explains when to use (list folders with hierarchy and child counts) and provides caching options. It does not explicitly state when not to use or compare to alternatives, but the sibling list and context provide implicit guidance.

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

folder_moveMove OneDrive FolderA

✏️ Move an OneDrive folder to a different parent (requires user confirmation recommended)

Moves a folder to become a child of a different parent folder.

Args: folder_id: The folder ID to move destination_folder_id: The destination parent folder ID account_id: Microsoft account ID

Returns: Updated folder object with new parentReference

Raises: ValueError: If folder_id or destination_folder_id is invalid

ParametersJSON Schema
NameRequiredDescriptionDefault
folder_idYes
destination_folder_idYes
account_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior4/5

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

Annotations confirm readOnlyHint=false (modification) and destructiveHint=false. The description adds the behavioral note about user confirmation and raises ValueError for invalid IDs, enhancing transparency beyond 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 concise and well-structured with an emoji, brief intro, and clearly separated Args, Returns, and Raises sections. No unnecessary 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?

For a simple move operation with output schema and annotations, the description covers purpose, parameters, return type, and errors. Lacks details on potential conflicts or permission needs, but openWorldHint partially addresses side effects.

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 description coverage is 0%, but the description provides clear explanations for each parameter under Args (folder_id, destination_folder_id, account_id), adding meaning beyond the raw type string.

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 moves an OneDrive folder to a different parent, using a specific verb and resource. It distinguishes from sibling tools like folder_rename and file_move by focusing on folder hierarchy change.

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 mentions 'requires user confirmation recommended' but does not explicitly state when to use this tool versus alternatives like file_move or when not to use it. No guidance on prerequisites or conditions.

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

folder_renameRename OneDrive FolderA

✏️ Rename an OneDrive folder (requires user confirmation recommended)

Updates the name of an existing OneDrive folder.

Args: folder_id: The folder ID to rename new_name: New name for the folder account_id: Microsoft account ID

Returns: Updated folder object with new name

Raises: ValueError: If folder_id is invalid or new_name is empty

ParametersJSON Schema
NameRequiredDescriptionDefault
folder_idYes
new_nameYes
account_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.7/5.0
Behavior4/5

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

The description adds behavioral context beyond annotations: it mentions 'requires user confirmation recommended' and raises ValueError for invalid inputs. Annotations are minimal, so the description compensates well.

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 well-structured with clear sections (Args, Returns, Raises). It is front-loaded with purpose. The emoji is minor but does not hinder clarity.

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?

Covers purpose, all parameters, return value, and error conditions. It mentions confirmation need. Missing details on permissions or idempotency, but sufficient for basic use.

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 docstring briefly explains each parameter's purpose (folder_id, new_name, account_id). Since schema description coverage is 0%, this provides basic semantics but lacks constraints or formats.

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 it renames an OneDrive folder. It distinguishes from sibling tools like folder_move or folder_delete by specifying the action 'rename'.

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 vs alternatives like folder_move. It does not mention prerequisites or scenarios where other tools are preferred.

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

search_contactsSearch ContactsA
Read-onlyIdempotent

📖 Search contacts (read-only, safe for unsupervised use)

Searches contact names, email addresses, and phone numbers. Uses $filter with prefix matching (startswith) for all account types due to Graph API limitations.

Note: Contact search is limited to prefix matching and may not find matches in the middle of names.

Args: query: Search query string (1-512 characters, used as prefix) account_id: Microsoft account ID limit: Maximum results to return (1-500, default: 50) use_cache: Whether to use cache (default: True) force_refresh: Bypass cache and fetch fresh data (default: False)

Returns: List of matching contacts

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYes
account_idYes
limitNo
use_cacheNo
force_refreshNo

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?

Beyond annotations (readOnlyHint, etc.), the description explains the Graph API prefix matching limitation, caching behavior, and that it is safe for unsupervised use. 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 concise, well-structured with an emoji header, clear sections, and a bullet list of arguments. Every sentence adds value, and the structure aids quick understanding.

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 output schema exists, the description adequately covers search behavior, caching, parameter constraints, and limitations. It is complete for a read-only search tool without needing to detail return format.

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?

Despite 0% schema description coverage, the description explains all parameters: query as a prefix string (1-512 chars), account_id, limit with range and default, and cache flags. Missing details like account_id format, but overall adds sufficient meaning.

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 it searches contacts by names, emails, and phone numbers, and distinguishes from sibling tools by specifying contact-specific search. It also mentions it's read-only and safe, using a specific verb 'search' and a clear resource 'contacts'.

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 indicates when to use the tool (for searching contacts) and notes limitations like prefix matching, but it does not explicitly contrast with sibling tools like contact_list or search_unified. However, the context makes it clear that this is for search with filtering.

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

search_emailsSearch EmailsA
Read-onlyIdempotent

📖 Search emails across mailbox (read-only, safe for unsupervised use)

Searches email subject, body, and sender across all or specific folders. Automatically routes to the appropriate API based on account type:

  • Personal accounts: Uses OData $search parameter

  • Work/school accounts: Uses unified search API

Args: query: Search query string (1-512 characters) account_id: Microsoft account ID limit: Maximum results to return (1-500, default: 50) folder: Optional folder to search within (e.g., "inbox", "sent") use_cache: Whether to use cache (default: True) force_refresh: Bypass cache and fetch fresh data (default: False)

Returns: List of matching emails with metadata

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYes
account_idYes
limitNo
folderNo
use_cacheNo
force_refreshNo

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?

Description goes beyond annotations by detailing automatic routing, caching behavior (use_cache, force_refresh), and return type. It reinforces the readOnlyHint and adds operational context, without contradicting annotations.

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?

Description is well-structured with sections and bullet points, but includes an emoji and slightly verbose phrasing (e.g., '📖 Search emails across mailbox (read-only, safe for unsupervised use)'). Still, it remains efficient and easy to parse.

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, parameters, routing, caching, and safety. With an output schema present, it doesn't need to detail return format. Missing details on pagination or handling large result sets, but overall sufficient for a search tool.

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?

Schema has zero parameter descriptions, but the tool description compensates thoroughly, explaining each parameter's purpose, constraints (e.g., query length, limit range), defaults, and examples (e.g., folder options). This provides essential semantic information for correct invocation.

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: search emails across mailbox with specific scope (subject, body, sender). It differentiates from siblings like email_list, email_get, and other search tools by emphasizing the search capability and automatic API routing based on account type.

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 it's read-only and safe for unsupervised use, providing clear context for when to use. However, it does not mention alternatives like search_unified or when not to use this tool, which would improve guidance.

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

search_eventsSearch EventsA
Read-onlyIdempotent

📖 Search calendar events (read-only, safe for unsupervised use)

Searches event titles, locations, and descriptions within date range. Automatically routes to the appropriate API based on account type:

  • Personal accounts: Uses OData $search parameter

  • Work/school accounts: Uses unified search API

Args: query: Search query string (1-512 characters) account_id: Microsoft account ID days_ahead: Days to look forward (0-730, default: 365) days_back: Days to look back (0-730, default: 365) limit: Maximum results to return (1-500, default: 50) use_cache: Whether to use cache (default: True) force_refresh: Bypass cache and fetch fresh data (default: False)

Returns: List of matching events

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYes
account_idYes
days_aheadNo
days_backNo
limitNo
use_cacheNo
force_refreshNo

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?

Annotations already indicate safety and idempotency. Description adds routing behavior and search scope details. No contradictions; adds meaningful context beyond 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?

Well-structured with emoji summary at top, then details, and a bullet-list of args. Every sentence adds value, no fluff. Front-loaded with key info.

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?

Covers search behavior, routing, and parameter details. Output schema exists, so return description is sufficient. Could mention ordering or pagination, but not necessary for this tool.

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?

Schema has 0% description coverage, but the description includes a full Arg list with constraints (character limits, ranges, defaults), fully compensating for lack of 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?

Clearly states it's a search tool for calendar events, specifying searched fields (title, location, description) and read-only nature. Differentiated from sibling search tools (contacts, emails, files, unified).

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?

Provides context on automatic API routing based on account type and notes read-only safe use. Lacks explicit when-not-to-use or alternative suggestions, but purpose is clear among siblings.

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

search_filesSearch FilesA
Read-onlyIdempotent

📖 Search for files in OneDrive (read-only, safe for unsupervised use)

Searches file names and content across all accessible OneDrive folders. Automatically routes to the appropriate API based on account type:

  • Personal accounts: Uses OneDrive-specific search

  • Work/school accounts: Uses unified search API

Args: query: Search query string (1-512 characters) account_id: Microsoft account ID limit: Maximum results to return (1-500, default: 50) use_cache: Whether to use cache (default: True) force_refresh: Bypass cache and fetch fresh data (default: False)

Returns: List of matching files with metadata

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYes
account_idYes
limitNo
use_cacheNo
force_refreshNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.8/5.0
Behavior5/5

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

The description adds behavioral context beyond annotations: automatic API routing based on account type, caching behavior (use_cache, force_refresh), and that it searches both file names and content. No contradictions 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 well-structured with a header, a brief paragraph, then a parameter list. Every sentence adds value; no redundancy. It is concise yet comprehensive.

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 exists, the description need not explain return values. It covers input params, caching, routing, and safety. Complete for a search tool.

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 coverage, the description provides detailed parameter descriptions including constraints (1-512 characters, 1-500 limit) and defaults. All 5 parameters are explained meaningfully.

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 searches for files in OneDrive, specifies it's read-only and safe, and mentions automatic routing by account type. It distinguishes from sibling tools like search_emails or search_contacts.

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 says 'read-only, safe for unsupervised use' and describes automatic routing, giving clear when-to-use guidance. However, it does not explicitly state when not to use it versus alternatives like search_unified.

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

search_unifiedUnified SearchA
Read-onlyIdempotent

📖 Search across multiple Microsoft 365 resources (read-only, safe for unsupervised use)

Searches emails, events, and files simultaneously. Automatically routes to the appropriate API based on account type:

  • Personal accounts: Performs sequential searches for each entity type

  • Work/school accounts: Uses unified search API for parallel search

Args: query: Search query string (1-512 characters) account_id: Microsoft account ID entity_types: Types to search: 'message', 'event', 'driveItem' (default: all) limit: Maximum results per type (1-500, default: 50) use_cache: Whether to use cache (default: True) force_refresh: Bypass cache and fetch fresh data (default: False)

Returns: Dictionary with results grouped by entity type

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYes
account_idYes
entity_typesNo
limitNo
use_cacheNo
force_refreshNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false. The description adds valuable context: automatic API routing based on account type, caching behavior via use_cache and force_refresh, and the safe read-only nature, exceeding what annotations 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 well-structured with a lead summary, followed by details and clearly labeled Args/Returns sections. Every sentence adds value without redundancy.

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, usage, parameters, and return format. Output schema exists, but description still summarizes return format. Missing edge cases or error handling, but sufficient for a search tool with rich annotations.

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?

Schema has 0% coverage (no descriptions), but the description provides clear, concise explanations for all 6 parameters, including types, defaults, and constraints (e.g., query 1-512 chars, limit 1-500). This fully compensates for 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 it searches multiple M365 resources (emails, events, files) simultaneously, with a specific verb and resource. It distinguishes from siblings like search_emails, search_events, etc. by using 'unified' and explaining simultaneous search.

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 indicates when to use it (multi-resource search, read-only, safe) and provides account type routing behavior. It doesn't explicitly mention alternatives but the grouping of sibling tools implies this is for combined searches.

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

server_get_versionGet Server VersionA
Read-onlyIdempotent

📖 Get the version of the m365-mcp server (read-only, safe for unsupervised use)

Returns the current version of the m365-mcp server that is running. Useful for diagnostics, troubleshooting, and ensuring compatibility.

Returns: Dictionary containing: - version: The semantic version string (e.g., "0.1.3") - package: The package name ("m365-mcp")

Example: >>> server_get_version() {"version": "0.1.3", "package": "m365-mcp"}

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior5/5

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

Reinforces annotations (readOnlyHint, idempotentHint) with readable safety note. Describes return format and example, adding value beyond structured fields.

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 compact paragraphs plus an example. Emoji and front-loaded key info. 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?

Given no parameters and rich annotations/output schema, the description covers all needed context: purpose, usage, return structure, and example.

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 100%. Baseline 4 is appropriate as description need not add param info.

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?

Clearly states it retrieves the server version, a specific verb-resource pair. No sibling tool does this, so it stands out distinctly.

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 says it's for diagnostics, troubleshooting, and compatibility. No need for when-not since it's read-only and safe.

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.

  1. 85 tool updatesv0.2.3
    • First observedaccount_authenticate
    • First observedaccount_complete_auth
    • First observedaccount_list
    • First observedcache_get_stats
    • First observedcache_invalidate
    • First observedcache_task_get_status
    • First observedcache_task_list
    • First observedcache_warming_status
    • First observedcalendar_check_availability
    • First observedcalendar_create_calendar
    • First observedcalendar_create_event
    • First observedcalendar_delete_calendar
    • First observedcalendar_delete_event
    • First observedcalendar_forward_event
    • First observedcalendar_get_event
    • First observedcalendar_get_free_busy
    • First observedcalendar_list_calendars
    • First observedcalendar_list_events
    • First observedcalendar_propose_new_time
    • First observedcalendar_respond_event
    • First observedcalendar_update_event
    • First observedcontact_add_to_list
    • First observedcontact_create
    • First observedcontact_create_list
    • First observedcontact_delete
    • First observedcontact_export
    • First observedcontact_get
    • First observedcontact_list
    • First observedcontact_update
    • First observedemail_add_category
    • First observedemail_archive
    • First observedemail_create_draft
    • First observedemail_delete
    • First observedemail_flag
    • First observedemail_forward
    • First observedemail_get
    • First observedemail_get_attachment
    • First observedemail_list
    • First observedemail_mark_read
    • First observedemail_move
    • First observedemail_reply
    • First observedemail_reply_all
    • First observedemail_send
    • First observedemail_update
    • First observedemailfolders_create
    • First observedemailfolders_delete
    • First observedemailfolders_empty
    • First observedemailfolders_get
    • First observedemailfolders_get_tree
    • First observedemailfolders_list
    • First observedemailfolders_mark_all_as_read
    • First observedemailfolders_move
    • First observedemailfolders_rename
    • First observedemailrules_create
    • First observedemailrules_delete
    • First observedemailrules_get
    • First observedemailrules_list
    • First observedemailrules_move_bottom
    • First observedemailrules_move_down
    • First observedemailrules_move_top
    • First observedemailrules_move_up
    • First observedemailrules_update
    • First observedfile_copy
    • First observedfile_create
    • First observedfile_delete
    • First observedfile_download_url
    • First observedfile_get
    • First observedfile_list
    • First observedfile_move
    • First observedfile_rename
    • First observedfile_share
    • First observedfile_update
    • First observedfolder_create
    • First observedfolder_delete
    • First observedfolder_get
    • First observedfolder_get_tree
    • First observedfolder_list
    • First observedfolder_move
    • First observedfolder_rename
    • First observedsearch_contacts
    • First observedsearch_emails
    • First observedsearch_events
    • First observedsearch_files
    • First observedsearch_unified
    • First observedserver_get_version

TDQS

A3.9/5.0

Scored across 85 tools

Disambiguation4/5

Tools are mostly distinct due to clear resource grouping (email_, calendar_, etc.). A few convenience wrappers (email_mark_read, email_flag) overlap with email_update but are well-described as simpler alternatives, causing minimal ambiguity.

Naming Consistency4/5

The naming pattern is consistently resource_action (e.g., email_send, calendar_create_event). Minor inconsistency: some resources use plural (emailfolders_) while others singular (email_, contact_), but the pattern is predictable overall.

Tool Count3/5

85 tools is high but justified by the broad scope of Microsoft 365 coverage (email, calendar, contacts, files, search, account, cache). The number is borderline; some consolidation might be possible, but the tools cover distinct subdomains.

Completeness4/5

The tool surface is comprehensive for the covered subdomains (CRUD operations, search, sharing). Minor gaps exist (e.g., folder sharing, recurring events handling), but core workflows are well-supported.

Maintenance

ActivityInactive
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers