Skip to main content
Glama

bulk_unsubscribe

Unsubscribe from several mailing lists at once using thread IDs. Sends one-click unsubscribe requests per distinct sender and reports duplicates, failures, and timeouts.

Instructions

Unsubscribe from several mailing lists in one call, one thread id per list. Threads are processed SEQUENTIALLY, and at most ONE request is made per sender — a second thread from a sender whose request already went out is reported with duplicateOf and no request (and says so when it advertises a DIFFERENT endpoint, i.e. is probably a separate list from the same sender). The whole call shares a 60-second budget; threads left over when it runs out come back with skippedOutOfTime and a reason, so re-running with the remaining ids finishes the job. Like unsubscribe, there is no URL parameter: every endpoint comes from that thread's own List-Unsubscribe header. Only RFC 8058 one-click senders are contacted; the rest come back with their alternatives in options. Partial success is reported, never hidden: a thread that cannot be read or whose endpoint fails becomes an entry with a reason, and the remaining threads still run. USE WHEN: clearing out several newsletters at once — pair with list_subscriptions, which gives you the sender rows and their newestThreadId. DO NOT USE: for one thread (use unsubscribe), or to find candidates (use list_subscriptions — it contacts nobody). SIDE EFFECTS: up to one outbound HTTPS request per DISTINCT sender (plus up to 3 redirects each) — the only non-Google hosts mailwarden ever contacts. Each confirms to that sender that the address is live, and none of it can be undone. The mailbox itself is not changed.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
threadIdsYes

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
resultsYes
attemptedYes
requestedYes
unsubscribedYes
skippedOutOfTimeYes
skippedDuplicatesYes
Behavior5/5

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

Beyond the basic readOnlyHint=false annotation, the description richly discloses behavior: sequential processing, one request per sender, duplicateOf handling, 60-second budget with skippedOutOfTime, RFC 8058 only, partial success reporting, and detailed side effects (outbound HTTPS, redirects, address confirmation, irreversibility). No contradiction with annotations.

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

Conciseness5/5

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

While lengthy, every sentence delivers critical information. The structure is logical: purpose, execution details, output behaviors, use cases, and side effects are cleanly separated. It is dense but not wasteful, earning its length.

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

Completeness5/5

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

For a complex mutation tool with external network effects, the description covers all important aspects: inputs, processing model, output semantics, error handling, timeouts, and side effects. With an output schema present, it still describes key response fields (duplicateOf, skippedOutOfTime, options, reason), making the tool fully comprehensible.

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

Parameters5/5

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

Even though the schema only defines threadIds as an array of strings, the description adds substantial meaning: each thread ID corresponds to a list, sequential processing order, per-sender deduplication, timeout behavior, and what happens to unreadable or failed threads. This far exceeds the raw schema.

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

Purpose5/5

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

The description opens with a specific verb and resource: 'Unsubscribe from several mailing lists in one call, one thread id per list.' It clearly distinguishes from siblings by explicitly naming alternatives in the DO NOT USE section: unsubscribe for one thread and list_subscriptions for finding candidates.

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?

Contains explicit USE WHEN and DO NOT USE sections, including when to pair with list_subscriptions and when to avoid this tool in favor of unsubscribe or list_subscriptions. This is exemplary guidance for tool selection.

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

Install Server

Other Tools

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/csitte/mailwarden'

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