Skip to main content
Glama

reddit_monitor_update

Modify an existing Reddit monitor: pause or resume it, change poll interval, switch between posts and comments, replace filters, or retarget webhooks.

Instructions

Update an existing monitor: pause/resume it (active), change its poll interval (cadence_s), switch between posts and comments (kind), replace its filter entirely, or re-target which webhook(s) it delivers to (webhook_ids). IMPORTANT: if you pass ANY filter field (subreddit, q, kind, domain, etc.), it REPLACES the whole filter, it does not merge with the existing one -- resupply every field you want kept, including subreddit AND kind (omitting kind reverts that monitor to posts-only). Same rule for webhook_ids: passing it REPLACES the monitor's targeting outright (an empty array clears back to 'every active webhook'); omitting it entirely leaves the monitor's existing targeting untouched. Omit all filter/webhook_ids fields to change only active/cadence_s. Returns 404 monitor_not_found if the id does not exist or is not yours, or 400 webhook_not_found if a webhook_ids entry is not yours.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
qNoFree-text keyword or phrase to match. Matched against the fields in `search_in` (default title+body+url). Omit to match every new post in the watched subreddits.
idYesThe monitor's id, from reddit_monitor_add's response or reddit_monitor_list.
kindNoWhat to watch in the named subreddits: 'post' (default when omitted), 'comment', or 'both'. Comment monitoring requires a Growth, Pro or Scale plan -- on a lower tier this returns `comment_monitoring_requires_higher_tier` (402). Comments run roughly 7x the volume of posts, so expect proportionally more deliveries and check reddit_monitor_health's delivery ceiling before enabling it on a busy subreddit.
nsfwNoSet false to EXCLUDE NSFW/over-18 posts. Omitted or true both mean NSFW is allowed through -- there is no exclude-by-default; you must explicitly pass false to filter it out. POSTS ONLY: nsfw=false is REJECTED with a field-level 400 when kind is 'comment' or 'both', because Reddit flags NSFW on a post and never on an individual comment, so there is no field to filter a comment on. Run a kind='post' monitor to keep NSFW filtering, and cut unwanted comment text with exclude_terms.
groupNoOptional label to bundle multiple matches into one delivery instead of one webhook call per match. Omit for one delivery per matching item.
activeNoSet false to pause the monitor (stops matching/delivering), true to resume it.
authorNoOnly match posts by this Reddit username (without u/).
domainNoOutbound link domains to watch for (e.g. ['example.com']). Matches the post's link URL, any URL inside a self-post/comment body, and a crosspost's original link, including one that only appeared in the original post's body. Exact-or-subdomain match only: 'example.com' matches 'blog.example.com' but never 'notexample.com'. Does NOT resolve shortened links (bit.ly, t.co).
cadence_sNoNew poll interval in seconds, same tier-floor clamping as reddit_monitor_add.
min_scoreNoOnly match posts with at least this many upvotes.
search_inNoWhich fields keyword/term matching is scoped to. Default ['title', 'body', 'url']. Narrow to avoid false positives, e.g. a term that only appears in a URL slug matching a post that never mentions it in prose. All four resolve on comments as well as posts: on a comment, 'title' matches the title of the THREAD the comment sits under (a comment has no title of its own), which also applies through the default scope and can deliver every comment under a busy matching thread. Scope to ['body'] if you only want comments that say the term themselves.
subredditNoSubreddits to watch, without the r/ prefix (e.g. ['SaaS', 'startups']). 1 to 50. OMIT this entirely (and set `q`) to watch ALL of Reddit for a keyword -- a monitor must be anchored by either a subreddit list or a keyword, never neither. Do NOT pass ['all']: r/all is Reddit's site-wide listing rather than a subreddit, so it is refused with 400 subreddit_reserved. Sitewide monitors are capped per plan tier (see reddit_monitor_list's `slots`) and cover POSTS only. On an update, omitting this while passing another filter field makes the monitor SITEWIDE (the filter is replaced wholesale, not merged), so resupply it if you meant to keep the monitor scoped.
include_allNoEVERY one of these terms must appear (AND match) for the post to qualify, on top of any `q`.
include_anyNoAt least ONE of these terms must appear (OR match) for the post to qualify, on top of any `q`.
webhook_idsNoRestrict delivery to specific webhook(s) instead of every active webhook on the account. Pass id(s) from reddit_monitor_webhook_create/reddit_monitor_webhook_list. Omit (or pass an empty array) for the default: deliver to every active webhook you've registered. Every id must be a webhook you own -- returns `webhook_not_found` (400) otherwise.
exclude_termsNoPosts containing any of these terms are suppressed even if they otherwise match. Use to cut noise (e.g. exclude 'giveaway' from a brand-mention monitor).
min_relevanceNoAI relevance floor, 0-100. 0 (the default) is off. Above 0, every match is scored by a language model against this monitor's own keywords and anything below the floor is NOT delivered -- it is recorded in your delivery history with status 'suppressed' and reason 'low_relevance', carrying its score and a one-line explanation, so you can always read what was filtered and why. Nothing is silently discarded. Rough calibration: 80-100 squarely on topic, 50-79 related but peripheral, 20-49 tangential, 0-19 the keyword is used in an unrelated sense. The comparison is inclusive, so a score equal to the floor is delivered. If scoring is unavailable the match is delivered UNSCORED rather than withheld. Requires a Growth, Pro or Scale plan -- on a lower tier this returns `ai_relevance_requires_higher_tier` (402). REJECTED with a field-level 400 on a monitor that has no q, include_any or include_all, because there would be no topic to score an item against and the floor could only ever admit everything.
exclude_subredditsNoSubreddits to SUPPRESS, without the r/ prefix (e.g. ['politics', 'AskReddit']). SITEWIDE MONITORS ONLY: pass this only when you have OMITTED `subreddit` and anchored the monitor with `q`. Passing it together with `subreddit` is rejected with a field-level 400 -- a monitor that names its subreddits should drop the unwanted name from that list instead. Up to 50, matched exactly like `subreddit` so 'r/Politics', '/r/politics' and 'politics' are one entry. This is the noise control for an all-of-Reddit keyword watch: it filters DELIVERY only, so it never changes what is polled, never frees quota, and never affects matching in any other subreddit. Independent of exclude_terms -- an item is dropped if either fires.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Addedv0.5.3

TDQS

A4.6/5.0
Behavior5/5

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

Annotations only declare readOnlyHint=false, destructiveHint=false and openWorldHint=true; the description goes well beyond them by disclosing the replace-not-merge semantics (whole filter and webhook_ids replaced wholesale), what an empty array does (clears to 'every active webhook'), and the exact failure modes (404 monitor_not_found, 400 webhook_not_found). No contradiction with annotations.

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

Conciseness4/5

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

The mutation list is front-loaded, then the critical replace-semantics caveat, then error codes. Dense but every sentence carries distinct information; only slight redundancy in restating the replace rule for both filters and webhook_ids.

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 18 parameters, no output schema and no nested objects, the description supplies exactly what's missing: replacement semantics, defaults on omission, and the two error codes. Nothing an agent needs to invoke this update correctly is absent.

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

Parameters4/5

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

Schema coverage is 100%, so the per-field docs already carry the baseline. The description still adds update-specific meaning the schema alone doesn't foreground: that any filter field replaces the whole filter, that subreddit AND kind must be resupplied, and that omitting webhook_ids leaves targeting untouched. This is genuine added value over the field docs.

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?

Opens with a specific verb+resource ('Update an existing monitor') and then enumerates every mutation axis (active, cadence_s, kind, filter, webhook_ids) with the field name that controls each. An agent can distinguish this from reddit_monitor_add/create and reddit_monitor_remove purely from the first sentence.

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

Usage Guidelines4/5

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

Explicitly tells the agent when to pass filter fields versus not ('Omit all filter/webhook_ids fields to change only active/cadence_s') and warns that omitting `kind` reverts to posts-only. It does not explicitly route to a sibling for the create/delete cases, but the update-only conditions are clear.

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