Skip to main content
Glama
outlook-mcp

outlook-mcp

by ajs117

find_newsletters

Scans an Outlook folder for bulk mail carrying List-Unsubscribe headers and reports how each sender can be unsubscribed, grouped by sender with read/unread counts.

Instructions

Scan a folder for bulk mail (messages carrying a List-Unsubscribe header) and report how each sender can be unsubscribed.

Grouped by sender by default, because unsubscribing is per sender while the underlying listing is per message — the ungrouped form makes the model dedupe 200 rows by hand to reach the ~50 decisions that actually exist. Each row carries read/unread counts so a sender can be judged on engagement rather than on what its name suggests.

IMPORTANT: the List-Unsubscribe header marks a bulk sender, not junk. Order confirmations, delivery updates, statements and voucher codes all carry it. Treat this as a list of candidates to show the user, never as a list to sweep.

Returns {checked, headers_ok, header_fetch_failed, newsletter_messages, senders: [...]}. The header counts are there so a discrepancy between this and bulk_by_query(only_newsletters=True) is visible rather than mysterious: header sub-requests that fail are silently dropped from the scan.

Args: folder: folder id or well-known name. max_check: how many recent messages to scan. group_by_sender: set False for the raw per-message rows.

Input Schema

NameRequiredDescriptionDefault
folderNoinbox
max_checkNo
group_by_senderNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observedv0.1.0

TDQS

A4.6/5.0
Behavior5/5

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

No annotations exist, so the description carries the full burden and does: it discloses that failing header sub-requests are silently dropped, explains the resulting discrepancy against bulk_by_query(only_newsletters=True), and warns that the List-Unsubscribe header marks bulk senders rather than junk. This is exactly the kind of failure-mode and misinterpretation context an agent needs.

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 action and the detection rule, then the IMPORTANT caveat, then the return shape, then args — a sound ordering. It runs a little long, and the sentence about the model deduping 200 rows by hand is motivational rather than operational, but nothing is padding.

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

Completeness5/5

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

With no annotations and no output schema, the description supplies the return shape ({checked, headers_ok, header_fetch_failed, newsletter_messages, senders}), the rationale for those fields, and the semantic trap to avoid. Nothing an agent needs in order to call it or interpret it is missing.

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

Parameters4/5

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

Schema description coverage is 0%, so the description must compensate, and it documents all three parameters: folder accepts an id or well-known name, max_check bounds how many recent messages are scanned, and group_by_sender=False yields raw per-message rows. It does not give an example of a well-known folder name, which would have closed the gap fully.

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

Purpose5/5

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

States a specific verb and resource ('Scan a folder for bulk mail... and report how each sender can be unsubscribed') and pins down the detection criterion (List-Unsubscribe header). It is clearly distinct from unsubscribe/unsubscribe_many (discovery, not action) and from bulk_by_query, which it names explicitly.

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

Usage Guidelines4/5

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

Gives a strong exclusion ('Treat this as a list of candidates to show the user, never as a list to sweep') and explains why grouping is the default and when to set group_by_sender=False. It stops short of explicitly naming the sibling that performs the unsubscribe, leaving that hop implicit.

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