Skip to main content
Glama
outlook-rag

outlook-rag

search_emails

Read-only

Searches all indexed Outlook stores, including PST archives, using semantic, hybrid, lexical, identifier, metadata, or thread modes with filters for sender, recipient, folder, dates, and attachments.

Instructions

Search ALL indexed Outlook stores including PST archives by default. Leave folder/since/until unset unless explicitly restricted; never assume inbox-only/recent scope. Check search_scope and coverage before declaring absence. mode: semantic, hybrid (default BM25 + vector), lexical, identifier (one literal ID), auto, metadata (SQL lists, no model), thread (hybrid + scoped chronological originals). For attribute lists use metadata with query=''; subject/cursor are metadata-only. sender matches name/address, recipient matches To/CC in all modes, folder accepts wildcards or trailing slash prefixes, has_attachments filters indexed metadata. Message-ID deduplication defaults on; false shows every copy. Continue metadata pages with next_cursor and identical filters. Thread context is bounded original evidence, not a generated decision summary; read originals when truncated. Attachment matches include attachment_name when enabled. since/until are inclusive local calendar dates; min_similarity (-1..1) is calibrated cosine, not confidence.

Input Schema

NameRequiredDescriptionDefault
modeNo
limitNo
queryYes
sinceNo
untilNo
cursorNo
folderNo
hybridNo
senderNo
subjectNo
recipientNo
deduplicateNo
min_similarityNo
group_by_threadNo
has_attachmentsNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observedv0.9.4

TDQS

A4.4/5.0
Behavior5/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, and the description adds substantial behavior on top: message-ID deduplication is on by default, pagination continues via next_cursor with identical filters, thread context is bounded original evidence rather than a generated summary, and truncated threads require reading originals.

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

Conciseness4/5

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

Front-loaded with the highest-risk caveat (scope defaults) and then organized into short, discrete clauses with no filler. It is dense and long, but every clause maps to a real parameter or failure mode given 15 parameters; nothing is redundant with the schema.

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

Completeness4/5

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

For a 15-parameter tool with no output schema, this covers scope, mode selection, pagination, and the caveats an agent would otherwise get wrong. It references return concepts (search_scope, coverage, next_cursor) without specifying the result shape, which is the main remaining gap.

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

Parameters4/5

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

With 0% schema description coverage the description must carry the load, and it does for most parameters: folder wildcards and trailing-slash prefixes, sender/recipient matching semantics, has_attachments, deduplicate, since/until inclusive local calendar dates, min_similarity calibrated cosine in -1..1, and cursor continuation. However, `limit` and `hybrid` (despite appearing in the mode breakdown) are never explained directly.

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

Purpose4/5

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

States a specific verb+resource (search emails) and immediately pins down scope: all indexed Outlook stores including PST archives, explicitly not inbox-only or recent-only. It does not name sibling tools like get_mail_thread or get_indexed_mail, but the enumerated modes and the 'search ALL stores' framing make the boundary inferable.

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

Usage Guidelines5/5

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

Gives explicit conditional guidance: leave folder/since/until unset unless explicitly restricted, never assume inbox-only scope, check search_scope and coverage before declaring absence. It also tells the agent which mode to pick for which task (metadata for attribute lists, identifier for a literal ID, thread for chronological originals).

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