outlook-mcp
outlook-ews-mcp
outlook-ews-mcp는 EWS(exchangelib)를 통해 온프레미스 Microsoft Exchange용 MCP 서버입니다. MCP 호환 클라이언트(Claude Desktop, Claude Code 및 기타 모든 MCP 클라이언트)가 단일하고 테스트 가능한 Python 서비스를 통해 이메일, 일정, 연락처, 폴더, 첨부 파일 및 가용성 데이터에 액세스할 수 있게 해줍니다. 직접 사서함 스크립팅이 필요 없습니다.
outlook-mcp에서 이름이 변경되었습니다. 해당 이름은 이미 PyPI에서 관련 없는 프로젝트가 사용 중이므로, 배포 및 CLI 이름은 이제outlook-ews-mcp입니다. Python import 경로는 변경되지 않았습니다. 첫 번째 태그된 PyPI 릴리스 전까지는 아래와 같이 이 저장소에서 설치하세요.
목차
Related MCP server: owa-mail-mcp
주요 기능
이메일 — 목록, 검색(부분 문자열 또는 Advanced Query Syntax), 읽기, 보내기, 답장, 전달, 이동, 복사, 삭제, 표시, 분류, 일괄 작업, 원시 MIME 내보내기, 첨부 파일 추가/삭제
시스템 — 받은 편지함 규칙, 부재 중(자동 회신), 읽기 전용 대리인 목록
일정 — 목록, 생성, 업데이트, 삭제, 초대 응답, 빈 시간 찾기, 공유/대리 사서함 일정 보기, Room Finder, 일괄 작업
연락처 — 검색, 읽기, 생성, 업데이트, 삭제
폴더 및 첨부 파일 — 폴더 CRUD 및 첨부 파일 다운로드
인증 — 온프레미스 Exchange에 대한
NTLM및Basic전송 —
stdio및SSE아키텍처 — 단일
ExchangeClient추상화를 통한 중앙 집중식 오류 매핑(프로젝트 참고 사항 참조)안전성 — 기본적으로 개인정보 보호에 더 안전한 스모크 체크(스모크 체크 참조)
운영 — Docker 이미지 및 GitHub 및 GitLab CI/CD 파이프라인 포함
도구 카탈로그
아래의 모든 도구는 이름, 설명 및 스키마의 단일 소스인 tool_specs.py에 등록되어 있습니다. 읽기 전용은 사서함을 수정하지 않는 도구를 표시합니다. 이러한 도구는 더 높은 동시성을 가지며(요청 큐 참조) 추측성 호출에 안전합니다.
시스템
도구 | 설명 | 읽기 전용 |
| Exchange 연결 확인 | ✅ |
| 사서함 메타데이터 가져오기 | ✅ |
| 사서함 대리인 및 해당 폴더 권한 수준 나열 — | ✅ |
| 서버 측 받은 편지함 규칙 나열 | ✅ |
| 서버 측 받은 편지함 규칙 생성(예: "이 보낸 사람 → 폴더로 이동") | |
| 규칙 활성화/비활성화 또는 우선순위 변경(다른 필드는 여기서 업데이트할 수 없음) | |
| ID로 서버 측 받은 편지함 규칙 삭제 | |
| 부재 중(자동 회신) 설정 가져오기 | ✅ |
| 자동 회신 끄기, 켜기 또는 시작/종료 기간 예약 |
⚠️
create_inbox_rule/update_inbox_rule/delete_inbox_rule는 EWS를 통해 규칙을 관리하며, 이는 데스크톱 Outlook이 유지하는 클라이언트 측 규칙 blob을 제거합니다. 이로 인해 사용자가 Outlook 자체에서 만든 규칙이 삭제될 수 있습니다. 이는 문서화된 EWS 동작이며, 여기서의 버그가 아닙니다.
이메일
도구 | 설명 | 읽기 전용 |
| 폴더의 이메일 나열 | ✅ |
| ID로 전체 이메일 가져오기 | ✅ |
| 메시지의 원시 RFC 822 MIME 콘텐츠를 base64로 인코딩하여 내보내기 | ✅ |
| 대화의 모든 메시지를 순서대로 가져오기(본문 포함) | ✅ |
| 부분 문자열(제목/본문/보낸 사람) 또는 서버 측 Advanced Query Syntax로 검색 | ✅ |
| 새 이메일 보내기 | |
| 이메일에 답장 | |
| 이메일 전달 | |
| 이메일을 다른 폴더로 이동 | |
| 이메일을 다른 폴더로 복사 | |
| 항목별 결과가 포함된 일괄 이동 — 잘못된 ID 하나가 나머지를 실패시키지 않음 | |
| 항목별 결과가 포함된 일괄 복사 | |
| 항목별 결과가 포함된 일괄 삭제( | |
| 이메일 삭제 | |
| 읽음 상태, 중요도 또는 후속 조치 플래그 업데이트 | |
| Outlook 범주(색상 레이블) 설정, 추가 또는 제거 | |
|
| |
|
| |
| 최근 메시지에서 샘플링된 사용 중인 범주를 개수와 함께 나열(사서함 마스터 범주 목록 아님) | ✅ |
| 사서함 폴더 나열 | ✅ |
| 사서함 폴더 생성 | |
| 폴더 이름 변경 — 기본 제공 폴더(받은 편지함, 보낸 항목, 일정 등)는 거부 | |
| 폴더 및 그 안의 모든 항목 삭제 — 기본 제공 폴더는 거부 | |
| 이메일 초안 생성 | |
| 초안 업데이트; 생략된 필드는 변경되지 않으며, | |
| 기존 초안 보내기 | |
| 메시지(일반적으로 초안)에 로컬 파일 첨부 — 파일은 | |
| ID로 메시지에서 첨부 파일 하나 제거 | |
| 첨부 파일을 디스크에 저장 | ✅ |
일정
도구 | 설명 | 읽기 전용 |
| 시간 범위의 일정 이벤트를 나열합니다. 동료의 기본 일정을 보려면 | ✅ |
| ID로 일정 이벤트를 가져옵니다. 동료의 일정을 보려면 | ✅ |
| 일정 이벤트를 생성합니다 | |
| 일정 이벤트를 업데이트합니다 | |
| 일정 이벤트를 삭제합니다 | |
| 초대를 수락, 거절 또는 잠정적으로 응답합니다 | |
| 열린 회의 시간 슬롯을 찾습니다 | ✅ |
| 이벤트를 일괄 삭제하고 항목별 결과를 반환합니다 | |
| 초대에 일괄 응답하고 항목별 결과를 반환합니다 | |
| 사용 가능/사용 중 슬롯을 가져옵니다. 동료의 일정을 보려면 | ✅ |
| 일정 목록을 나열합니다 | ✅ |
| Room Finder 회의실 목록(회의실 그룹)을 나열합니다 | ✅ |
| Room Finder 회의실 목록의 회의실을 나열합니다 | ✅ |
연락처
도구 | 설명 | 읽기 전용 |
| 연락처를 검색합니다 | ✅ |
| ID로 연락처를 가져옵니다 | ✅ |
| 개인 연락처를 생성합니다 | |
| 개인 연락처를 업데이트합니다 | |
| 개인 연락처를 삭제합니다 |
일반적인 사용 사례
Claude Desktop 또는 다른 MCP 클라이언트를 온프레미스 Exchange에 연결
받은 편지함 메시지 검색 및 전체 이메일 콘텐츠 가져오기
AI 워크플로에서 이메일 보내기 또는 초안 작성
일정 확인 및 회의 만들기
일정 조정을 위한 사용 가능/사용 중 시간 확인
개인 연락처 또는 전역 주소 목록 검색
직접 사서함 스크립팅 대신 제어된 MCP 경계를 통해 Exchange 작업 노출
보안 참고 사항
현재 코드가 수행하는 작업:
범위가 제한된 연결 |
|
원격 측정 없음 | 원격 측정, 분석 또는 타사 데이터 내보내기 로직이 포함되어 있지 않습니다 |
비밀은 로컬에 유지 | 비밀을 환경 변수 / |
깨끗한 오류 페이로드 | 구조화된 MCP 오류 응답에는 원시 Exchange 예외 텍스트, 메시지 본문, 첨부 파일 콘텐츠 또는 비밀번호가 포함되지 않습니다. 성공한 도구는 요청된 사서함 데이터만 반환합니다 |
깨끗한 로그 |
|
깨끗한 Docker 빌드 |
|
여전히 주의해야 할 사항:
EXCHANGE_VERIFY_SSL=false는 TLS 인증서 검증을 비활성화합니다 — 신뢰할 수 있는 내부/자체 서명 환경에서만 사용하세요.EXCHANGE_AUTH_TYPE=Basic은 자격 증명을 평문으로 전송하므로 서버는http://EXCHANGE_SERVER에 대해 시작을 거부합니다. 직접 제어하는 로컬/테스트 서버에서만EXCHANGE_ALLOW_INSECURE_BASIC_AUTH=true로 재정의하세요.get_attachment는 파일을 디스크에 쓰고,send_email/reply_email/forward_email/create_draft는(attachments를 통해) 로컬 파일을 읽어 그 내용을 발신 메일에 첨부합니다. 신뢰할 수 없는 이메일 콘텐츠와 결합하면 이는 프로세스가 읽을 수 있는 모든 파일의 프롬프트 주입 기반 유출 경로가 될 수 있습니다. 로컬 파일 액세스는 기본적으로 거부되며,EXCHANGE_ATTACHMENT_ROOT가 절대 디렉터리로 설정된 경우에만 작동합니다. 그러면attachments경로와get_attachment의save_path가 모두 해당 디렉터리 트리로 제한됩니다(save_path가 설정되지 않은 경우에도 시스템 임시 디렉터리로 대체됩니다).outlook-ews-mcp-smoke는 기본적으로 개인정보 보호에 안전하며 마스킹된 사서함 정보와 개수만 출력합니다. stdout에 실제 받은 편지함/이벤트 데이터를 명시적으로 원하는 경우에만OUTLOOK_MCP_SMOKE_INCLUDE_DATA=true를 설정하세요.LOG_FILE로 파일 로깅을 활성화하는 경우 OS 권한으로 해당 파일을 보호하세요.CI에서 Docker 이미지를 게시하는 경우 GitLab/GitHub 프로젝트 액세스 및 레지스트리 권한을 보호하세요.
빠른 시작
uv venv
source .venv/bin/activate
uv pip install -e .[dev]
cp .env.example .env
outlook-ews-mcp기본적으로 서버는 stdio 모드로 실행됩니다. 대신 HTTP 서버를 시작하려면 MCP_TRANSPORT=sse를 설정하세요.
구성
시작하기 위한 최소 .env — 아래의 다른 모든 항목은 작동하는 기본값이 있습니다:
EXCHANGE_SERVER=https://mail.company.com/EWS/Exchange.asmx
EXCHANGE_USERNAME=DOMAIN\username
EXCHANGE_PASSWORD=secret
EXCHANGE_EMAIL_ADDRESS=user@company.com
EXCHANGE_AUTH_TYPE=NTLM모든 변수에 대한 완전한 주석이 포함된 사본은 .env.example에 있습니다.
변수 | 기본값 | 설명 |
| (필수) | EWS 엔드포인트 URL, 예: |
| (필수) |
|
| (필수) | 계정 비밀번호 |
| 설정 안 됨 | SMTP 주소; |
|
|
|
|
|
|
|
| 서버의 TLS 인증서 검증; 신뢰할 수 있는 내부/자체 서명 설정에서만 |
| 설정 안 됨 (자동 감지) | Exchange 서버 버전, 예: |
|
| Exchange가 해석 불가능한 GUID 시간대 ID를 보고할 때만 사용됨; 정상 운영에서는 사서함 자체의 기본 시간대 사용 |
|
| 요청당 제한 시간(초) (1–300) |
|
| Exchange가 사용 중임을 보고할 때 읽기 전용 호출에 대한 실제 경과 시간 기반 재시도 예산으로, 재시도 횟수가 아님; |
| 설정 안 됨 | 가장(impersonate)할 사서함 (Exchange 가장 권한 필요) |
|
| 첨부 파일당 최대 크기, 업로드와 |
|
| 단일 send/reply/forward/create_draft 호출의 최대 첨부 파일 수 (1–100) |
|
| 단일 호출의 첨부 파일 총 크기 상한 (1–500) |
| 설정 안 됨 (비활성화) | 첨부 파일 경로를 제한하는 디렉터리. 설정하지 않으면 |
|
|
|
|
| base64 확장 전 원시 MIME 내보내기 크기 상한 (1–100) |
| 설정 안 됨 | 발신 텍스트 본문과 답장/전달에 추가됨. EWS 서명 API가 없으므로 이는 사서함의 Outlook 서명이 아닌 구성 설정임 |
| 설정 안 됨 | 발신 HTML 본문에 추가됨. 위와 동일한 주의 사항; 둘 사이의 상호 변환은 없음. 호출별로 |
|
|
|
|
|
|
|
|
|
|
| 동시 읽기 전용 도구 호출 수 (1–8); 변경 호출은 항상 단독으로 실행됨. 요청 큐 참조 |
|
| 한 번에 수용되는 최대 호출 수(실행 중 + 대기 중) (1–1000); 초과 시 즉시 |
|
|
|
| 설정 안 됨 (stderr) | 로그 파일 경로; 설정 시 OS 권한으로 보호할 것 |
단일 변수에 국한되지 않는 동작 참고 사항:
list_events와find_free_slots는 제한된limit(기본 200, 최대 1000)을 허용하며, 이벤트 범위는 366일, 여유 슬롯 범위는 31일로 제한되므로 광범위한 쿼리가 무제한의 EWS 또는 MCP 응답을 생성할 수 없습니다.목록은 의도적으로 간결하게 유지됩니다: 이메일 요약에는 발신자가 포함되지만 수신자 목록은 포함되지 않으며 (
get_email에 있음),list_events는 본문 없이 이벤트를 반환하고 (get_event에 있음),get_email은include_headers: true일 때만 RFC-822 헤더를 반환합니다.전송 작업은 EWS가 전송된 사본에 대한 영구 ID를 제공하지 않을 때
id: null을 반환합니다 (특히 답장, 전달, 전송된 임시 보관함).첨부 파일 메타데이터에는
downloadable이 포함됩니다. 포함된 Exchange 항목 첨부 파일은downloadable: false이며get_attachment로 저장할 수 없습니다.
요청 큐
클라이언트는 여러 도구 호출을 병렬로 실행합니다. Exchange 작업은 차단(blocking) 방식이므로 서버는 이를 작업자 스레드에서 실행하고 하나의 공유 FIFO 큐를 통해 호출을 수용합니다.
MCP_MAX_CONCURRENCY(기본4)는 한 번에 실행되는 읽기 전용 호출 수를 설정하므로, 에이전트가 이메일, 폴더 목록, 캘린더를 요청할 때 각각의 합계가 아닌 가장 느린 왕복 시간만 부담합니다. 변경 호출은 항상 단독으로 실행됩니다 — 한 번에 하나씩, 읽기와 겹치지 않음 — 따라서 공유 계정 상태에 대한 읽기/쓰기 경합이 발생할 수 없습니다. 한도를 초과한 호출자는 도착 순서대로 차례를 기다립니다. 대기 중인 변경 호출은 이후의 읽기가 이를 추월하지 못하게 차단합니다.MCP_MAX_QUEUE_SIZE(기본20)는 한 번에 수용할 수 있는 호출 수(실행 중 또는 대기 중)를 제한합니다. 이미 그만큼 들어와 있으면 추가 호출은 무제한 큐에 합류하는 대신 즉시server_busy오류를 받습니다.작업이 진행되는 동안 전송 계층은 응답성을 유지합니다. 도구는 이벤트 루프 스레드에서 실행되는 대신 대기(await)되므로 완료된 응답은 즉시 나가고 긴 호출이 실행되는 동안에도 핑에 응답합니다.
의도적으로 호출별 제한 시간이 없습니다. 소켓 읽기에 차단된 스레드는 외부에서 종료할 수 없습니다. 런타임은 대기를 중지할 수만 있으며, 이는 스레드가 보유한 EWS 세션과 함께 스레드를 버리는 것입니다.
exchangelib의 세션 풀에는 하드 최대 한도가 있고 포기 경로 없이 루프에서 세션을 나눠주므로, 누출된 세션은 결국 풀을 고갈시키고 이후 모든 호출이 영원히 차단됩니다. 느린 호출은 대신EXCHANGE_TIMEOUT과EXCHANGE_MAX_RETRY_WAIT_SECONDS로 제한되는 범위 내에서 기다려집니다. 계정의 재시도 정책은 빠른 실패(fail-fast)이므로 모든 EWS 호출은exchangelib가 내부적으로 영원히 재시도하는 대신 첫 번째 일시적 오류에서 예외를 발생시키며,ExchangeClient는 해당 실제 경과 시간 예산으로 제한된 읽기 전용 호출만 자체적으로 재시도합니다. 쓰기는 자동 재시도되지 않습니다. 예상 예산을 초과하는 지연은 로그에 기록됩니다.
Claude Desktop 예시
{
"mcpServers": {
"outlook": {
"command": "outlook-ews-mcp",
"env": {
"EXCHANGE_SERVER": "https://mail.company.com/EWS/Exchange.asmx",
"EXCHANGE_USERNAME": "DOMAIN\\username",
"EXCHANGE_PASSWORD": "secret",
"EXCHANGE_EMAIL_ADDRESS": "user@company.com",
"EXCHANGE_AUTH_TYPE": "NTLM"
}
}
}
}스모크 테스트
.env를 채운 후 다음을 실행하세요:
outlook-ews-mcp-smoke기본 출력은 더 안전한 검증을 위해 정리(sanitize)됩니다. 출력에 샘플 사서함/이벤트 데이터를 의도적으로 포함하려면:
OUTLOOK_MCP_SMOKE_INCLUDE_DATA=true outlook-ews-mcp-smokeDocker
docker build -t outlook-ews-mcp .
docker run --rm --env-file .env outlook-ews-mcpCI/CD
GitHub Actions와 GitLab CI는 모두 pyproject.toml에 고정된 uv 버전을 사용하여 린트, 포맷팅, 타입 검사, 테스트, 의존성
감사, 패키지 빌드를 실행합니다.
GitHub | 또한 OIDC 신뢰 게시(trusted publishing)를 통해 태그가 지정된 릴리스( |
GitLab | 또한 기본 브랜치와 태그에서 내장된 |
기본 이미지 태그 지정 동작:
트리거 | 푸시되는 태그 |
기본 브랜치 |
|
Git 태그 |
|
개발
uv run --python 3.12 --with '.[dev]' ruff check .
uv run --python 3.12 --with '.[dev]' pytest -q프로젝트 참고 사항
구현은 단일
ExchangeClient추상화를 중심으로 이루어져 인증, 전송, 재시도, 오류 매핑이 중앙 집중화됩니다.오류는 MCP
isError=true처리를 위한 구조화된 JSON 형식으로 반환됩니다.
기여하기
버그 리포트와 PR은 언제나 환영합니다 — CONTRIBUTING.md에서 개발 환경을 설정하고 실제 Exchange 서버 없이 테스트 스위트를 실행하는 방법을 확인하세요. 취약점 신고는 SECURITY.md를 참조하세요.
라이선스
MIT — LICENSE 참조.
Available Tools
31 toolscopy_emailC
Copy email to another folder
| Name | Required | Description | Default |
|---|---|---|---|
| kwargs | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description carries the full burden. It only states the basic function without disclosing side effects, permissions, error conditions, or output behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely short (6 words), but this conciseness sacrifices critical information. It is not a model of efficient communication since it omits necessary details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given a single undocumented parameter and no annotations, the description fails to provide enough context for correct invocation. The output schema exists but is not leveraged in the description.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The only parameter 'kwargs' is completely undocumented in both schema and description, with 0% schema description coverage. The description offers no guidance on required keys or values.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('copy') and the resource ('email to another folder'), distinguishing it from sibling tools like 'move_email' which implies relocation rather than duplication.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives (e.g., copy vs. move email). No prerequisites or context provided, leaving the agent to infer usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_contactC
Create a personal contact
| Name | Required | Description | Default |
|---|---|---|---|
| kwargs | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, and the description provides no behavioral details such as authentication requirements, side effects, or error handling. The description is too sparse to be informative.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is minimal (one sentence) but lacks necessary detail. While concise, it fails to provide useful information beyond the tool's name, reducing its effectiveness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the low parameter count, the description should still explain the parameter's structure and expected output. It does not, leaving the agent with no actionable information.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The sole parameter 'kwargs' is opaque with no description or type constraints. With 0% schema description coverage, the description offers no clarification, making it impossible for an agent to know what keys or values are expected.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Create' and the resource 'personal contact'. It distinguishes from sibling tools like 'update_contact' and 'delete_contact', though it does not elaborate on what constitutes a personal contact.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives. No exclusions, prerequisites, or contextual advice provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_draftC
Create an email draft
| Name | Required | Description | Default |
|---|---|---|---|
| kwargs | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, and the description fails to disclose behavioral traits beyond the basic action. It does not mention what the draft entails (e.g., recipients, body) or any side effects, leaving the agent uninformed about critical behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence, which is concise. However, it is too brief to be useful, scoring an average as the brevity comes at the cost of essential information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite having an output schema (not detailed) and a complex domain (email drafts), the description provides no information on return values, how to populate content, or relation to other email tool actions, making it incomplete for effective use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has a single required 'kwargs' parameter with no defined properties and 0% coverage. The description adds no explanation, so the agent cannot understand how to structure the parameter or what keys are expected, making it nearly unusable.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Create') and resource ('email draft'), which is specific. However, given sibling tools like 'send_draft' and 'create_event', it does not differentiate further, but it is still unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives such as 'send_draft' or 'create_event'. The description lacks context for appropriate usage scenarios.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_eventC
Create a calendar event
| Name | Required | Description | Default |
|---|---|---|---|
| kwargs | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, and the description only says 'Create a calendar event'. It does not disclose any behavioral traits such as permissions required, side effects, or what happens if the event already exists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence, but it is under-specified. Conciseness is achieved at the cost of omitting essential information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no annotations, generic parameter, and no explanation of output, the description is insufficient. The agent needs more context to use it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has a single parameter 'kwargs' with no description and 0% schema coverage. The description adds no context about what kwargs should contain, leaving the agent without guidance.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description states 'Create a calendar event', clearly indicating the action (create) and resource (calendar event). However, it does not distinguish from sibling tools like update_event or respond_to_invite, but the verb 'create' is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives like update_event or respond_to_invite. No prerequisites or usage constraints provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_folderC
Create a mailbox folder
| Name | Required | Description | Default |
|---|---|---|---|
| kwargs | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description gives no behavioral details beyond the action. Since no annotations are present, the description should disclose effects (e.g., duplication behavior, permissions, limits), but it does not. This is a significant gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is very short (4 words), but it is under-specification rather than concise. It sacrifices necessary detail for brevity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 0% schema description coverage and no annotations, the description must provide comprehensive context. It fails to explain the 'kwargs' parameter, return value (though output schema exists), or any usage details. Completely inadequate for the tool's complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The sole parameter 'kwargs' is not described in the schema or description. The description adds no meaning to what this parameter should contain, making it impossible for an AI agent to use correctly.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states 'Create a mailbox folder', which clearly identifies the action (create) and resource (mailbox folder). It distinguishes from sibling tools like 'list_folders' or 'move_email' by specifying creation. However, it lacks specificity about which mailbox or folder hierarchy.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives like 'list_folders' for reading or other creation tools. No context on prerequisites or exclusions is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_contactC
Delete a personal contact
| Name | Required | Description | Default |
|---|---|---|---|
| kwargs | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so the description must disclose behavioral traits. It only states 'Delete', which implies destruction, but lacks details on permanence, authorization, 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence, which is concise but at the expense of essential details. It could be restructured to include parameter expectations within the same brevity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the vague input schema, lack of annotations, and many sibling tools, the description fails to provide enough context for correct invocation. The agent is left with critical knowledge gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has a single 'kwargs' parameter with 0% description coverage. The description offers no guidance on what kwargs should contain, leaving the agent unable to construct a valid input.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action 'Delete' and the resource 'personal contact', effectively distinguishing it from sibling tools like create_contact, update_contact, and get_contact.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives. With 30 sibling tools including delete_email and delete_event, the description should clarify its specific scope.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_emailC
Delete an email
| Name | Required | Description | Default |
|---|---|---|---|
| kwargs | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Without annotations, the description carries full burden for behavioral disclosure. It does not specify whether deletion is permanent, moves to trash, or if any confirmation is needed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely short and under-specified. While front-loaded, it fails to provide essential details, making it insufficiently concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given that an output schema exists but no annotations, the description is incomplete. It does not cover key contextual details like deletion behavior or side effects.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The sole parameter 'kwargs' has no description in the schema (0% coverage), and the description adds no meaning beyond the parameter name.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Delete' and resource 'an email', which is specific and distinguishes it from sibling tools like 'delete_contact' or 'delete_event'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives, nor any prerequisites or exclusions. The description gives no context for appropriate usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_eventC
Delete a calendar event
| Name | Required | Description | Default |
|---|---|---|---|
| kwargs | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden but only states it deletes an event. Missing critical details such as irreversibility, required permissions, impact on recurring events, or cancellation notifications.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is very concise (one sentence), but it sacrifices necessary detail. While it states the purpose, it does not earn its place by providing additional value beyond the name.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the number of sibling tools and the generic parameter, the description is insufficient. It does not explain how to use the output schema or how to identify the event, leaving the agent with incomplete guidance.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The only parameter is 'kwargs' with no description or sub-properties. The schema coverage is 0%, and the description adds no meaning to this parameter, leaving the agent without guidance on how to specify the event to delete.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'delete' and the resource 'calendar event', distinguishing it from sibling tools like delete_contact or delete_email. However, it could be more specific by indicating how the event is identified.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives (e.g., respond_to_invite for meeting responses). There is no mention of prerequisites 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.
find_free_slotsD
Find meeting time slots
| Name | Required | Description | Default |
|---|---|---|---|
| kwargs | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must disclose behavioral traits, but it omits whether the tool is read-only, mutating, requires authentication, or has side effects. The agent has zero insight into behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short but severely under-specified. Brevity is wasted without essential details; it does not earn its place by being informative.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no annotations, a meaningless input schema, and no explanation of output (though an output schema exists), the description is completely inadequate for a tool with many siblings and potential complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has a single 'kwargs' parameter with no type or description, and schema description coverage is 0%. The description adds no parameter meaning, leaving the agent blind to required inputs.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Find meeting time slots' is vague and barely extends the tool name. It doesn't specify what inputs are needed (e.g., attendees, date ranges) or output format, and fails to distinguish it from sibling tools like 'get_my_availability'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given on when to use this tool versus alternatives. Sibling tools like 'get_my_availability' and 'list_events' likely overlap, but the description offers no comparative context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
forward_emailC
Forward an email
| Name | Required | Description | Default |
|---|---|---|---|
| kwargs | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description must convey behavioral traits. It does not disclose whether forwarding creates a draft or sends immediately, required permissions, 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
While short, the description is too terse and lacks substance. It fails to earn its place as it provides no actionable information beyond the tool name.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity of email forwarding and the lack of schema detail, the description is severely incomplete. It does not address recipient, body, or attachments, leaving critical gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has a single 'kwargs' parameter with 0% description coverage. The description offers no details on what kwargs should contain, leaving the agent with no guidance.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Forward an email' clearly states the verb and resource, distinguishing it from siblings like reply_email and send_email. However, it is terse and lacks specificity about the forwarding behavior.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives like reply_email or send_draft. There are no exclusions or context for use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_attachmentC
Save an attachment to disk
| Name | Required | Description | Default |
|---|---|---|---|
| kwargs | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description must fully disclose behavior. Only mentions 'save to disk' without indicating side effects, permissions, or whether operation is idempotent. Fails to specify if attachment is deleted after save or if it requires authentication.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One sentence, very short, but lacks essential details. It is concise but at the expense of completeness. Could be improved with brief parameter notes.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite having an output schema, the description is nearly empty. No mention of how to identify the attachment (e.g., attachment ID), expected input format, or return value. Incomplete for a file saving operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Single parameter 'kwargs' is an object with no schema details. Description does not explain what keys or values are needed, leaving the agent without guidance. With 0% schema coverage, this is a critical gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the action 'Save an attachment to disk', which is a specific verb-resource combination. However, it doesn't differentiate from sibling tools like get_email, and the name 'get_attachment' suggests retrieval while description implies download.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives, such as get_email or other retrieval tools. No context about prerequisites or conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_contactC
Get a contact by ID
| Name | Required | Description | Default |
|---|---|---|---|
| kwargs | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It only states the action without mentioning read-only nature, error handling, permissions, or side effects. This is insufficient 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise at one sentence, but it is underspecified. It lacks critical information that would justify its brevity. Structure is simple but not effective.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the vague schema and lack of annotations, the description does not provide enough context. It neither explains the input structure nor the expected output (though an output schema exists). The tool's purpose is clear but operational details are missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% (the 'kwargs' parameter has no described properties). The description says 'by ID' but fails to specify how the ID fits into the input, leaving the agent to guess. The description adds little value beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states 'Get a contact by ID', which identifies the verb and resource. However, the input schema only has a generic 'kwargs' object without an explicit ID field, creating a mismatch between the description and the schema. This reduces clarity about how to use the tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives like search_contacts or get_email. There are no context cues, exclusions, or scenarios mentioned, leaving the agent without decision support.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_emailC
Get a full email by ID
| Name | Required | Description | Default |
|---|---|---|---|
| kwargs | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full responsibility. It only states 'get', implying a read operation, but does not disclose any side effects, permissions needed, or response characteristics.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is very concise at one sentence, front-loading the purpose. However, it sacrifices essential details that could be added without much length.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of an output schema, the description need not explain return values, but it lacks parameter details and usage context. The tool is simple, but the description is too minimal even for a low-complexity tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has one parameter 'kwargs' with no description, and the tool description mentions 'by ID' but does not explain how to pass the ID or what kwargs should contain. Schema coverage is 0%, so the description fails to add meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states 'Get a full email by ID', which clearly indicates the action (get) and the resource (email) with a distinguishing detail (by ID). It differentiates from sibling tools like list_emails or copy_email that 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives like get_attachment or search_emails. No information about prerequisites 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.
get_eventB
Get a calendar event by ID
| Name | Required | Description | Default |
|---|---|---|---|
| kwargs | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, and the description lacks behavioral details such as whether authentication is required, error handling for missing IDs, or read-only nature. The agent gets no transparency beyond the basic purpose.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no wasted words. It could be slightly expanded, but it earns its place for a simple get-by-ID operation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
While an output schema exists, the input parameter is poorly defined. The tool is simple, but the missing parameter guidance makes it incomplete for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has a single 'kwargs' parameter with no description (0% coverage). The description does not explain that kwargs should contain the event ID, leaving the agent uninformed about how to invoke the tool correctly.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Get a calendar event by ID' provides a clear verb ('Get'), resource ('calendar event'), and identifier ('by ID'). It effectively distinguishes this tool from siblings like create_event or update_event.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool versus alternatives, but the purpose is self-evident from the name and description. The agent can infer usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_mailbox_infoC
Get mailbox metadata
| Name | Required | Description | Default |
|---|---|---|---|
| kwargs | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description must carry the full burden. It does not disclose any behavioral traits such as read-only nature, authentication needs, or side effects beyond implying a read operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely short (three words). While brief, it is under-specified and does not provide enough information to be useful, sacrificing completeness for brevity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of a complex opaque parameter (kwargs) and no annotations, the description is incomplete. It fails to explain how to use the tool or what metadata is returned, even though an output schema exists.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 0% description coverage, and the description does not explain the single parameter 'kwargs'. It adds no meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Get mailbox metadata', which is a specific verb+resource. It distinguishes from sibling tools like get_contact or get_email by focusing on mailbox-level metadata. However, the term 'metadata' is somewhat vague.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives like list_folders or get_email. There is no mention of prerequisites, context, or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_my_availabilityC
Get free and busy slots
| Name | Required | Description | Default |
|---|---|---|---|
| kwargs | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It does not disclose whether the tool is read-only, requires authentication, or has any rate limits. The output schema is present but not described, missing 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is too brief at one sentence, sacrificing necessary detail. It lacks structure and front-loading of critical information like input requirements.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Even with an output schema, the description fails to explain the context of 'free and busy slots'—such as time ranges, how slots are defined, or how the output relates to the input. Incomplete for effective use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The only parameter 'kwargs' is a generic object with no description, and the schema coverage is 0%. The description adds no meaning beyond the schema, leaving the agent unable to determine what arguments are required.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Get free and busy slots' clearly states the verb 'Get' and the resource 'free and busy slots', indicating what the tool returns. However, it does not differentiate from the sibling tool 'find_free_slots', which likely serves a similar purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives like 'find_free_slots'. There is no mention of prerequisites, time ranges, or context for the slots.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_calendarsC
List calendars
| Name | Required | Description | Default |
|---|---|---|---|
| kwargs | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, and the description does not disclose any behavioral traits such as pagination, authentication requirements, whether it lists all calendars or only accessible ones, or any side effects. The description carries the full burden and fails completely.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
While the description is extremely concise (two words), it is underspecified and does not provide enough information. Conciseness should not come at the expense of clarity or completeness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity and the existence of an output schema, the description could still provide context such as 'lists all calendars accessible to the user' but does not. The description is incomplete for an agent to understand the tool's functionality.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has one parameter 'kwargs' with no description (schema coverage 0%), and the description does not add any meaning to this parameter. The agent has no idea what 'kwargs' accepts.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'List calendars' clearly states the verb 'List' and resource 'calendars', which is specific and distinguishes it from sibling tools like 'list_emails' or 'list_events' by resource type. However, it does not provide any additional context or differentiation beyond the name.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool, when not to use it, or alternatives. The description is minimal and does not help the agent decide between this and related tools like 'list_events' or 'list_folders'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_emailsD
List emails in a folder
| Name | Required | Description | Default |
|---|---|---|---|
| kwargs | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, and the description does not disclose behavioral traits like authentication requirements, whether the operation is read-only, pagination behavior, or return format. The agent is left uninformed about side effects or constraints.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
At six words, the description is extremely concise, but this brevity sacrifices critical information. It does not earn its place as every sentence should; it is under-specified rather than efficiently informative.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the opaque parameter schema, no annotations, many sibling tools, and an existing output schema not described, the description fails to provide enough context for correct invocation. It lacks details on folder identification, filtering, pagination, or output structure.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The only parameter is 'kwargs' of type object, with no schema-level descriptions and 0% coverage. The description fails to explain what keys or values this parameter should contain, leaving the agent without guidance on how to construct the argument.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'List emails in a folder' clearly states the action and resource, but lacks specificity about which folder or what subset of emails (e.g., all, recent, filtered). It does not distinguish from sibling tools like 'search_emails' which also deal with listing emails.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives such as 'search_emails', 'get_email', or 'list_folders'. The agent has no context on prerequisites or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_eventsC
List calendar events in a time range
| Name | Required | Description | Default |
|---|---|---|---|
| kwargs | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description must fully disclose behavior. It only says 'list events in a time range' but omits details like pagination, ordering, event detail level, or whether it returns all properties. This is insufficient for a list operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence with no extraneous words, but it is too terse and lacks necessary details. Conciseness is achieved at the cost of completeness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity (catch-all parameter, likely output schema present but not described) and lack of annotations, the description is inadequate. It does not explain how to use the tool effectively or what to expect in return.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema defines a single parameter 'kwargs' with 0% description coverage, meaning the schema provides no semantics. The description does not clarify what 'kwargs' accepts or how to specify the time range, leaving the agent with no guidance.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'list', the resource 'calendar events', and the scope 'in a time range'. It distinguishes from sibling tools like list_calendars (which lists calendars) and get_event (which retrieves a single event).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives such as get_event, list_calendars, or find_free_slots. There is no mention of typical use cases or limitations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_foldersC
List mailbox folders
| Name | Required | Description | Default |
|---|---|---|---|
| kwargs | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided; description only says 'list' implying read-only, but lacks details on pagination, error states, 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Too brief and under-specified; a single sentence without structure or additional context, missing critical information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite having an output schema, the description fails to explain the tool's behavior or parameter usage, leaving the agent with insufficient information.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The sole parameter 'kwargs' has no description in schema and the description adds no meaning, leaving the agent without any guidance on how to use it.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states 'List mailbox folders' with a specific verb and resource, clearly distinguishing from sibling tools like 'create_folder' and 'list_emails'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives, such as when to use 'create_folder' or 'list_emails' instead.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mark_emailC
Update email flags
| Name | Required | Description | Default |
|---|---|---|---|
| kwargs | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden of behavioral disclosure. It only states 'Update email flags', implying mutation but does not describe safety, permissions, or effects on the email. Minimal value beyond purpose.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is very concise at one sentence, but it is under-specified. While brevity is appreciated, it lacks structure and important details, making it only minimally acceptable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the opaque input schema and no additional context, the description is incomplete. An output schema exists but does not compensate for the lack of input guidance. The description fails to provide enough information for effective tool invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The only parameter is 'kwargs' with no description inside the schema. Schema coverage is 0%. The tool description adds no meaning about what keys or values are expected, leaving the agent completely in the dark.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Update email flags' clearly states the action and resource, but it is vague regarding what flags are available and how it differs from sibling tools like 'move_email' or 'forward_email'. It lacks specificity to fully differentiate.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives. There is no mention of context, prerequisites, or exclusions, leaving the agent without usage direction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
move_emailC
Move email to another folder
| Name | Required | Description | Default |
|---|---|---|---|
| kwargs | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must cover behavioral traits. It only states 'move' without indicating whether the operation is destructive, if it requires special permissions, or any side effects. This is insufficient for an agent to understand the tool's impact.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is very short and front-loaded, but it lacks structure. It is one sentence with no additional details, which is borderline under-specification rather than conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the lack of annotations and poor parameter documentation, the description fails to provide essential context. Although an output schema exists, the description does not explain return values. The tool's simplicity does not excuse the missing details.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has a single parameter 'kwargs' with 0% description coverage, and the description adds no clarification. The agent has no information on what 'kwargs' should contain, such as the email ID or target folder.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Move email') and the resource ('to another folder'). It distinguishes from sibling tools like 'copy_email' and 'delete_email' by specifying the operation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives. For example, it does not explain when to use 'move_email' instead of 'copy_email' or 'delete_email', leaving the agent without context for selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ping_exchangeC
Check connectivity to Exchange
| Name | Required | Description | Default |
|---|---|---|---|
| kwargs | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description must carry the full burden. It says 'check connectivity' but does not explain whether it makes a live API call, what the response format is, or what happens on timeout/failure. The output schema exists but is not provided here.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise—only one short sentence—but it lacks necessary detail, especially about parameters. It is not a model of efficient communication.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the lack of annotations and poor parameter documentation, the description is incomplete. An agent cannot reliably invoke this tool without additional context about the kwargs structure.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The required parameter 'kwargs' is an object with zero schema description coverage (0%). The description provides no information about what keys or values 'kwargs' should contain, leaving the agent without guidance.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Check connectivity to Exchange' clearly states the tool's purpose with a specific verb and resource. It distinctly differs from sibling tools like copy_email or create_contact.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The purpose is straightforward, but no explicit guidance is given on when to use this tool versus alternatives or any preconditions. The simplicity somewhat mitigates this gap.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
reply_emailC
Reply to an email
| Name | Required | Description | Default |
|---|---|---|---|
| kwargs | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden but only states the action. It fails to disclose behavioral traits such as whether the tool sends the reply immediately, requires authentication, or modifies the original email. No side effects or safety info.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single short sentence, but it is under-specified. Conciseness should not come at the cost of clarity; more details are needed to make it useful.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite having an output schema and sibling tools, the description provides no information about return values, error handling, or prerequisites. The single parameter is opaque, making the tool definition incomplete for practical use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has one parameter, 'kwargs', with 0% description coverage. The description does not clarify what 'kwargs' expects or how to structure it, leaving the agent unable to correctly invoke the tool.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Reply to an email' clearly states the action (reply) and resource (email), differentiating it from siblings like forward_email or create_draft. However, it does not specify whether it replies to all recipients or just the sender, leaving minor ambiguity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives like forward_email or send_draft. No prerequisites or context (e.g., must have an existing email thread) are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
respond_to_inviteC
Respond to a calendar invite
| Name | Required | Description | Default |
|---|---|---|---|
| kwargs | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description must carry full burden. It discloses no behavioral traits (e.g., side effects, idempotency, permissions). Only states the action without context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence, which is concise, but it lacks sufficient substance. It is not well-structured to convey necessary details beyond the tool's basic function.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's likely complexity (responding to an invite with a decision), the description is incomplete. It does not mention required input fields (e.g., invite ID, response type) or expected output, despite an output schema existing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has a single generic 'kwargs' parameter with no description and 0% schema coverage. The description adds no meaning to this parameter, leaving agents with no guidance on what to provide.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states 'Respond to a calendar invite', which gives a verb and resource, but it's vague—does not specify whether it accepts, declines, or tentatively responds. It adds minimal information beyond the tool name.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus siblings like 'update_event' or 'create_event'. No prerequisites or exclusions provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_contactsD
Search contacts
| Name | Required | Description | Default |
|---|---|---|---|
| kwargs | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations and a minimal description, the tool's behavioral traits (e.g., search scope, pagination, output format) are entirely undisclosed. The description provides no value beyond the name.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise (two words) but fails to provide necessary context. It is underspecified rather than efficiently informative, earning a low score.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity (30 sibling tools, no annotations, no schema coverage), the description is woefully incomplete. The presence of an output schema is not leveraged, and critical details are omitted.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has a single parameter 'kwargs' with 0% schema description coverage. The description adds no information about how to use this parameter or what values it expects, leaving the agent blind.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Search contacts' is a tautology that restates the tool name without adding specificity. It does not differentiate from sibling tools like 'get_contact' or 'search_emails', leaving ambiguity about scope or behavior.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives. There are no context signals or exclusions, requiring 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.
search_emailsD
Search emails
| Name | Required | Description | Default |
|---|---|---|---|
| kwargs | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, and the description does not disclose any behavioral traits such as read-only nature, filtering capabilities, or return format. The tool's behavior remains completely opaque.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
At only two words, the description is too brief and lacks necessary detail. While concise, it sacrifices informativeness, which is not a positive attribute in this context.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the absence of annotations, minimal schema, and output schema not described, the description fails to provide adequate context for an AI agent to use the tool effectively. It is completely insufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has one parameter 'kwargs' with 0% description coverage, and the description offers no explanation of its purpose or expected structure. The description adds no value beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Search emails' is clear as a verb+resource, indicating the tool performs a search operation on emails. However, it does not differentiate from sibling tools like 'list_emails' or 'search_contacts', lacking specificity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool over alternatives. For example, it does not clarify how 'search_emails' differs from 'list_emails' or 'search_contacts', leaving the AI agent without direction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
send_draftC
Send a draft email
| Name | Required | Description | Default |
|---|---|---|---|
| kwargs | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must disclose behavioral traits. It fails to mention side effects like whether the draft is deleted after sending, permission requirements, or any irreversible changes. The description only states the action without depth.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
While the description is short, it is under-specified rather than concise. It lacks critical details that could be added without increasing length significantly. Every sentence should earn its place, but this one does not provide enough value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (sending an email with side effects), the description is severely incomplete. It does not explain return values, error states, or behavior changes. Even with an output schema, the description should provide context about the sending process.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has a single parameter 'kwargs' with no description (0% coverage), and the description adds no information about what 'kwargs' should contain. This leaves the agent completely uninformed about required arguments.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Send a draft email' clearly states the verb and resource, indicating the action of sending an email that was previously drafted. It distinguishes from siblings like 'send_email' which sends a new email, though it could be more explicit about operating on an existing draft.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives such as 'send_email' or 'create_draft'. It does not mention prerequisites like having a draft to send, which would help agents decide appropriately.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
send_emailC
Send a new email
| Name | Required | Description | Default |
|---|---|---|---|
| kwargs | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided; description fails to disclose behavioral traits like required permissions, side effects, or error conditions for a mutation operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is very short but under-specified; it is concise but lacks structure and necessary detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool that sends email, the description omits critical context like required fields, output behavior, and differences from siblings, making it incomplete despite an output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema has a single parameter 'kwargs' with no description and 0% schema coverage. The description does not explain what keys or values are expected, adding no semantic value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool sends a new email, but does not differentiate it from sibling tools like forward_email or create_draft.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool vs alternatives such as create_draft or forward_email. No context provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_contactC
Update a personal contact
| Name | Required | Description | Default |
|---|---|---|---|
| kwargs | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must fully disclose behavioral traits. It only says 'update' implying mutation, but does not mention whether updates are partial or full, required permissions, error handling, or side effects. This is insufficient 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Extremely concise (one sentence) but at the expense of completeness. While every word earns its place, the description fails to provide necessary details, making it more under-specified than efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given one parameter with zero description coverage and no annotations, the description is woefully incomplete. It does not explain the return value (though an output schema exists), valid inputs for kwargs, or any constraints. The tool cannot be safely used.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The sole parameter 'kwargs' has no description in the schema (0% coverage), and the description provides no additional meaning. The agent has no idea what keys or values are expected, severely limiting the tool's usability.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Update a personal contact' is a clear verb+resource statement. It identifies the action (update) and the target object (personal contact). However, it does not differentiate from sibling tools like update_event or update_contact's specific scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives like create_contact, delete_contact, or search_contacts. The description lacks any context about prerequisites, required IDs, or typical use cases.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_eventC
Update a calendar event
| Name | Required | Description | Default |
|---|---|---|---|
| kwargs | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description only indicates mutation ('Update') but does not disclose side effects, required permissions, or what happens with overlapping updates. Given no annotations, the description carries the full burden and falls short.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
While the description is very short, it sacrifices essential information. It is under-specified rather than concise, failing to earn its place by being unhelpful.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite the existence of an output schema, the description does not hint at the return structure, and the parameter is opaque. For a tool that updates calendar events, this is severely incomplete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The only parameter 'kwargs' has no description, no properties defined in the schema, and the description adds no meaning. With 0% schema description coverage, the agent has no clue what to pass.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Update') and the resource ('a calendar event'), which is distinct from sibling tools like 'create_event' and 'delete_event'. It is specific and informative.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives like 'respond_to_invite' or under what circumstances updating is appropriate. There is no mention of prerequisites or limitations.
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.
31 tool updates
v0.1.0- First observed
copy_email - First observed
create_contact - First observed
create_draft - First observed
create_event - First observed
create_folder - First observed
delete_contact - First observed
delete_email - First observed
delete_event - First observed
find_free_slots - First observed
forward_email - First observed
get_attachment - First observed
get_contact - First observed
get_email - First observed
get_event - First observed
get_mailbox_info - First observed
get_my_availability - First observed
list_calendars - First observed
list_emails - First observed
list_events - First observed
list_folders - First observed
mark_email - First observed
move_email - First observed
ping_exchange - First observed
reply_email - First observed
respond_to_invite - First observed
search_contacts - First observed
search_emails - First observed
send_draft - First observed
send_email - First observed
update_contact - First observed
update_event
TDQS
Scored across 31 tools
Most tools have distinct purposes, but `find_free_slots` and `get_my_availability` overlap in functionality (both deal with availability). Otherwise, email, calendar, and contact operations are clearly separated.
All tool names follow a consistent `verb_noun` pattern in snake_case (e.g., `create_event`, `list_emails`, `send_email`). No mixing of conventions.
With 31 tools, the server covers email, calendar, contacts, and folders comprehensively. However, the count is on the higher side for a single server, exceeding the typical 3–15 range, though still manageable.
The tool set provides CRUD for emails, events, contacts, and folders, plus search, send, reply, forward, and move. Minor gaps exist (e.g., no attachment creation, no folder update), but core workflows are well-covered.
Maintenance
Related MCP Connectors
Hosted multi-user MCP for Microsoft Exchange - on-premises, hybrid and Online, per-user rights
Hosted email MCP for your own Gmail, Outlook.com, Microsoft 365, iCloud or IMAP inbox: read, search, draft, reply in thread, forward and file mail. It moves or flags up to 500 messages in one call, and a send leaves exactly one copy in Sent. A calendar is a separate connection, and connecting one adds diary and scheduling tools.
Secure MCP server for exploring incwo CRM data, documents, and email workflows.
An MCP server that provides email capabilities, hosted on Alpic platform
Related MCP Servers
- AlicenseAqualityDmaintenanceMCP server for any Microsoft Exchange / OWA deployment. Gives LLM agents access to email, calendar, directory search, folders, availability, and meeting analytics via 30 tools.3026 PyPI10MIT
- FlicenseAqualityBmaintenanceMCP server for corporate Exchange that provides access to email, calendar, and people directory via OWA JSON API.20-
- FlicenseAqualityBmaintenanceMCP server for Claude to access on-premises Outlook/Exchange mailboxes via EWS with NTLM authentication, providing tools for email, calendar, and contact management without relying on Microsoft 365 or Graph API.18-
- AlicenseNot gradedqualityAmaintenanceA local MCP server for on-premises Microsoft Exchange, connecting via EWS and NTLM. It provides mail, template, availability, and calendar workflow tools through stdio, with draft-first safety and Windows Credential Manager integration.7MIT