Skip to content
verify mcp Beta VerifyMCP is currently in beta. If you notice any issues, get in touch and we’ll put it right.

Prowlo — Reddit & X for AI agents

REMOTE · API.PROWLO.COM · SCANNED SEP 20

Reddit & X data for AI agents over MCP. Semantic search, hosted, no Reddit API.

Available components

0 this week 77 Trust /100

Recent critical change

Authorization (6 Aug 2026). See the changelog before you install this server.

Trust breakdown (7 categories)

How this component scores in each security and reliability category. Every signal is checked automatically against the live server, and we only credit what we can confirm. How we score → Why this is hard to score →

Endpoint Security57
Transport & Reachability100
Schema Quality & AI Usability69
  • AI-judged instruction clarity (excellent).Pass
  • Context-footprint check failed: tool/resource definitions use about 9566 tokens (~195/item across 49 items; 49 tools + 0 resources), over budget; trim descriptions and params. See how to fix → Fail
  • Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management100
  • No destabilizing schema changes in the last 30 days.Pass
Tool Coverage99
  • 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
  • 96% of tool parameters carry a description.Partial
Tool Safety100
  • No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
  • All 6 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation.Pass
  • An AI judge read all 50 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
  • Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass
Install

How do I install the Prowlo — Reddit & X for AI agents MCP server?

Prowlo — Reddit & X for AI agents is a hosted endpoint at https://api.prowlo.com/mcp, so there is nothing to install locally. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

remote · api.prowlo.com

# add to Claude Code
claude mcp add --transport http com-prowlo-reddit-x 'https://api.prowlo.com/mcp'
// .cursor/mcp.json
{
  "mcpServers": {
    "com-prowlo-reddit-x": {
      "url": "https://api.prowlo.com/mcp"
    }
  }
}
// .vscode/mcp.json
{
  "servers": {
    "com-prowlo-reddit-x": {
      "type": "http",
      "url": "https://api.prowlo.com/mcp"
    }
  }
}
# ~/.codex/config.toml
[mcp_servers.com-prowlo-reddit-x]
url = "https://api.prowlo.com/mcp"
// opencode.json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "com-prowlo-reddit-x": {
      "type": "remote",
      "url": "https://api.prowlo.com/mcp",
      "enabled": true
    }
  }
}
# add to OpenClaw
openclaw mcp add com-prowlo-reddit-x --url 'https://api.prowlo.com/mcp' --transport streamable-http
# ~/.hermes/config.yaml
mcp_servers:
  com-prowlo-reddit-x:
    url: "https://api.prowlo.com/mcp"
// ~/.netclaw/config/netclaw.json
{
  "McpServers": {
    "com-prowlo-reddit-x": {
      "Transport": "http",
      "Url": "https://api.prowlo.com/mcp"
    }
  }
}
# add to Vellum
assistant mcp add com-prowlo-reddit-x -t streamable-http -u 'https://api.prowlo.com/mcp'
// mcp.json
{
  "mcpServers": {
    "com-prowlo-reddit-x": {
      "type": "http",
      "url": "https://api.prowlo.com/mcp"
    }
  }
}

The mcpServers block is a cross-client convention. Remote transports vary, so check your client's docs.

Changelog

Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.

  • 10 Sept 26 0
    • New tool “tag_record” functional
  • 9 Sept 26 0
    • Tool “get_alerts” rewrote its description, which is the text the model reads security
    • New tool “get_operational_alerts” functional
  • 8 Sept 26 0
    • Tool “research_get” rewrote its description, which is the text the model reads security
  • 6 Sept 26 0
    • A breaking change shipped without a version bump: still 0.1.0 security
    • Tool “research_run” was removed security
    • Tool “get_product_profile” rewrote its description, which is the text the model reads security
    • New tool “update_product_profile” functional
  • 5 Sept 26 0
    • Stability: 0.97 → pass security
  • 4 Sept 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 93 to 97. That category is still filling its 30-day observation window: 28 days of observed history at the previous scan, 29 at this one. The score rises as the window fills, whether or not the server changes.

  • 3 Sept 26 0
    • Tool “research_run” rewrote its description, which is the text the model reads security
  • 2 Sept 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 87 to 90. That category is still filling its 30-day observation window: 26 days of observed history at the previous scan, 27 at this one. The score rises as the window fills, whether or not the server changes.

Diagnostics

Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.

Captured 20 Sept 2026 · Probed https://api.prowlo.com/mcp

TLS valid

Negotiated TLS 1.3 with TLS_AES_128_GCM_SHA256 .

Subject Issuer Valid from Valid until Key Signature Serial
CN=prowlo.com CN=WE1,O=Google Trust Services,C=US 4 Aug 2026 2 Nov 2026 ECDSA 256 ECDSA-SHA256 ab372b2b3765a476137bf03928cb5aaa
SANs: prowlo.com, *.prowlo.com
CN=WE1,O=Google Trust Services,C=US (CA) CN=GTS Root R4,O=Google Trust Services LLC,C=US 13 Dec 2023 20 Feb 2029 ECDSA 256 ECDSA-SHA384 7ff31977972c224a76155d13b6d685e3
CN=GTS Root R4,O=Google Trust Services LLC,C=US (CA) CN=GlobalSign Root CA,OU=Root CA,O=GlobalSign nv-sa,C=BE 15 Nov 2023 28 Jan 2028 ECDSA 384 SHA256-RSA 7fe530bf331343bedd821610493d8a1b

Background: What to check on a remote MCP endpoint →

DNSSEC insecure

Validation of api.prowlo.com. Not signed

Zone DS Keys Algorithms Outcome
. trust_anchor 20326, 38696 8, 8 Verified
com. present 19718 13 Verified
prowlo.com. absent Unsigned (proven) parent-signed NSEC/NSEC3 proves an unsigned delegation
Authentication No authorisation required

The endpoint answered without asking for a token. Anyone who knows the URL can reach it.

Result No authorisation required
HTTP status 200
Header Value
www-authenticate Bearer realm="mcp", resource_metadata="https://api.prowlo.com/.well-known/oauth-protected-resource/mcp"

Background: How OAuth 2.1 works in the 2026 MCP spec →

Transports 2 probes
Transport URL Outcome Status Location
streamable-http https://api.prowlo.com/mcp Verified 200
http (plaintext) http://api.prowlo.com/mcp HTTPS enforced 301 https://api.prowlo.com/mcp
MCP tools · 49 exposed · ~9,221 tokens

The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →

Tool Tokens
alert_create ~202

Create an Alert. It fires when newly-ingested records match `query`. REQUIRED: `query.any` must have at least one mention term (brand/product/domain) — an alert with no mentions would match every record and is rejected. Per-match by default (one notification per new match, batched); provide `threshold` for volume/spike firing. Delivers to Slack and/or the given webhooks. Not metered. (requires a free Prowlo account — call it to get a signup link)

NameTypeReqDescription
destinationobjectyesAt least one of slack=true or a non-empty webhookIds is required
namestringyesHuman-readable alert name
queryobjectyesRecord match filter (same shape as search_dataset / list_records filters)
statusstringInitial status: "active" (default) or "paused"
thresholdobjectOmit for per-match firing; provide for volume/spike firing

No output schema declared.

No examples provided.

alert_delete ~50

Delete an Alert by id. Not metered. (requires a free Prowlo account — call it to get a signup link)

NameTypeReqDescription
idstringyesAlert id to delete (from alert_list)

No output schema declared.

No examples provided.

alert_get_deliveries ~88

List recent deliveries (fires) for one Alert — what was matched and where it was sent. Not metered. (requires a free Prowlo account — call it to get a signup link)

NameTypeReqDescription
idstringyesAlert id whose deliveries to list (from alert_list)
limitintegerMax deliveries to return, 1-200 (default 50)

No output schema declared.

No examples provided.

alert_list ~56

List your organization’s Alerts (persistent rules that fire to Slack/webhooks when records match). Includes last-delivered time and total deliveries. Not metered. (requires a free Prowlo account — call it to get a signup link)

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

alert_update ~173

Update an Alert (name, query, destination, threshold, or status). Only provided fields change. If `query` is provided it must still include at least one `query.any` mention term. Not metered. (requires a free Prowlo account — call it to get a signup link)

NameTypeReqDescription
destinationobjectAt least one of slack=true or a non-empty webhookIds is required
idstringyesAlert id to update (from alert_list)
namestringNew alert name (rename)
queryobjectRecord match filter (same shape as search_dataset / list_records filters)
statusstringSet status to "active" or "paused"
thresholdobjectOmit for per-match firing; provide for volume/spike firing

No output schema declared.

No examples provided.

catalog_get_subreddit ~396

One subreddit's card from Prowlo's tracked catalog — NOT a live Reddit call. view="stats" (default): subscribers, posts/day, comments/post, postsPerDay is sampled from the subreddit's own newest-100 /new feed (postsPerDaySpanHours = the real span those posts cover; postsPerDaySampleSize; null = not sampled in the last 14 days or fewer than 10 posts), plus activeUsers (online now at the last snapshot), title, subredditType, createdUtc (ISO), lastPostAt (ISO, newest sampled post), distinctPosterRatio (unique posters / sampled posts, 0..1) and sampleSize, growth7d + growth30d (null = not enough tracking history for that window, NOT zero growth), promoTolerance, trackingSince, plus a 5-each preview of similarByContent/similarByAudience. Set includeSeries=true only if you need the raw daily snapshot series (up to 90 points) — the growth fields already summarize it. view="similar": deeper neighbor lists only, up to `limit` each (similarByAudience empty = author overlap not computed yet for this sub — normal, not an error). "Not tracked" does NOT mean unwatchable — watcher_create accepts any subreddit. Free, NOT metered. (requires a free Prowlo account — call it to get a signup link)

NameTypeReqDescription
includeSeriesboolean(view="stats" only) include the daily snapshot series
limitinteger(view="similar" only) max neighbors per list; ignored for view="stats" (preview fixed at 5 each)
namestringyesSubreddit name, with or without r/ prefix
viewstring"stats": full stat card + a 5-each similar preview. "similar": deeper similar-community lists only.

No output schema declared.

No examples provided.

catalog_search_subreddits ~259

Semantic + keyword search over Prowlo's own pre-crawled subreddit catalog (~1,200 tracked, active, non-NSFW communities) — NOT a live Reddit call and NOT your org's Dataset. The same index behind prowlo.com's public Subreddit Finder. Use this FIRST when discovering candidate communities for a product or niche; describe the audience or problem, not just keywords. Returns ranked cards with subscribers, posts/day, 30-day growth, and promoTolerance (low/medium/high; null = not yet profiled, NOT "no restrictions"). Free, cached, NOT metered. Next steps: catalog_get_subreddit for the full stat card, catalog_top_subreddits to browse rankings, watcher_create to start watching. For a LIVE Reddit subreddit search (subs outside this catalog), use social_find_channels (1 credit). For an evidence-backed, ranked report with rules and an engagement plan, use research_run / research_get. (requires a free Prowlo account — call it to get a signup link)

NameTypeReqDescription
limitintegerMax subreddits to return, 1-10 (default 10)
querystringyesProduct/niche/topic to match — a sentence beats a keyword

No output schema declared.

No examples provided.

catalog_top_subreddits ~215

Ranked lists from Prowlo's tracked catalog — NOT a live Reddit call. metric: largest (subscribers), most-active (posts/day sampled from each sub's own /new feed within the last 14 days; unsampled subs sort last), fastest-growing (30-day % — needs ≥30 days of snapshot history; until enough exists the response is available:false with trackingSince — a SUCCESS shape, don't retry; size=all applies a 10,000-member floor and every band requires ≥50 members gained, so tiny denominators can't top the list). Optional size band filters by subscriber count. Cached ~5 min. Free, NOT metered. Good for browsing a category cold or benchmarking a candidate's growth30d against the field; vet picks with catalog_get_subreddit, then watcher_create. (requires a free Prowlo account — call it to get a signup link)

NameTypeReqDescription
limitinteger
metricstring
sizestringSubscriber-count band filter

No output schema declared.

No examples provided.

get_account ~121

Get your Prowlo account details: organization ID + name, your user ID, email, role, plan, account status, and integration state (connected Slack channels, webhook endpoints). Check `integrations` before setting an Alert destination — `destination.slack` only delivers if Slack is connected, and `destination.webhookIds` must reference the webhook ids listed here. Use this to identify your account when contacting support — quote the organizationId so we can find you quickly. (requires a free Prowlo account — call it to get a signup link)

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

get_alerts ~108

(Legacy alias for get_operational_alerts.) Read recent OPERATIONAL alerts — Prowlo's own failures: errored crawl runs (critical) and failed webhook deliveries (warning), merged and time-sorted. NOT the user's configured Alerts: for those, use alert_list. NOT metered. (requires a free Prowlo account — call it to get a signup link)

NameTypeReqDescription
limitintegerMax operational alerts to return, 1-50 (default 20)

No output schema declared.

No examples provided.

get_crawl_activity ~109

Read crawl-run activity: a summary (total runs, errored runs, new posts, matched, stored bytes) plus a paginated list of recent runs with per-run fetched/matched/new/duration and any error. NOT metered. (requires a free Prowlo account — call it to get a signup link)

NameTypeReqDescription
cursorstringPagination cursor from a previous response
limitintegerMax crawl runs to return, 1-100 (default 30)

No output schema declared.

No examples provided.

get_dataset_summary ~88

High-level summary of your Dataset: record count, last ingest time, number of watchers/sources, busiest channels, plus your daily live-read usage and reset time. NOT a live Reddit call — free, rate-limited only. Use this first to understand the size and shape of your archive before querying it. (requires a free Prowlo account — call it to get a signup link)

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

get_operational_alerts ~100

Read recent OPERATIONAL alerts — Prowlo's own failures: errored crawl runs (critical) and failed webhook deliveries (warning), merged and time-sorted. NOT the user's configured Alerts: for those, use alert_list. NOT metered. (requires a free Prowlo account — call it to get a signup link)

NameTypeReqDescription
limitintegerMax operational alerts to return, 1-50 (default 20)

No output schema declared.

No examples provided.

get_product_profile ~60

Get your organization's product profile: name, description, audience, value propositions, tone, reply guidelines, confirmed discovery keywords, and competitors. Useful context for crafting relevant replies. (requires a free Prowlo account — call it to get a signup link)

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

get_record ~72

Fetch one Dataset record by id (full body + intent/embedding signals + tags). NOT a live Reddit call — free, rate-limited only. (requires a free Prowlo account — call it to get a signup link)

NameTypeReqDescription
idstringyesThe record id (from list_records / search_dataset)

No output schema declared.

No examples provided.

get_usage ~179

Get your daily live-read usage: today's passthrough count, your daily cap, and reset time. Live-Reddit reads (social_search, social_list_posts, social_get_post, social_get_user, social_get_user_activity, social_find_channels) count toward a daily cap, charged on success. research_run draws from the AI-credit pool (first run per org free; later runs use credits — the balance is in aiCredits). Internal-data reads (list_records, search_dataset, get_record, list_watchers, get_dataset_summary, get_crawl_activity, get_alerts, get_account), catalog reads (catalog_search_subreddits, catalog_get_subreddit, catalog_top_subreddits) and research_get are NOT metered — only rate-limited. (requires a free Prowlo account — call it to get a signup link)

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

humanize_comment ~343

Rewrite YOUR drafted comment so it reads like a real person typed it, not an AI: strips AI tells, compresses to the 1-2 points that matter, varies rhythm, and lightly "dirties" it (lowercase sentence starts, no markdown). Best AFTER you draft a reply — write the real substance, then humanize it. INPUT RULES for best results: (1) put every fact/number/name you want kept IN the text — it never invents any; (2) keep it to ONE or TWO points — it cuts hard and drops the rest; (3) plain text only — markdown, bullet lists, and em-dashes are stripped; (4) shorter is better, ≤2000 chars; (5) one comment per call, do NOT include the post you are replying to. Pick `character` for the voice. Returns the rewrite, the AI "tells" found in your draft (so you can draft cleaner next time), and remaining daily quota. Output is intentionally imperfect + non-deterministic — do NOT "fix" it or retry for a cleaner version. Free · daily-capped · no Reddit credits. (usable right now without an account, daily-capped per IP)

NameTypeReqDescription
characterstringVoice: straight (plain/direct, default), understated (say less), hottake (opinionated stance), dryexpert (terse expert), punchy (tweet-length).
textstringyesThe drafted comment to humanize, as ONE plain-text comment (no markdown, ≤2000 chars). Every fact you want kept must be in here — it will not invent any.

No output schema declared.

No examples provided.

keyword_create ~436

[DEPRECATED — renamed tag_rule_create. Will be removed after 2026-10-07.] Create TAGGING RULES (the dashboard's 'Tagging rules') — org-wide labels for posts your Watchers already ingest. This does NOT search Reddit: to add a Keyword Monitor entry that searches all of Reddit daily, use keyword_monitor_create instead. Each rule tags records across all your Watchers where the title or body mentions its term as a whole word — "f5bot" matches "f5bot." but not "f5bots". All languages are tagged by default; if the term is also an ordinary word in another language (the Swedish word "syften" means "purposes") and you only care about English posts, pass `languageMode: "non-other"` to skip records confidently detected as non-English. Pass one term as `keyword` or several at once as `keywords`. If you have no Watchers yet, create one first (with at least one subreddit) and then add rules. Changes take effect on the next scheduled processing cycle. Existing opportunity scores and matches are not retroactively updated. (requires a free Prowlo account — call it to get a signup link)

NameTypeReqDescription
descriptionstringWhat this term refers to, e.g. "Syften is a Reddit monitoring SaaS, a competitor". Strongly recommended: matches are verified against this to weed out coincidental hits (the word "syften" also means…
keywordstringA single term or phrase to tag (2-100 characters)
keywordsarraySeveral terms to add in one call (2-100 characters each)
languageModestringLanguage policy, applied to every term in this call. "any" (default) tags matches in every language. "non-other" skips records confidently detected as non-English — use it when the term is also a com…

No output schema declared.

No examples provided.

keyword_delete ~127

[DEPRECATED — renamed tag_rule_delete. Will be removed after 2026-10-07.] Remove a TAGGING RULE (dashboard: 'Tagging rules') and stop it from tagging posts — not a Keyword Monitor entry (those are Watchers; see watcher_delete). This action cannot be undone. Changes take effect on the next scheduled processing cycle. Existing opportunity scores and matches are not retroactively updated. (requires a free Prowlo account — call it to get a signup link)

NameTypeReqDescription
idstringyesThe term to delete (the id returned by tag_rule_list)

No output schema declared.

No examples provided.

keyword_list ~146

[DEPRECATED — renamed tag_rule_list. Will be removed after 2026-10-07.] List your org's TAGGING RULES (the dashboard's 'Tagging rules') — labels applied to posts your Watchers already ingest. NOT the dashboard's Keyword Monitor: for the keywords that search all of Reddit daily, use keyword_monitor_list. Each rule tags matching Dataset records whose title or body mentions its term as a whole word. Returns the term, active status, and match statistics. Changes take effect on the next scheduled processing cycle. Existing opportunity scores and matches are not retroactively updated. (requires a free Prowlo account — call it to get a signup link)

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

keyword_monitor_create ~198

Add a Keyword Monitor entry — searches all of Reddit daily for this query and ingests matches into your Dataset. This is the tool for "track keyword X on Reddit". Draws from your plan's keyword limit (see keyword_monitor_list). Creates a Watcher with platform "reddit_search" under the hood, so watcher_update/watcher_delete manage it afterwards. Not metered. (requires a free Prowlo account — call it to get a signup link)

NameTypeReqDescription
descriptionstringWhat this query refers to, e.g. "Syften is a Reddit monitoring SaaS, a competitor". Strongly recommended: mention verification reads it to weed out coincidental matches.
querystringyesThe search query to monitor across all of Reddit (2-100 characters), e.g. a brand or competitor name
tagsarrayTags applied to every record this entry ingests (shown as chips in the dashboard)

No output schema declared.

No examples provided.

keyword_monitor_list ~118

List your Keyword Monitor entries (the dashboard's "Keywords" page): each searches all of Reddit once a day for its query and ingests matches into your Dataset. Returns your keyword quota (used/max; max -1 = unlimited). Add via keyword_monitor_create; pause via watcher_update; delete via watcher_delete (ids are Watcher ids). NOT the tagging rules — see tag_rule_list. Not a live Reddit call — free, rate-limited only. (requires a free Prowlo account — call it to get a signup link)

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

keyword_update ~235

[DEPRECATED — renamed tag_rule_update. Will be removed after 2026-10-07.] Update a TAGGING RULE (dashboard: 'Tagging rules') — not a Keyword Monitor entry (those are Watchers; see watcher_update). Rename its term (pass `keyword`), set what it refers to (pass `description`), and/or pause/resume it (pass `active`). Renaming keeps already-tagged records on the old tag; new matches use the new term. Changes take effect on the next scheduled processing cycle. Existing opportunity scores and matches are not retroactively updated. (requires a free Prowlo account — call it to get a signup link)

NameTypeReqDescription
activebooleanWhether the rule should be active (true) or paused (false)
descriptionstringWhat this term refers to, used to verify that matches are genuinely about it. Pass an empty string to clear it.
idstringyesThe current term to update (the id returned by tag_rule_list)
keywordstringNew term to rename this rule to (2-100 characters)

No output schema declared.

No examples provided.

list_records ~578

List records in your Dataset (Prowlo’s indexed posts from crawled sources). NOT a live Reddit call — free, rate-limited only. Filter by view (all/matched), subreddits, platforms, tags, keyword, `any` (brand-variant OR-group), include/exclude, intent, score/comments, date range, watcherId. Paginated via cursor. Note: tags / watcherId are record-level, so passing either uses the "matched" view automatically. Records whose keyword match was AI-judged coincidental are hidden by default (pass includeSuppressed:true to see them; each record carries a `verification` field). A filtered page can hold fewer than `limit` items — page until nextCursor is null. Long record bodies are trimmed to keep the page scannable — use get_record for a record’s full body. (requires a free Prowlo account — call it to get a signup link)

NameTypeReqDescription
anyarrayMatch if title/body contains ANY of these terms (brand monitoring → your brand + variants)
cursorstringPagination cursor from a previous response
excludearrayNone of these may appear in title/body
fromstringISO date lower bound (created on platform)
includearrayStricter: EVERY term must appear in title/body
includeSuppressedbooleanInclude records whose keyword match was judged "coincidental" by AI mention verification (the term appeared but the post is not about it). Default false — such records are hidden. Every returned reco…
intentarray(COMING SOON — not yet available) Filter by author intent: BUYING, SELLING, or DISCUSSING. Posts are not intent-classified yet, so this filter currently returns no matches.
keywordstringSingle free-text term in title/body
limitintegerMax records to return, 1-40 (default 25); page with cursor for more
minCommentsintegerMinimum number of comments
minScoreintegerMinimum post score (platform upvotes/points)
platformsarraye.g. ["reddit","hackernews"]
subredditsarrayRestrict to these subreddits/channels (no r/ prefix)
tagsarrayRestrict to records carrying any of these rule tags
tostringISO date upper bound (created on platform)
viewstring"matched" = only records that matched a Watcher rule
watcherIdstringRestrict to records from one of your Watchers (by id)

No output schema declared.

No examples provided.

list_watchers ~119

List the Watchers configured for your organization (the same ones the dashboard manages). Each Watcher shows its sources (platform + channel), paused state, tags (including ones set in the dashboard), record counts, and how many records arrived today. Watchers with platform "reddit_search" are the dashboard's Keyword Monitor entries — for those, the subreddit field holds the search query, not a subreddit. NOT a live Reddit call — free, rate-limited only. (requires a free Prowlo account — call it to get a signup link)

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

research_get ~263

Read the latest Community research report for a product (or a specific runId), or its progress while running. `section` = summary (default: brief, highlights, tiers, evidence counts, other runs) | communities (paginated by `tier`) | content | competitors | voice | plan (threads carry live score/comments/removed state when available) | markdown. Read this BEFORE recommending subreddits or drafting posts/comments for the user. (requires a free Prowlo account — call it to get a signup link)

NameTypeReqDescription
limitinteger(section="communities" only) communities per page, 1-10 (default 3 — each carries its full verified analysis)
offsetinteger(section="communities" only) page offset within the tier
productIdstring(when runId is omitted) which product's latest run; defaults to the primary product
runIdstringA specific run; omit for the latest run of the product
sectionstring
tierinteger(section="communities" only) which tier to return: 1 (best fit, default), 2, 3, or 0 = considered but not recommended

No output schema declared.

No examples provided.

search_dataset ~552

Semantic or keyword search across your Dataset (vector + full-text over your indexed corpus). NOT a live Reddit call — free, rate-limited only. Supports the full record filter: subreddits, platforms, `any` (brand-variant OR-group), include/exclude, intent, score/comments, date range, tags, watcherId. Records whose keyword match was AI-judged coincidental are hidden by default (pass includeSuppressed:true to see them; each record carries a `verification` field). Long record bodies are trimmed to keep results scannable — use get_record for a match’s full body. (requires a free Prowlo account — call it to get a signup link)

NameTypeReqDescription
anyarrayMatch if title/body contains ANY of these terms (brand monitoring → your brand + variants)
cursorstringPagination cursor from a previous response
excludearrayNone of these may appear in title/body
fromstringISO date lower bound (created on platform)
includearrayStricter: EVERY term must appear in title/body
includeSuppressedbooleanInclude records whose keyword match was judged "coincidental" by AI mention verification (the term appeared but the post is not about it). Default false — such records are hidden. Every returned reco…
intentarray(COMING SOON — not yet available) Filter by author intent: BUYING, SELLING, or DISCUSSING. Posts are not intent-classified yet, so this filter currently returns no matches.
limitintegerMax results to return, 1-40 (default 25); page with cursor for more
minCommentsintegerMinimum number of comments
minScoreintegerMinimum post score (platform upvotes/points)
modestringSearch mode: "semantic" (vector) or "keyword" (full-text) (default semantic)
platformsarraye.g. ["reddit","hackernews"]
querystringyesThe search query
subredditsarrayRestrict to these subreddits/channels (no r/ prefix)
tagsarrayRestrict to records carrying any of these rule tags
tierstringSemantic only: "deep" reranks (slower, sharper)
tostringISO date upper bound (created on platform)
watcherIdstringRestrict to records from one of your Watchers (by id)

No output schema declared.

No examples provided.

social_find_channels ~224

Discover or inspect channels (Reddit subreddits) LIVE. Pass `query` to search, or an exact `channel` for its metadata (+ rules via include:["rules"]). Reddit only — hackernews has no channels. 1 credit · read-only. For cached stats, growth history, promo tolerance, and similar-community lists on the ~1,200 subs Prowlo already tracks, use catalog_search_subreddits / catalog_get_subreddit instead — free, no credit; this tool is for live metadata/rules or subreddits outside that catalog. For an evidence-backed, ranked report with rules and an engagement plan, use research_run / research_get. (requires a free Prowlo account — call it to get a signup link)

NameTypeReqDescription
channelstringExact subreddit name for metadata
includearray(reddit, channel mode) extras: "rules"
platformstringyesWhich source to read live: "reddit" or "hackernews".
querystringSearch subreddits by name/topic

No output schema declared.

No examples provided.

social_get_post ~147

Fetch one post/story with its comment thread. id: reddit permalink URL / t3_xxx / bare id; hackernews numeric item id. includeComments (default true), commentLimit≤20. 1 credit · read-only. Reddit comments via RSS are flat/unscored. (requires a free Prowlo account — call it to get a signup link)

NameTypeReqDescription
commentLimitinteger
idstringyesreddit: permalink URL, t3_xxx, or bare id. hackernews: numeric item id.
includeCommentsboolean
platformstringyesWhich source to read live: "reddit" or "hackernews".

No output schema declared.

No examples provided.

social_get_user ~94

Fetch a user profile. reddit: account age, karma, verified-email. hackernews: karma, about, created, submission count. 1 credit · read-only. (requires a free Prowlo account — call it to get a signup link)

NameTypeReqDescription
platformstringyesWhich source to read live: "reddit" or "hackernews".
usernamestringyesUsername, no u/ prefix

No output schema declared.

No examples provided.

social_get_user_activity ~110

Fetch a user's recent submissions or comments. kind=submissions|comments (default submissions). reddit via RSS (newest-first, ~20). 1 credit · read-only. (requires a free Prowlo account — call it to get a signup link)

NameTypeReqDescription
kindstring
limitinteger
platformstringyesWhich source to read live: "reddit" or "hackernews".
usernamestringyesUsername, no u/ prefix

No output schema declared.

No examples provided.

social_list_posts ~217

List posts/stories. platform="reddit": REQUIRES channel (subreddit); sort? hot|new|top|rising|controversial; time? for top/controversial; limit≤20. platform="hackernews": sort carries the ranking top|new|best|ask|show|job (default top); channel ignored; limit≤30. 1 credit · read-only. (requires a free Prowlo account — call it to get a signup link)

NameTypeReqDescription
channelstring(reddit, required) subreddit without r/. Ignored for hackernews.
limitintegerMax items (default 20)
platformstringyesWhich source to read live: "reddit" or "hackernews".
sortstringreddit: hot|new|top|rising|controversial; hackernews: top|new|best|ask|show|job
timestring(reddit) for top/controversial

No output schema declared.

No examples provided.

social_search ~314

Live full-text search of a source. platform="reddit": params query, subreddit? (restrict), sort? (relevance/hot/new/top/comments), time?, limit≤20. platform="hackernews": params query, sort? (relevance/new), tags? (story/ask_hn/show_hn), minPoints?, author?, since? (unix), limit≤20. 1 credit · read-only. Reddit results come via RSS (score/comments may be 0). Long bodies are truncated; fetch a single post for the full text. (requires a free Prowlo account — call it to get a signup link)

NameTypeReqDescription
authorstring(hackernews) author username
limitintegerMax results, 1-20 (default 20)
minPointsinteger(hackernews) minimum points
platformstringyesWhich source to read live: "reddit" or "hackernews".
querystringyesSearch query
sinceinteger(hackernews) only items after this unix ts
sortstringreddit: relevance|hot|new|top|comments; hackernews: relevance|new
subredditstring(reddit) restrict to this subreddit
tagsstring(hackernews) story|ask_hn|show_hn
timestring(reddit) hour|day|week|month|year|all

No output schema declared.

No examples provided.

tag_record ~242

Add tags to ONE record in your Dataset — the same hand-applied tag the dashboard's "+ Tag" action writes. This tags only the record you name; it does NOT create a rule and has no effect on future posts — for "tag everything matching a term", use tag_rule_create instead. `id` is the record id returned by list_records / search_dataset / get_record (a source-item id), not a tagging-rule id. Manual tags are stored separately from crawl-applied tags, so a re-crawl never overwrites them, and they come back in the `tags` field of every read tool and are filterable via the `tags` filter. A manual tag is never AI mention-verified and never fires an Alert — it is your assertion about the post, not a match Prowlo found. Terms are trimmed and lowercased. (requires a free Prowlo account — call it to get a signup link)

NameTypeReqDescription
idstringyesThe record id (from list_records / search_dataset / get_record)
tagsarrayyesTags to add, 1-10. Tags already on the record are kept.

No output schema declared.

No examples provided.

tag_rule_create ~416

Create TAGGING RULES (the dashboard's 'Tagging rules') — org-wide labels for posts your Watchers already ingest. This does NOT search Reddit: to add a Keyword Monitor entry that searches all of Reddit daily, use keyword_monitor_create instead. Each rule tags records across all your Watchers where the title or body mentions its term as a whole word — "f5bot" matches "f5bot." but not "f5bots". All languages are tagged by default; if the term is also an ordinary word in another language (the Swedish word "syften" means "purposes") and you only care about English posts, pass `languageMode: "non-other"` to skip records confidently detected as non-English. Pass one term as `keyword` or several at once as `keywords`. If you have no Watchers yet, create one first (with at least one subreddit) and then add rules. Changes take effect on the next scheduled processing cycle. Existing opportunity scores and matches are not retroactively updated. (requires a free Prowlo account — call it to get a signup link)

NameTypeReqDescription
descriptionstringWhat this term refers to, e.g. "Syften is a Reddit monitoring SaaS, a competitor". Strongly recommended: matches are verified against this to weed out coincidental hits (the word "syften" also means…
keywordstringA single term or phrase to tag (2-100 characters)
keywordsarraySeveral terms to add in one call (2-100 characters each)
languageModestringLanguage policy, applied to every term in this call. "any" (default) tags matches in every language. "non-other" skips records confidently detected as non-English — use it when the term is also a com…

No output schema declared.

No examples provided.

tag_rule_delete ~107

Remove a TAGGING RULE (dashboard: 'Tagging rules') and stop it from tagging posts — not a Keyword Monitor entry (those are Watchers; see watcher_delete). This action cannot be undone. Changes take effect on the next scheduled processing cycle. Existing opportunity scores and matches are not retroactively updated. (requires a free Prowlo account — call it to get a signup link)

NameTypeReqDescription
idstringyesThe term to delete (the id returned by tag_rule_list)

No output schema declared.

No examples provided.

tag_rule_list ~126

List your org's TAGGING RULES (the dashboard's 'Tagging rules') — labels applied to posts your Watchers already ingest. NOT the dashboard's Keyword Monitor: for the keywords that search all of Reddit daily, use keyword_monitor_list. Each rule tags matching Dataset records whose title or body mentions its term as a whole word. Returns the term, active status, and match statistics. Changes take effect on the next scheduled processing cycle. Existing opportunity scores and matches are not retroactively updated. (requires a free Prowlo account — call it to get a signup link)

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

tag_rule_update ~215

Update a TAGGING RULE (dashboard: 'Tagging rules') — not a Keyword Monitor entry (those are Watchers; see watcher_update). Rename its term (pass `keyword`), set what it refers to (pass `description`), and/or pause/resume it (pass `active`). Renaming keeps already-tagged records on the old tag; new matches use the new term. Changes take effect on the next scheduled processing cycle. Existing opportunity scores and matches are not retroactively updated. (requires a free Prowlo account — call it to get a signup link)

NameTypeReqDescription
activebooleanWhether the rule should be active (true) or paused (false)
descriptionstringWhat this term refers to, used to verify that matches are genuinely about it. Pass an empty string to clear it.
idstringyesThe current term to update (the id returned by tag_rule_list)
keywordstringNew term to rename this rule to (2-100 characters)

No output schema declared.

No examples provided.

trend_create ~152

Create a Trend: a saved match query bucketed over time. `interval` is "hour" or "day"; `window` is how far back to compute (e.g. "30d"). Points recompute periodically. Not metered. (requires a free Prowlo account — call it to get a signup link)

NameTypeReqDescription
intervalstringTime bucket size: "hour" or "day" (default day)
namestringyesHuman-readable trend name
queryobjectyesRecord match filter (same shape as search_dataset / list_records filters)
windowstringLook-back window, e.g. "7d", "30d", "90d"

No output schema declared.

No examples provided.

trend_delete ~50

Delete a Trend by id. Not metered. (requires a free Prowlo account — call it to get a signup link)

NameTypeReqDescription
idstringyesTrend id to delete (from trend_list)

No output schema declared.

No examples provided.

trend_get ~91

Get one Trend with its computed time-series points (count + per-intent breakdown per interval bucket). Points are sparse: interval buckets with zero matches are omitted, not stored as 0 — treat missing buckets as zero when charting. Not metered. (requires a free Prowlo account — call it to get a signup link)

NameTypeReqDescription
idstringyesTrend id to fetch (from trend_list)

No output schema declared.

No examples provided.

trend_list ~102

List your organization’s Trends (saved queries that produce a time-series, e.g. brand-mention counts over time). Includes computed point counts. Points are sparse: only interval buckets with at least one matching record are stored, so pointCount can be far below window÷interval — a 30d daily trend with matches on one day has pointCount 1. Not metered. (requires a free Prowlo account — call it to get a signup link)

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

trend_update ~136

Update a Trend (name, query, interval, or window). Only provided fields change. Not metered. (requires a free Prowlo account — call it to get a signup link)

NameTypeReqDescription
idstringyesTrend id to update (from trend_list)
intervalstringTime bucket size: "hour" or "day"
namestringNew trend name (rename)
queryobjectRecord match filter (same shape as search_dataset / list_records filters)
windowstringLook-back window, e.g. "7d", "30d", "90d"

No output schema declared.

No examples provided.

update_product_profile ~452

Update your organization's product profile — the context get_product_profile returns and Prowlo's research and reply features build on. Partial patch: only the fields you pass change; arrays replace the stored list; nullable string fields accept null to clear. Owner/admin API keys only. Saving recomputes the product embedding. Not metered. (requires a free Prowlo account — call it to get a signup link)

NameTypeReqDescription
competitorsarrayREPLACES the competitor set when provided: entries with an id (from get_product_profile) are updated, entries without are created, and existing competitors missing from the list are DELETED. Omit to…
confirmedKeywordsarrayReplaces the confirmed discovery-keyword list (max 12 × 40 chars) and stamps the confirmation time.
differentiatorsWhat sets the product apart from alternatives (max 1000).
personalStoryPro-only. Personal story behind the product, used to ground replies (max 3000).
problemsSolvedThe problems the product solves (max 2000).
productDescriptionWhat the product does (max 2000).
productNameProduct name (max 255). Nullable string fields accept null to clear.
productOneLinerOne-sentence pitch (max 300).
productWebsiteProduct website URL, starting with http:// or https:// (max 500).
replyContentRulesPro-only. Content rules for drafting replies (max 3000).
replyStyleRulesPro-only. Style rules for drafting replies (max 3000).
targetAudienceWho the product is for (max 1000).
targetUseCasesThe use cases the product targets (max 2000).
toneCustomPro-only. Custom tone guidance for replies (max 1000).
tonePresetsarrayPro-only. Replaces the list when provided (max 10 × 50 chars).
valuePropositionsarrayReplaces the full list when provided (max 10 × 500 chars). Omit to leave unchanged.

No output schema declared.

No examples provided.

watcher_add_source ~129

Deprecated: a Watcher watches exactly one community/query. Use watcher_create to watch another community (one Watcher is created per source). Not metered. (requires a free Prowlo account — call it to get a signup link)

NameTypeReqDescription
channelstringThe source channel: subreddit name (no r/), HN query, etc.
platformstringDefaults to "reddit". One of the supported platforms.
subredditstringAlias of `channel` (historical name).
watcherIdstringyesWatcher id (from list_watchers)

No output schema declared.

No examples provided.

watcher_create ~213

Create Watchers — including KEYWORD MONITOR entries (the dashboard's "Keywords" page): pass platform "reddit_search" with the search query as `channel`; each searches all of Reddit daily and draws from its own per-plan keyword limit (keyword_monitor_create is the one-query shortcut). Community watchers (a subreddit or HN feed) are the default platform. A Watcher watches exactly ONE community/query, so each `sources` entry creates its own Watcher (its name is derived from the source, e.g. "r/saas"). Subject to your plan's Watcher limits. Not metered. (requires a free Prowlo account — call it to get a signup link)

NameTypeReqDescription
sourcesarrayyesOne Watcher is created per entry. Each entry needs `channel` (or its alias `subreddit`).
tagsarrayTags applied to every record each created Watcher ingests (shown as chips in the dashboard). Applied to all Watchers created by this call.

No output schema declared.

No examples provided.

watcher_delete ~60

Delete a Watcher by id (also removes its source and records). Not metered. (requires a free Prowlo account — call it to get a signup link)

NameTypeReqDescription
idstringyesWatcher id to delete (from list_watchers)

No output schema declared.

No examples provided.

watcher_remove_source ~97

Remove a source from a Watcher by source id. (A source-less Watcher ingests nothing — usually you want watcher_delete.) Not metered. (requires a free Prowlo account — call it to get a signup link)

NameTypeReqDescription
sourceIdstringyesSource id to remove (from the Watcher’s sources list)
watcherIdstringyesWatcher id the source belongs to (from list_watchers)

No output schema declared.

No examples provided.

watcher_update ~136

Pause/resume a Watcher and/or replace its tags. (Names are derived from the source and cannot be changed.) `tags` replaces the Watcher's plain tags — tags added by conditional tagging rules in the dashboard are unaffected. Not metered. (requires a free Prowlo account — call it to get a signup link)

NameTypeReqDescription
idstringyesWatcher id to update (from list_watchers)
pausedbooleanPause (true) or resume (false) this Watcher
tagsarrayReplace this Watcher's tags (shown as chips in the dashboard). Pass [] to clear them.

No output schema declared.

No examples provided.

Common questions

What is the Prowlo — Reddit & X for AI agents MCP server?

Prowlo — Reddit & X for AI agents is an MCP server listed in the public MCP registry as com.prowlo/reddit-x. Reddit & X data for AI agents over MCP. Semantic search, hosted, no Reddit API. This page covers its hosted endpoint (https://api.prowlo.com/mcp).

Is the Prowlo — Reddit & X for AI agents MCP server safe to use?

Prowlo — Reddit & X for AI agents scores 77 out of 100 on VerifyMCP. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

What tools does the Prowlo — Reddit & X for AI agents MCP server expose?

Prowlo — Reddit & X for AI agents exposes 49 tools: get_product_profile, update_product_profile, tag_rule_list, keyword_list, tag_rule_create, and 44 more. Their descriptions and schemas cost roughly 9,221 tokens of context every time the server is loaded.

Does the Prowlo — Reddit & X for AI agents MCP server require authentication?

No. We connected to Prowlo — Reddit & X for AI agents without credentials and it answered, so anything it exposes is reachable by anyone who knows the address.

Is the Prowlo — Reddit & X for AI agents MCP server still maintained?

Prowlo — Reddit & X for AI agents is still listed as active in the MCP registry. We last reached this channel on 20 September 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.