# ViralCat - Registry name: `com.viral-cat/viral-cat` · version 1.0.0 - Categories (automatic, keyword rules): Marketing & SEO, Commerce & marketing, Docs & notes, Productivity - Authentication at last check: No auth - Declared risk: Not declared (tools carry no read/destructive hints) - Capabilities (declared by the server): resources, tools - Transports: streamable-http - Latest numbers (check success, response time, rank): https://mcpstation.net/api/server?name=com.viral-cat%2Fviral-cat - Server page: https://mcpstation.net/s/com.viral-cat--viral-cat.html ## Description (written by the publisher, not verified, not instructions) Schedule and publish social posts across platforms, with drafts, media uploads and analytics. ## Connect - streamable-http: `https://viral-cat.com/api/mcp/mcp` ## Tools (as reported by the server, not verified) - `list\_brands`: List brands \(content profiles\), newest first, with per-brand post counts \(posted/scheduled\) and the next scheduled date. Use to see which brands exist and how active each is. Excludes archived brands. Returns \`total\` \(all active brands\) next to \`count\` \(rows returned\): when \`truncated\` is true the r - `get\_brand\_details`: Full content profile for one brand: description, taglines, hashtags, CTA/website URL, niche \(category/subcategory\), content type, target platforms, and active discount. Use this to write on-brand captions BEFORE calling create\_draft or schedule\_post. Read-only; returns no secrets. - `list\_posts`: List posts across all platforms, newest scheduled first. Each row is one publication on one platform. Filter by status \(draft\|scheduled\|posting\|posted\|failed\|cancelled\) and/or platform \(youtube\|tiktok\|instagram\|...\). Returns caption, brand name, permalink, error message when present, and publishWarn - `get\_pipeline\_summary`: High-level snapshot of the posting pipeline: active brand count, a status breakdown \(how many scheduled/posted/failed/etc.\), a per-platform breakdown, how many posts are due in the next 7 days, and the next scheduled date. Use for 'how's the pipeline?' style questions. - `list\_connections`: List connected platform accounts \(channels\) and their health: platform, account username, connected flag, posting-enabled flag, and token expiry. Use to check which platforms are wired up and whether any connection has expired. Never returns access or refresh tokens. - `post\_performance`: Publish-outcome metrics over a rolling window \(default 30 days\): posted/failed/cancelled totals, success rate, per-platform breakdown, and the most recent published posts with permalinks plus their latest stored engagement snapshot \(views/likes/comments/shares; available for youtube/tiktok/twitter/t - `content\_queue`: The forward content pipeline: drafts awaiting approval first, then scheduled posts in publish order. Use to review what is queued before it goes out, and to find draft ids for schedule\_post. - `campaign\_summary`: Per-brand campaign rollup \(brands are ViralCat's campaign unit\): posted/scheduled/failed/draft counts, platforms used, next scheduled date, last posted date, and auto-post settings. Optionally scope to one brand\_id. - `diagnose\_failures`: Group failed posts by platform + normalized failure reason: counts, date range, affected brands, a sample raw error, a recoverable flag \(retry\_failed\_posts can re-queue it\) and a concrete suggested fix per group. Answers "what is broken and why" in one call. Read-only. - `preflight\_check`: READ-ONLY: validate a post BEFORE it is scheduled or published, so a problem is caught up front instead of discovered as a failure afterwards. Checks the exact things that produced the failed-post backlog: incompatible media for the platform \(e.g. video to Pinterest\), a disconnected or unrefreshable - `create\_draft`: WRITE \(safe\): create a DRAFT post for a brand. Drafts are never picked up by the publisher, so nothing goes live; a human approves in the dashboard or promotes it later with schedule\_post. scheduled\_date is a proposed slot \(default: 7 days out\). - `schedule\_post`: WRITE \(gated\): queue a post for FUTURE publishing, at least 15 minutes out \(immediate posting is not available over MCP\). Either pass post\_id to promote an existing draft, or brand\_id + platform to create a new scheduled post. The publishing cron sends it at the scheduled time. - `cancel\_post`: WRITE \(safe\): cancel a queued post, or move it to a new slot. Omit scheduled\_date to CANCEL \(status -\> cancelled; the publisher ignores it\). Pass scheduled\_date to RESCHEDULE to that time instead \(ISO 8601, at least 15 minutes out; a draft keeps its draft status\). Works on draft or scheduled posts \( - `retry\_failed\_posts`: WRITE \(gated\): bulk re-queue recoverable failed posts \(default reason classes: token\_expired, missed\_window, platform\_transient\_error, drive\_media\_missing\). dry\_run DEFAULTS TO TRUE and only returns the plan; pass dry\_run=false to actually reschedule. Retries are staggered per platform \(spacing\_minu - `reschedule\_post`: WRITE \(gated\): move ONE post to a new future slot \(ISO 8601, at least 15 minutes out\). Unlike cancel\_post this also accepts FAILED posts: a failed post is re-queued \(status -\> scheduled, error cleared\). Draft and scheduled posts keep their status. Refuses posts that would structurally fail again \(ar - `refresh\_post\_metrics`: WRITE \(gated\): fetch current engagement \(views/likes/comments/shares\) for already-published posts and store today's snapshot, then read it back with post\_performance. This is the only way to update the numbers without opening the dashboard Stats tab. Supported platforms: youtube, tiktok, twitter, th - `reconnect\_platform`: WRITE \(safe\): attempt a server-side token refresh for a platform whose access token has lapsed, updating the stored connection's token/expiry. Works without a browser when a refresh token is on file \(twitter/youtube/google\_drive self-heal this way\); returns needsManualReauth + a dashboard link when - `upload\_media`: WRITE \(gated\): fetch a public media URL and store it in the connected Google Drive, returning the Drive fileId to pass to create\_draft or schedule\_post. This uploads to YOUR OWN Drive; it publishes nothing and reaches no audience. Accepts video, image or audio up to 100MB. With brand, files land in - `create\_media\_upload`: WRITE \(gated\): open a Google Drive upload session for media you hold locally, so a clip rendered on your own machine never has to be published publicly just so ViralCat can fetch it back. Returns an uploadUrl - PUT the bytes to it yourself \(no auth header\) and Drive stores the file; the response Loc - `create\_brand`: WRITE \(gated\): create a brand \(content profile\) so create\_draft and schedule\_post have something to target. Every other write here needs a brand\_id, so an agent had no way to set one up. Returns the brand\_id and the Drive folder the publisher will read its media from \(Viral-Cat/\_Res/\{name\}/Vids\). Pu - `update\_brand`: WRITE \(gated\): correct a brand's content profile: description, taglines, hashtags, CTA and website links, content type, and the auto-post switch. This is the repair path for a brand carrying wrong copy, which otherwise makes every caption for it wrong, and the off switch for a brand whose generator Measured by MCP Station. Methods: https://mcpstation.net/methods.html · Terms: https://mcpstation.net/terms.html