BuzzGleanBuzzGlean

MCP server

Connect Claude, Cursor and other AI agents to BuzzGlean through the Model Context Protocol.

BuzzGlean runs a remote Model Context Protocol server. Connect it to an AI assistant and ask in plain words: "What did people complain about this week?", "Add our Trustpilot page and create a rule for unhappy reviews" or "Draft a reply to the best lead from yesterday."

  • Server URL (Streamable HTTP): https://signalwatchr-dev.vercel.app/api/mcp
  • Authentication: an API key from API & MCP in the app, sent as Authorization: Bearer YOUR_API_KEY

Set up your client

Create an API key first (see API keys), then replace YOUR_API_KEY in the snippet for your client.

Run in your terminal:

Terminal
claude mcp add --transport http buzzglean https://signalwatchr-dev.vercel.app/api/mcp \
  --header "Authorization: Bearer YOUR_API_KEY"

Any other client that supports remote MCP servers over Streamable HTTP with custom headers works the same way.

Access and limits

  • Scopes: agents only see the tools the key's scopes allow. Use a Read only key for reporting, and Full access only when the agent should change rules, pages or channels.
  • Rate limits: MCP requests share your account's rate limit with the REST API. Tools that run an AI model, such as suggest_comment, also have a limit of 10 calls per minute and 200 per day.
  • Plan limits and credits apply exactly as in the app. When something isn't allowed, the tool returns an error that explains the fix.
  • Audit: every write an agent makes is recorded in the key's activity under API & MCP.

Tools

ToolScopeWhat it does
get_account(read)account:readYour plan, billing state, plan limits and current usage (keywords, pages), today's comment credits and the API rate limit. Use it before creating rules to check remaining keyword capacity.
list_rules(read)rules:readList monitoring rules with their prompt, keywords, keyword platforms (search_keywords_sources), pages (page_ids, see list_pages) and alert channels. Filter by status or text.
get_rule(read)rules:readGet one rule by id with its keywords and sources.
create_rulerules:writeCreate a monitoring rule. prompt_text describes what a relevant post looks like (the AI scores posts against it). page_ids are pages from list_pages / add_pages (fb_group_ids / subreddit_ids are deprecated aliases). Keywords are searched on the platforms in search_keywords_sources (facebook, reddit, x, linkedin, tiktok, youtube; Facebook searches all of Facebook, not just added groups). search_geos picks the countries the searches run from (ISO-2 codes from list_search_countries; empty = anywhere); each country is a separate search and counts as one page per keyword and platform. Only active pages and keywords of active rules count toward plan limits (inactive_page_ids / inactive_keywords don't) — check get_account first.
update_rulerules:writeChange some fields of a rule. Omitted fields keep their current values; arrays you pass replace the current list. To turn pages or keywords off/on without removing them, pass only inactive_page_ids / inactive_keywords. search_geos replaces the countries keyword searches run from (codes from list_search_countries; [] = anywhere; each country counts as one page per keyword and platform). Plan limits are checked on every update.
list_search_countries(read)rules:readCountries (ISO-2 codes) a rule's keyword searches can run from, for search_geos. Searches run from servers in these countries, so results match what people there see. Empty list = only anywhere searches are available.
pause_rulerules:writeStop a rule from matching new posts and sending alerts. Keeps its settings; its pages and keywords stop counting toward plan usage.
resume_rulerules:writeResume a paused rule. Fails with plan_limit_reached if its pages/keywords would exceed the plan.
delete_rule(destructive)rules:writePermanently delete a rule and stop monitoring its sources. Prefer pause_rule if the user may want it back. Confirm with the user first.
list_pages(read)pages:readList monitored pages: Facebook groups, subreddits, review sites, app stores and web pages, with review_status (pending = new site under review) and monitoring status. Use the ids in a rule's page_ids.
add_pagespages:writeAdd pages to monitor by URL (up to 50): Facebook group links (facebook.com/groups/…), subreddits (reddit.com/r/…), review sites, app store listings, blogs or forums. Sites outside the accepted list are reviewed first (review_status pending). Each new page counts toward the plan's page limit. Returns created and existing pages plus per-URL errors with a code (invalid_url, private_host, invalid_fb_group_url, invalid_subreddit_url, duplicate, too_many, plan_limit_reached, ...).
remove_pages(destructive)pages:writeStop monitoring pages (by id from list_pages); rules using them stop monitoring them. Confirm with the user first.
list_channels(read)channels:readList alert channels (email, Slack, Telegram, webhook) and whether they're verified. Secrets are masked.
get_channel(read)channels:readGet one alert channel by id (secrets masked).
create_channelchannels:writeCreate an alert channel. email: sends a verification link to the address. webhook: destination is a public HTTPS URL; webhook_secret (optional) signs requests. slack: destination is an incoming-webhook URL, or leave it empty to get setup.oauth_url that the user opens in a browser (Add to Slack). telegram: returns setup.telegram.deep_link; the user opens it and presses Start.
update_channelchannels:writeChange a channel's destination, status or settings. Changing the destination restarts verification.
test_channelchannels:writeSend a test alert. If the channel isn't set up yet, returns the next step instead (resent email link, Slack oauth_url or Telegram deep_link) for the user to open.
delete_channel(destructive)channels:writeDelete an alert channel. Fails while an active rule uses it (pause the rule or remove the channel from it first). Confirm with the user first.
search_matches(read)feed:readSearch posts the AI matched for the user's rules, newest first. Text is truncated to 500 characters; use get_match or the url for the full post. Sentiments: positive (Positive), neutral (Neutral), negative (Negative). Tags: buy_intent (Buy intent), recommendation_request (Asking for recommendations), alternative_seeking (Looking for alternatives), complaint (Complaint), praise (Praise), question (Question), feedback (Feedback), other (Other).
get_match(read)feed:readGet one match by id with the full post text, AI reason, sentiment and tags.
suggest_commentcomments:writeWrite a reply suggestion for a matched post in the user's voice, in the style of its source (community reply, public review response, app store developer reply). Works for every page type. Costs 1 comment credit (daily quota, see get_account). Pass context to say what the comment should achieve; otherwise the user's default purpose is used.
get_stats_summary(read)stats:readDashboard numbers for a date range: matches vs the previous period, how much noise the AI filtered out, plan usage, comment credits and items needing attention.
get_matches_over_time(read)stats:readMatches per day (UTC) with an optional breakdown: none, platform, rule, result, sentiment, tag. Sentiments: positive (Positive), neutral (Neutral), negative (Negative). Tags: buy_intent (Buy intent), recommendation_request (Asking for recommendations), alternative_seeking (Looking for alternatives), complaint (Complaint), praise (Praise), question (Question), feedback (Feedback), other (Other).
get_source_stats(read)stats:readPer source (page such as a Facebook group, subreddit or review site, or a keyword search): posts collected, keyword hits, matches, match rate. Sort by name, postsCollected, keywordHits, matched, matchRate, lastMatchAt or rulesCount.
get_keyword_stats(read)stats:readPer keyword: hits, matches and match rate — find noisy or useless keywords. Sort by keyword, keywordHits, matched, matchRate or lastMatchAt.
get_rule_stats(read)stats:readPer rule: matches, match rate, alerts sent, comment suggestions, sentiment mix. Sort by name, matched, matchRate, alertsSent, commentSuggestions or lastMatchAt. Sentiments: positive (Positive), neutral (Neutral), negative (Negative). Tags: buy_intent (Buy intent), recommendation_request (Asking for recommendations), alternative_seeking (Looking for alternatives), complaint (Complaint), praise (Praise), question (Question), feedback (Feedback), other (Other).

Tools marked (read) don't change anything. Tools marked (destructive) delete data; many clients ask you to confirm before running them.

Use list_pages, add_pages and remove_pages to manage the sources your rules watch, and pass their ids as page_ids when creating or updating a rule. fb_group_ids and subreddit_ids still work but are deprecated. suggest_comment works for matches from every page type, with a reply style suited to the site.

To search whole platforms (including Facebook) for a rule's keywords, set search_keywords_sources on create_rule or update_rule. To run those searches from specific countries, call list_search_countries for the countries available to you and pass ISO country codes as search_geos (for example ["VN", "TH"]; empty means anywhere). Each country is a separate search and counts as 1 page per keyword and platform.

Resources

ResourceContents
buzzglean://taxonomyThe sentiment and tag values used on matches and in stats.

Prompts

PromptWhat it does
weekly_summaryCombines the week's stats and top matches into a short report: headline numbers vs last week, trends per rule, the most actionable posts with links, and tuning suggestions.

Example requests

Once connected, try:

  • "Summarize my BuzzGlean matches from the last 7 days, grouped by rule."
  • "Find matches tagged buy intent from this week and rank them by relevance."
  • "Which keywords are noisy? Suggest more specific replacements."
  • "Which of my pages are still in review?"
  • "Search Facebook and Reddit for my brand name from Vietnam and Thailand."
  • "Pause the Competitor X rule until Monday."
  • "Draft a helpful reply to the top match, and mention that I work on the product."

Troubleshooting

ProblemFix
invalid_api_keyCheck the key was copied in full and hasn't expired or been revoked.
A tool is missingThe key lacks that scope. Edit the key under API & MCP.
rate_limitedWait for the time in the error, or upgrade for a higher limit.
Writes fail with subscription_requiredYour plan is inactive. See Plans and billing.
A rule change fails with plan_limit_reachedThe change needs more keywords or pages than your plan allows (each keyword searched on a platform, from each country, counts as a page). Ask the assistant to check get_account, remove keywords or sources, or upgrade.

On this page