Skip to content

Viral Outliers

by viraloutliers.com · remote · no sign-in to list tools · v1.0.0 · published by com.viraloutliers

Find viral outlier posts on TikTok, Instagram and YouTube, pull creator stats, and crawl on demand.

Deletes · 3Changes · 13

34 tools: 3 can delete or cancel things, 13 change things and 18 only read.

Scanned Oct 21, 2026

4 checks matched something in the tool definitions. No finding is not a safety guarantee. How the checks work.

claude mcp add --transport http viral-outliers https://viraloutliers.com/api/mcp

Findings

Matches of fixed checks, with the text they matched.

4 warn
  • The server marks "find_related_social_media_profiles" as not read-only (readOnlyHint: false), and its words say it reads.

    Matched text

    annotations: {"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":true}; The name "find_related_social_media_profiles" says "find": a word for reading.

    What this check looks for
  • The server marks "delete_viral_alert" not destructive (destructiveHint: false), and its own name, description or input give the class "destructive".

    Matched text

    annotations: {"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false}; The name "delete_viral_alert" says "delete": a word for removing or ending something.

    What this check looks for
  • The server marks "remove_watchlist_profiles" not destructive (destructiveHint: false), and its own name, description or input give the class "destructive".

    Matched text

    annotations: {"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false}; The name "remove_watchlist_profiles" says "remove": a word for removing or ending something.

    What this check looks for
  • The server marks "delete_watchlist" not destructive (destructiveHint: false), and its own name, description or input give the class "destructive".

    Matched text

    annotations: {"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false}; The name "delete_watchlist" says "delete": a word for removing or ending something.

    What this check looks for

Tools

Open a tool for its reasons and full description. Descriptions are the publisher's own words, shown as they are.

34 tools

Deletes or cancels 3Claude Code: deny
  • delete_viral_alertEnds a viral alert by alertId (from list_viral_alerts or create_viral_alert).1 finding

    Why it is in this group

    • The name "delete_viral_alert" says "delete": a word for removing or ending something.
    • The server marks it not destructive (destructiveHint: false), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "delete_viral_alert" not destructive (destructiveHint: false), and its own name, description or input give the class "destructive".

      Matched text

      annotations: {"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false}; The name "delete_viral_alert" says "delete": a word for removing or ending something.

      What this check looks for
    Description, as the server wrote it
    Ends a viral alert by alertId (from list_viral_alerts or create_viral_alert). Free. If this alert is what started the profile's tracking and no other active alert of yours needs it, the paid refresh crawls stop as well; tracking you started yourself with track_profile is left untouched. Returns not_found when the alert does not exist or already ended. Cost: free.

    Annotations the server declares

    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: false
    • openWorldHint: false
  • delete_watchlistDeletes one of your watchlists including its memberships, and frees the watchlist slot and followed-profile slots it used.1 finding

    Why it is in this group

    • The name "delete_watchlist" says "delete": a word for removing or ending something.
    • The server marks it not destructive (destructiveHint: false), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "delete_watchlist" not destructive (destructiveHint: false), and its own name, description or input give the class "destructive".

      Matched text

      annotations: {"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false}; The name "delete_watchlist" says "delete": a word for removing or ending something.

      What this check looks for
    Description, as the server wrote it
    Deletes one of your watchlists including its memberships, and frees the watchlist slot and followed-profile slots it used. Free to call. Works for lists created through the API or in the web app; only the owner can delete a list. Cost: free.

    Annotations the server declares

    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: false
    • openWorldHint: false
  • remove_watchlist_profilesRemoves the given profileIds from a watchlist and returns how many were removed plus the new profile count.1 finding

    Why it is in this group

    • The name "remove_watchlist_profiles" says "remove": a word for removing or ending something.
    • The server marks it not destructive (destructiveHint: false), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "remove_watchlist_profiles" not destructive (destructiveHint: false), and its own name, description or input give the class "destructive".

      Matched text

      annotations: {"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false}; The name "remove_watchlist_profiles" says "remove": a word for removing or ending something.

      What this check looks for
    Description, as the server wrote it
    Removes the given profileIds from a watchlist and returns how many were removed plus the new profile count. Free to call. Use get_watchlist to find the profileIds. Cost: free.

    Annotations the server declares

    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: false
    • openWorldHint: false
Changes things 13Claude Code: ask
  • add_watchlist_profilesAdds creators to one of your watchlists.No findings

    Why it is in this group

    • The name "add_watchlist_profiles" says "add": a word for a change.
    Description, as the server wrote it
    Adds creators to one of your watchlists. Pass profileIds (from search_profiles or any search result) and/or handles as {platform, handle} pairs; up to 25 per call. Creators must already be tracked (crawl_profile first if not; unresolved ones come back in notFound). Already-present creators are reported, not duplicated. Free to call. Each added creator counts against your followed-profiles allowance, which comes from a subscription or is earned from API spend; an over-limit call explains what unlocks more. Cost: free.

    Annotations the server declares

    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: false
    • openWorldHint: false
  • crawl_profileSubmits a public profile for crawling: profile metadata plus its recent posts, stats and thumbnails, after which it stays tracked and appears in searches.No findings

    Why it is in this group

    • The description's first verb is "submit": a word for a change.
    Description, as the server wrote it
    Submits a public profile for crawling: profile metadata plus its recent posts, stats and thumbnails, after which it stays tracked and appears in searches. Asynchronous. Returns a job reference for get_job_status. If the profile is already tracked, this returns immediately without charging a full crawl. Credits are refunded automatically when a crawl fails. Cost: 40 credits per call.

    Annotations the server declares

    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: false
    • openWorldHint: true
  • create_viral_alertCreates a viral alert: we watch a TikTok, Instagram or YouTube profile and email the address you give when it publishes a post whose outlier score (views divided by the profile's o…No findings

    Why it is in this group

    • The name "create_viral_alert" says "create": a word for a change.
    Description, as the server wrote it
    Creates a viral alert: we watch a TikTok, Instagram or YouTube profile and email the address you give when it publishes a post whose outlier score (views divided by the profile's own average) reaches minOutlierScore (default 3, minimum 1.5) within postAgeDays of posting (default 7, max 30). Identify the profile by profileId, platform+handle, or a public URL; it must already be in the database (crawl_profile it first if not). Setting up, listing and deleting alerts is free. Two things cost credits: the refresh crawl that keeps the profile fresh (10 credits per run, daily by default, started for you if you are not already monitoring the profile with track_profile) and each alert email actually sent (5 credits). Limits: one alert email per destination address per day, sent around sendHour in your timezone (defaults 9, UTC) and bundling every alert that fired; 3 emails per alert in total, after which the alert ends; expiresInDays (default 30, max 90) ends it regardless; 25 active alerts per account. A post can trigger an alert only once. Your account email needs no confirmation; any other address receives a confirmation link first and nothing is sent until it is clicked. Every alert email has its own stop link. Calling again for the same profile and address updates the settings instead of creating a duplicate. Cost: free.

    Annotations the server declares

    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: false
    • openWorldHint: true
  • create_watchlistCreates an empty watchlist (a named set of creators) and returns its watchlistId.No findings

    Why it is in this group

    • The name "create_watchlist" says "create": a word for a change.
    Description, as the server wrote it
    Creates an empty watchlist (a named set of creators) and returns its watchlistId. Fill it with add_watchlist_profiles, then pass the id to search_outliers as watchlistId to scope any search to exactly those accounts. Watchlists created here appear in the owner's web app too. Free to call. Watchlists count against a workspace allowance that comes from a subscription or is earned from API spend (every API key holder starts with 1); an over-limit call explains what unlocks more. Cost: free.

    Annotations the server declares

    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: false
    • openWorldHint: false
  • download_post_mediaReturns direct media URLs for a tracked post, the video file, or slideshow images with positions.No findings

    Why it is in this group

    • The name "download_post_media" says "post": a word for a change.
    Description, as the server wrote it
    Returns direct media URLs for a tracked post, the video file, or slideshow images with positions. Accepts a public post URL or an internal post id. When media is not stored yet it queues an on-demand fetch and returns a jobRef to poll (typically ready within ~90 seconds); call again once complete. Platform CDN URLs can expire, so download promptly. YouTube currently returns the thumbnail image. You are responsible for using downloaded media in line with the platforms' terms and applicable law. Cost: 3 credits per call.

    Annotations the server declares

    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: false
    • openWorldHint: true
  • remix_postTakes a post (pass a public post URL or an internal post id) plus a target niche/brand description, and produces an adapted content idea: rewritten title and description, segment-b…No findings

    Why it is in this group

    • The name "remix_post" says "post": a word for a change.
    Description, as the server wrote it
    Takes a post (pass a public post URL or an internal post id) plus a target niche/brand description, and produces an adapted content idea: rewritten title and description, segment-by-segment script, a short analysis of why the original went viral, and an execution checklist, the proven format transplanted into your niche. The URL does NOT need to be tracked: an unknown post is fetched and ingested automatically as part of the job, so any public TikTok/Instagram/YouTube link works with no crawl_profile round-trip. Asynchronous (~1–3 minutes, a few minutes longer for an untracked URL): returns a jobRef; poll get_remix_result until its "remix" field is populated (it returns status + result together). For video posts the remix auto-generates the transcript and visual analysis first, so quality no longer depends on you transcribing beforehand. Credits are refunded automatically if the remix fails. Cost: 20 credits per call.

    Annotations the server declares

    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: false
    • openWorldHint: true
  • report_issueReport a problem with any skill: an error you keep hitting, data that looks wrong or stale, or something you needed that the API could not do.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    Description, as the server wrote it
    Report a problem with any skill: an error you keep hitting, data that looks wrong or stale, or something you needed that the API could not do. Free: never spend credits on telling us something is broken. Include what you called, what you expected and what happened. Set wantsUpdate to true to get an email on your account address when the issue is resolved. Reports go straight to the team. Cost: free.

    Annotations the server declares

    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: false
    • openWorldHint: false
  • request_transcriptQueues AI transcription of the spoken audio for a video post.No findings

    Why it is in this group

    • The name "request_transcript" says "request": a word for a change.
    Description, as the server wrote it
    Queues AI transcription of the spoken audio for a video post. Accepts a public post URL or an internal post id. Asynchronous: returns a job reference to poll with get_job_status; once complete the transcript is attached to get_post responses. Credits are charged on queueing and automatically refunded if the job fails. Image slideshows and photo posts have no audio and are rejected up front with no charge: use request_visual_analysis for their on-screen text instead. Cost: 10 credits per call.

    Annotations the server declares

    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: false
    • openWorldHint: true
  • request_visual_analysisQueues a structured visual analysis for a post: for a video, a scene-by-scene breakdown (per-scene timing, scene type, on-screen text, visual elements and a recreation note) plus a…No findings

    Why it is in this group

    • The name "request_visual_analysis" says "request": a word for a change.
    Description, as the server wrote it
    Queues a structured visual analysis for a post: for a video, a scene-by-scene breakdown (per-scene timing, scene type, on-screen text, visual elements and a recreation note) plus an overall-style summary (color palette, text style, editing pace); for an image slideshow, per-slide text and visual descriptions. Accepts a public post URL or an internal post id. Asynchronous: returns a job reference to poll with get_job_status; once complete the analysis is attached to get_post responses (includeVisualAnalysis). Credits are charged on queueing and automatically refunded if the job fails. This is the visual twin of request_transcript. Cost: 10 credits per call.

    Annotations the server declares

    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: false
    • openWorldHint: true
  • track_profileStarts monitoring a profile so it is automatically re-crawled at a cadence you choose (daily, every_3_days or weekly), keeping its posts and stats fresh without you polling crawl_p…No findings

    Why it is in this group

    • The description's first verb is "start": a word for a change.
    Description, as the server wrote it
    Starts monitoring a profile so it is automatically re-crawled at a cadence you choose (daily, every_3_days or weekly), keeping its posts and stats fresh without you polling crawl_profile. Identify the profile by profileId, platform+handle, or a public profile/post URL. Managing monitoring is free; each scheduled refresh crawl costs credits (10 per refresh) and monitoring pauses itself if your balance runs out, then resumes when you top up. The profile must already be in the database; crawl_profile it first if it is not. Calling again on an already-monitored profile just updates the cadence. Pull the new posts with get_tracked_updates. Cost: free.

    Annotations the server declares

    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: false
    • openWorldHint: true
  • untrack_profileStops monitoring a profile: no further scheduled refresh crawls are charged for it.No findings

    Why it is in this group

    • The description's first verb is "stop": a word for a change.
    Description, as the server wrote it
    Stops monitoring a profile: no further scheduled refresh crawls are charged for it. Free to call. Pass the internal profileId (from list_tracked_profiles or search results). The profile and its already-crawled posts stay in the database and searchable; only the recurring refresh stops. Returns not_found if the profile is not currently being monitored. Cost: free.

    Annotations the server declares

    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: false
    • openWorldHint: false
Only reads 18Claude Code: allow
  • compare_profilesCompares 2–5 tracked profiles (by profile id or platform+handle) and returns each one's stats (follower count, average views/likes across time windows, engagement rate) plus a comp…No findings

    Why it is in this group

    • The name "compare_profiles" says "compare": a word for reading.
    Description, as the server wrote it
    Compares 2–5 tracked profiles (by profile id or platform+handle) and returns each one's stats (follower count, average views/likes across time windows, engagement rate) plus a computed ranking flagging the top performer by followers and by engagement. Pure lookup, fast. Unresolved profiles come back in a notFound list rather than failing the call. Cost: 2 credits per call.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • get_credit_balanceReturns the current API credit balance for the authenticated account, plus the automatic top-up state of the account (autoTopup: configured, enabled, pack, monthly charge cap and c…No findings

    Why it is in this group

    • The name "get_credit_balance" says "get": a word for reading.
    Description, as the server wrote it
    Returns the current API credit balance for the authenticated account, plus the automatic top-up state of the account (autoTopup: configured, enabled, pack, monthly charge cap and count, last error) so an agent can tell whether a zero balance is a hard stop or refills itself on the next billable call. Free to call. Agents should check the balance before starting large batch jobs and surface "insufficient_credits" errors to the user with a link to top up. Cost: free.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • get_job_statusReturns the status of an asynchronous job started by crawl_profile or request_transcript: pending, processing, completed or failed.No findings

    Why it is in this group

    • The name "get_job_status" says "get": a word for reading.
    Description, as the server wrote it
    Returns the status of an asynchronous job started by crawl_profile or request_transcript: pending, processing, completed or failed. Free to call: polling must never cost credits. Poll every 10–30 seconds; jobs typically complete within a few minutes. Cost: free.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • get_postFetch a single post by id: views, likes, comments, engagement rate, outlier scores for seven time windows, thumbnail and the owning profile.No findings

    Why it is in this group

    • The name "get_post" says "get": a word for reading.
    Description, as the server wrote it
    Fetch a single post by id: views, likes, comments, engagement rate, outlier scores for seven time windows, thumbnail and the owning profile. When a transcript or visual analysis already exists it is included at no extra cost. The visual analysis is a structured scene-by-scene breakdown (per-scene timing, on-screen text, visual elements and a recreation note) plus an overall-style summary. Request new enrichment via request_transcript (speech / on-screen text) or request_visual_analysis (scene breakdown). Use after search_outliers to deep-dive a result. Cost: 1 credit per call.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • get_pricingReturns the current price list as structured JSON: the USD value of one credit, every skill with its credit cost and REST route, the one-time credit packs, and every subscription p…No findings

    Why it is in this group

    • The name "get_pricing" says "get": a word for reading.
    Description, as the server wrote it
    Returns the current price list as structured JSON: the USD value of one credit, every skill with its credit cost and REST route, the one-time credit packs, and every subscription plan with its monthly and yearly price, included API credits per month, and watchlist limits. Free and unauthenticated, so an integrator can render live costs to their own users, or an agent can compare subscribing against buying packs, without hardcoding prices or holding an API key. Billable calls also return X-Credits-Charged and X-Credits-Balance response headers, so a reseller can attribute spend per call. Cost: free.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • get_profileFetch one tracked profile by id: follower count, bio, average views/likes/engagement across time windows, and recent tracked posts.No findings

    Why it is in this group

    • The name "get_profile" says "get": a word for reading.
    Description, as the server wrote it
    Fetch one tracked profile by id: follower count, bio, average views/likes/engagement across time windows, and recent tracked posts. The averages are the baseline outlier scores are computed against. Use search_profiles first to resolve a handle to an id. Cost: 1 credit per call.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • get_remix_resultReturns the finished remix for a remix_post job: adapted title, description, script segments, why-it-went-viral analysis (whyItWorks) and checklist.No findings

    Why it is in this group

    • The name "get_remix_result" says "get": a word for reading.
    Description, as the server wrote it
    Returns the finished remix for a remix_post job: adapted title, description, script segments, why-it-went-viral analysis (whyItWorks) and checklist. Free to call. Poll get_job_status until the job reports completed, then fetch here. The result is also viewable in the web app under Content Ideas. Cost: free.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • get_tracked_updatesReturns the posts newly discovered (first stored by our crawler) since your last check, across all the profiles you are monitoring.No findings

    Why it is in this group

    • The name "get_tracked_updates" says "get": a word for reading.
    Description, as the server wrote it
    Returns the posts newly discovered (first stored by our crawler) since your last check, across all the profiles you are monitoring. Free to call. Each call advances a per-profile cursor, so a subsequent call only returns posts crawled after it (a feed, not a re-scan). New posts arrive when a profile's scheduled refresh crawl runs, on the cadence set by track_profile. Results are the same flattened post shape as search_outliers (stats, thumbnail, handle). Total posts are capped (limit 1–100, default 50). Cost: free.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • get_watchlistReturns a single watchlist by watchlistId with every member profile: profileId, handle, platform and follower count.No findings

    Why it is in this group

    • The name "get_watchlist" says "get": a word for reading.
    Description, as the server wrote it
    Returns a single watchlist by watchlistId with every member profile: profileId, handle, platform and follower count. Free to call. Use it to review or explain a list before searching it, or to pick profileIds for remove_watchlist_profiles. Cost: free.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • list_categoriesReturns the curated niche taxonomy (up to four levels, e.g.No findings

    Why it is in this group

    • The name "list_categories" says "list": a word for reading.
    Description, as the server wrote it
    Returns the curated niche taxonomy (up to four levels, e.g. "Health > Exercise > Gym") with, for each category, its id, path, level, parent and how many active profiles are categorized under it including its sub-niches. Only categories with at least minProfiles profiles in their subtree are returned (default 5), so every id you get back yields a real result set. Pass a categoryId to search_outliers, search_profiles or niche_trends to scope them to the creators in that niche; the filter always covers the subtree. Free to call and cached, so call it at the start of a session and reuse the ids. Categories are assigned per creator by our categorizer (reviewed by hand for new niches), which makes this filter more precise than a keyword over captions: it catches creators whose captions are hashtag-only or not in English. Cost: free.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • list_tracked_profilesReturns every profile you are currently monitoring, with its handle, platform, follower count, refresh cadence, next scheduled crawl time, when it was last checked for updates, and…No findings

    Why it is in this group

    • The name "list_tracked_profiles" says "list": a word for reading.
    Description, as the server wrote it
    Returns every profile you are currently monitoring, with its handle, platform, follower count, refresh cadence, next scheduled crawl time, when it was last checked for updates, and any paused reason (e.g. paused for insufficient credits). Free to call. Use it to audit what is being refreshed and what it is costing, or to grab a profileId for untrack_profile. Cost: free.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • list_viral_alertsReturns your viral alerts (active first, then recently ended, up to 100) with the watched profile, destination email and whether it is confirmed, threshold and score window, post a…No findings

    Why it is in this group

    • The name "list_viral_alerts" says "list": a word for reading.
    Description, as the server wrote it
    Returns your viral alerts (active first, then recently ended, up to 100) with the watched profile, destination email and whether it is confirmed, threshold and score window, post age window, preferred send hour and timezone, emails sent out of the cap, paused or ended reason, expiry and the last email time. Free to call. Use it to audit what is being watched, to check whether a third-party address has confirmed, or to grab an alertId for delete_viral_alert. Cost: free.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • list_watchlistsReturns every watchlist on the account (both agent-created and web-app-created) with its watchlistId, name, notes, profile count and last-updated time.No findings

    Why it is in this group

    • The name "list_watchlists" says "list": a word for reading.
    Description, as the server wrote it
    Returns every watchlist on the account (both agent-created and web-app-created) with its watchlistId, name, notes, profile count and last-updated time. Free to call. Use it to recall an id for search_outliers, add_watchlist_profiles or get_watchlist. Cost: free.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • resolve_post_urlTakes a public post URL (TikTok video/photo, Instagram post/reel, YouTube video/short) and resolves it to the tracked post: the entry point when your input is a link.No findings

    Why it is in this group

    • The name "resolve_post_url" says "resolve": a word for reading.
    Description, as the server wrote it
    Takes a public post URL (TikTok video/photo, Instagram post/reel, YouTube video/short) and resolves it to the tracked post: the entry point when your input is a link. found:true returns the postId for get_post, request_transcript, download_post_media and remix_post. found:false tells you whether the whole profile is untracked (call crawl_profile) or just this post. Note that remix_post accepts an untracked URL directly and ingests it itself, so for a remix you can skip this lookup. TikTok/Instagram short links (vm.tiktok.com, /share/) must be expanded to the canonical URL first. Cost: 1 credit per call.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • search_outliersSearch a continuously-crawled database of social media posts ranked by outlier score: how strongly a post overperforms the account's own baseline.No findings

    Why it is in this group

    • The name "search_outliers" says "search": a word for reading.
    Description, as the server wrote it
    Search a continuously-crawled database of social media posts ranked by outlier score: how strongly a post overperforms the account's own baseline. Filter by platform, keyword, exact creator handle, content type, an outlier-score band (min/max), a view band (min/max), a follower band (min/max), an engagement-rate band (min/max) and time window; sort by outlier score, views, likes, engagement or recency. Returns post metadata, stats and thumbnails. Use this to find proven viral formats in any niche before creating content. Results may include deleted posts (deleted_at set) and posts from deactivated profiles (profile is_active=false), these are kept for their thumbnails and format ideas, with stats frozen at deletion; filter on deleted_at / is_active if you only want live content. Cost: 1 credit per 25 posts returned.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • search_profilesSearch tracked social media profiles by handle or name, filtered by platform.No findings

    Why it is in this group

    • The name "search_profiles" says "search": a word for reading.
    Description, as the server wrote it
    Search tracked social media profiles by handle or name, filtered by platform. Returns profile metadata, follower counts and average performance stats. Use it to resolve a handle to a profile id before fetching stats or posts, or to discover creators in the database. Results may include deactivated profiles (is_active=false), e.g. an account that was renamed or went private, retained with frozen stats; filter on is_active if you only want live accounts. Note a creator who changed handles can appear as two rows (old deactivated + new active). Cost: 1 credit per 25 profiles returned.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false

This is not a safety rating, and no finding is not a safety guarantee. The groups and findings come from fixed checks of the tool definitions the server returned on the date shown, not from its code or what it does when called. How the checks work.

Install

Pinned to version 1.0.0. Values in angle brackets are yours to fill in.

claude mcp add --transport http viral-outliers https://viraloutliers.com/api/mcp

Run in a terminal.

Claude Code permissions

Allow the reads, ask before a change, deny the deletes. Paste into .claude/settings.json.

.claude/settings.json
{
  "permissions": {
    "allow": [
      "mcp__viral-outliers__search_outliers",
      "mcp__viral-outliers__search_profiles",
      "mcp__viral-outliers__list_categories",
      "mcp__viral-outliers__get_post",
      "mcp__viral-outliers__get_profile",
      "mcp__viral-outliers__get_job_status",
      "mcp__viral-outliers__get_credit_balance",
      "mcp__viral-outliers__compare_profiles",
      "mcp__viral-outliers__niche_trends",
      "mcp__viral-outliers__resolve_post_url",
      "mcp__viral-outliers__get_remix_result",
      "mcp__viral-outliers__list_tracked_profiles",
      "mcp__viral-outliers__list_viral_alerts",
      "mcp__viral-outliers__list_watchlists",
      "mcp__viral-outliers__get_watchlist",
      "mcp__viral-outliers__get_tracked_updates",
      "mcp__viral-outliers__get_trending_outliers",
      "mcp__viral-outliers__get_pricing"
    ],
    "ask": [
      "mcp__viral-outliers__find_related_social_media_profiles",
      "mcp__viral-outliers__request_transcript",
      "mcp__viral-outliers__request_visual_analysis",
      "mcp__viral-outliers__crawl_profile",
      "mcp__viral-outliers__download_post_media",
      "mcp__viral-outliers__remix_post",
      "mcp__viral-outliers__create_topup_link",
      "mcp__viral-outliers__report_issue",
      "mcp__viral-outliers__track_profile",
      "mcp__viral-outliers__untrack_profile",
      "mcp__viral-outliers__create_viral_alert",
      "mcp__viral-outliers__create_watchlist",
      "mcp__viral-outliers__add_watchlist_profiles"
    ],
    "deny": [
      "mcp__viral-outliers__delete_viral_alert",
      "mcp__viral-outliers__remove_watchlist_profiles",
      "mcp__viral-outliers__delete_watchlist"
    ]
  }
}

Tools that only read are allowed, tools that change things ask first, tools that delete or cancel are denied. It assumes the server is installed as viral-outliers. Review it before you use it.