Viral Outliers is a remote MCP server that gives an AI agent 29 tools, among them add_watchlist_profiles, compare_profiles, crawl_profile. It answers at https://viraloutliers.com/api/mcp over streamable HTTP, and it listed its tools to an anonymous client, so no sign-in was needed for that. Our probes reached it 6 of 6 times since 10 September 2026; the last check, on 19 October 2026, succeeded.
Find viral outlier posts on TikTok, Instagram and YouTube, pull creator stats, and crawl on demand.
Description as the publisher wrote it.
| Tool | What it does |
|---|---|
add_watchlist_profiles | 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 one Inputs: watchlistId, profileIds, handles |
compare_profiles | 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 Inputs: profileIds, handles |
crawl_profile | 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 t Inputs: platform, handle |
create_topup_link | Creates a Stripe Checkout link for a credit pack, so when the balance runs out mid-task you can hand the account owner a one-click payment link instead of instructions. Credits land within seconds of payment. Free to call (5 links/hour); li Inputs: packId |
create_watchlist | 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 Inputs: name, notes |
delete_watchlist | 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 Inputs: watchlistId |
download_post_media | 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 (typi Inputs: postId, url |
get_credit_balance | Returns the current API credit balance for the authenticated account. 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. |
get_job_status | 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 fe Inputs: jobRef |
get_post | 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 ana Inputs: postId, includeTranscript, includeVisualAnalysis |
get_pricing | 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 the monthly plan allowances. Free and unauthenticated, so an integrator can rend |
get_profile | 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 ha Inputs: profileId, platform, handle |
get_remix_result | 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 res Inputs: jobRef |
get_tracked_updates | 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 Inputs: limit |
get_trending_outliers | Returns the current top trending outlier posts across TikTok, Instagram and YouTube, deduplicated to one per creator. Free and unauthenticated (rate-limited per IP; cached ~2 hours). A taste of the database. For filtered search, transcripts |
get_watchlist | 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. Inputs: watchlistId |
list_tracked_profiles | 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). F |
list_watchlists | 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_ |
niche_trends | Returns the top overperforming posts in a niche over a recent window (default one week), plus a breakdown of which content types are driving the trend and which creators are represented. Filter by keyword and platform. Great as the first ca Inputs: query, platforms, timeFrame, limit |
remix_post | 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 Inputs: postId, url, targetNiche, tone |
remove_watchlist_profiles | 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. Inputs: watchlistId, profileIds |
report_issue | 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 ex Inputs: message, skill, wantsUpdate |
request_transcript | 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 response Inputs: postId, url |
request_visual_analysis | 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 Inputs: postId, url |
resolve_post_url | 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_ Inputs: url |
search_outliers | 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/m Inputs: query, platforms, contentTypes, handle, watchlistId, minOutlierScore |
search_profiles | 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 Inputs: query, platforms, page, pageSize |
track_profile | 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, Inputs: profileId, platform, handle, url, frequency |
untrack_profile | 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 Inputs: profileId |
Every block below points at https://viraloutliers.com/api/mcp. Pick your client and copy.
claude mcp add --transport http viral-outliers https://viraloutliers.com/api/mcp
{
"mcpServers": {
"viral-outliers": {
"command": "npx",
"args": ["-y", "mcp-remote", "https://viraloutliers.com/api/mcp"]
}
}
}{
"mcpServers": {
"viral-outliers": {
"url": "https://viraloutliers.com/api/mcp"
}
}
}{
"servers": {
"viral-outliers": {
"type": "http",
"url": "https://viraloutliers.com/api/mcp"
}
}
}{
"context_servers": {
"viral-outliers": {
"url": "https://viraloutliers.com/api/mcp"
}
}
}{
"mcpServers": {
"viral-outliers": {
"serverUrl": "https://viraloutliers.com/api/mcp"
}
}
}{
"mcpServers": {
"viral-outliers": {
"url": "https://viraloutliers.com/api/mcp"
}
}
}name: Viral Outliers
version: 0.0.1
schema: v1
mcpServers:
- name: Viral Outliers
type: streamable-http
url: https://viraloutliers.com/api/mcp{
"mcpServers": {
"viral-outliers": {
"httpUrl": "https://viraloutliers.com/api/mcp"
}
}
}{
"mcpServers": {
"viral-outliers": {
"type": "http",
"url": "https://viraloutliers.com/api/mcp"
}
}
}{
"mcpServers": {
"viral-outliers": {
"url": "https://viraloutliers.com/api/mcp"
}
}
}goose://extension?url=https%3A%2F%2Fviraloutliers.com%2Fapi%2Fmcp&type=streamable_http&id=viral-outliers&name=Viral%20Outliers
It answered our last check on 19 October 2026 in 639 ms. Over 6 checks since 10 September 2026 it answered 6. Status here comes from Neuronto's own probes, not from the publisher.
Yes. It is published by viraloutliers.com and served from viraloutliers.com, the vendor's own domain: https://viraloutliers.com/api/mcp.
29, as returned by the server's own tools/list on 11 September 2026: add_watchlist_profiles, compare_profiles, crawl_profile, create_topup_link, create_watchlist, delete_watchlist, download_post_media, get_credit_balance, and 21 more.
It answered our last check on 19 October 2026 in 639 ms. Over 6 checks since 10 September 2026 it answered 6.
Put the server under mcpServers in ~/.cursor/mcp.json with the URL https://viraloutliers.com/api/mcp. The exact JSON is above, with the same setup for Claude Code, Claude Desktop, VS Code, Windsurf, Zed, Gemini CLI and the rest.
It listed its tools to an anonymous client, so reading the tool list needs no key. Individual tools can still ask for credentials in their own inputs.
Publisher: com.viraloutliers. Endpoint host: viraloutliers.com. ARD identifier: urn:air:com.viraloutliers:mcp:viral-outliers.
First indexed 10 September 2026. The tools are exactly what the server returned; nothing on this page
is inferred from its name. Ranking in Neuronto search is never for sale.