Viralhunt Mcp

io.github.rodvan由 GitHub 帳號 rodvan 發布v1.1.27更新於 Oct 30, 2026

Trending content on 12 networks, best time, hashtags, templates, drafts and review, publish to 11.

概覽

AI 產生的概覽

ViralHunt MCP 讓助理找出各社群平台的熱門內容、規劃與撰寫草稿、審核內容,並發佈或排程到已連結的品牌帳號。

可以做什麼
  • 跨平台找出並比較熱門貼文、新聞與熱門音訊,用一個關鍵字搜尋所有網路,查看最佳發文時間、主題標籤與社群
  • 讀取帳號的方案、配額與額度,以及品牌、已連結帳號和內容規則
  • 建立、編輯、排程、翻譯與取消貼文和草稿,並提交審核
  • 審核草稿並給出結論與評分,核准或刪除已發佈貼文,查看投遞狀態與互動數據
  • 瀏覽與撰寫內容範本,以及語錄、日曆節日與已儲存的配方
  • 透過編輯看板卡片、留言和修改紀錄把內容交給團隊
適用情境
適合讓助理先調查熱門話題,再為真實品牌帳號撰寫、審核並發佈社群內容,或交給團隊核准。也適合希望內容在發佈前依書面規則自動檢查的團隊。
執行需求
透過 npx 以 stdio 在本機執行,需要 Node 18 以上版本。需要 ViralHunt 帳號,並在 VIRALHUNT_API_KEY 提供個人權杖;權杖的權限群組決定哪些工具可用。可用 VIRALHUNT_BASE_URL 覆寫 API 位址。需要連線至 ViralHunt API 的網路。
安裝前請注意
此權杖可存取真實品牌帳號,並能發佈、排程、編輯或刪除線上貼文;發佈與核准需要擁有者或管理員權杖,且應僅在使用者明確同意後進行。免費方案有每日查詢配額。設定品牌 webhook 會涉及 HMAC 密鑰。草稿與內容會傳送到 ViralHunt 服務。

安裝

在 SourceWeft 中

  1. 開啟 儀表板中的 Viralhunt Mcp,將其新增到工作區。
  2. 為需要使用其工具的對話啟用該服務。

Desktop only,透過 STDIO。 STDIO 服務會啟動本機處理程序,因此需要 SourceWeft 桌面主機。

其他 MCP 客戶端

參照 儲存庫 中的啟動說明。

README

ViralHunt MCP Server

An MCP server for ViralHunt.io — the all-in-one platform to discover what's trending, curate it with your team, and publish everywhere. A BuzzSumo alternative with a built-in cross-network scheduler and an API that AI agents can drive end to end.

Get a free token: https://viralhunt.io/claude → create the free account (free forever, no card, 24 content queries a day), then Account → API Access → Create access. Every token has a permission group (reader, writer, reviewer, publisher, full): a tool outside the group answers 403 insufficient_scope naming what it lacks, and viralhunt_account shows the token its own group. Give an agent that writes a writer token and the one that reviews a reviewer token. Full API docs: https://viralhunt.io/api.

What an agent can do through this MCP server

These are the tools this server exposes (they drive the full discover → time it → publish → verify → correct loop). Every number comes with its sample size and time window, so an agent can say how much to trust it:

ToolWhat it does
viralhunt_accountWho is this key — plan, daily quota left, credits, per-endpoint rules (call first)
viralhunt_trendingFind topics — what's going viral on TikTok, Instagram, X, Facebook, Pinterest, Bluesky, Douyin, Reddit, Mastodon, Tumblr, Hacker News and news RSS, ranked by viral score, each post with growth_24h (how much it moved between our two most distant readings); author narrows to one page or account
viralhunt_searchOne keyword, every network — merged and ranked, with per-network totals
viralhunt_best_timeWhen to post — best weekday + hour per network from the posts that went viral there (365-day sample, hit rate, sample size, your time zone, optional niche keyword)
viralhunt_top_hashtagsWhich hashtags — top tags per network or across all, by engagement, posts or per-post; one tag's breakdown by network
viralhunt_trending_soundsWhich sound — trending audio on TikTok, Instagram Reels and Douyin, cross-network sounds first, with the posts that used it
viralhunt_best_communitiesWhere to post — best subreddits (peak per 1,000 members, timing, top posts, similar) and Bluesky custom feeds for a topic
viralhunt_targetsList your brands/projects and the connected accounts you can post to, with needs_reconnect, per-network media_limits and the projects linked in another language
viralhunt_schedulePublish now, schedule, or leave a draft (text + media, per-network copy, a first comment, or a design on a template the app renders when a person approves). The answer carries url, drafts_url, project_name: a post for a person goes to Drafts complete and is handed over in one five-line message (id and project, url, angle, verification, the decision needed), the rest in author_notes
viralhunt_draftsThe drafts waiting for a review and an approval, with their reviews
viralhunt_review_draftReview a draft — verdict, score, per-network warnings, a note (an agent as the team's checker)
viralhunt_policyThe content rule a reviewer applies before any OK: block and fix lists with codes, six scores and thresholds, per-network notes (read it first, every pass)
viralhunt_review_queueWhat needs a review: posts in Review with no verdict on their current content
viralhunt_calendarThe days worth a post: international days and science/tech/space/health anniversaries with why, by window and category
viralhunt_news_categoriesThe news categories with counts; pass one as category to viralhunt_trending (rss)
viralhunt_review_statsFlags per collaborator by week, fortnight or month: reviews, ok / fix / block, rule codes, average risk10
viralhunt_approve_draftSend a draft (owner/admin token, with the user's yes), optionally with its translations
viralhunt_translate_postThe same post in another language — the app adapts the copy and the template's texts for a linked project
viralhunt_edit_logLearn from the edits — what people changed in drafts after the agent left them
viralhunt_get_postCheck a post's status + per-network results, permalinks and each network's own reason when it refused
viralhunt_sync_postRefresh statuses from the networks
viralhunt_update_postEdit a draft (anything, incl. the rendered png) or a still-scheduled post (body / media / networks / time)
viralhunt_cancel_postCancel the not-yet-published targets of a scheduled post, or drop a draft
viralhunt_statsWhat performed — engagement of the published posts by network, by brand, top posts
viralhunt_quotes / viralhunt_mark_quote_usedThe quotes base for daily-quote series (public domain by default, author context, portraits)
viralhunt_recipes / viralhunt_recipe_ranStanding orders a person saved in the app: source, template, cadence; stamp a run
viralhunt_list_templatesBrowse the content template library (on-brand layouts you fill; favourites first)
viralhunt_get_templateGet one template's full spec (html + css + variable manifest, what is static and what is dynamic, what it suits, the owner's instructions) to render
viralhunt_upsert_templateAuthor or edit a template — editing a curated one clones it into your copy (owner/admin)
viralhunt_assign_templateAssign a template to a project so its agents can use it (owner/admin)
viralhunt_board_contextThe team's Editorial Board in one call: members (with ids), columns, categories
viralhunt_create_cardHand a post to a teammate — create a kanban card (URL metadata auto-filled, assignee, priority, due date, category)
viralhunt_move_cardMove a card to another column (the is_done column completes it)
viralhunt_my_cardsThe cards assigned to you (when the token belongs to an agent member of the team)
viralhunt_card_commentsRead or add comments on a card (notifies the assignee, mirrors to team chat)

Guardrails baked in: it won't post to the wrong brand, only schedules in the future, drafts by default unless the user asked to publish now, never uses another page's text or branded picture, checks each network's media ceilings, and is told not to repost fake news / copyrighted media / spam.

Changelog

  • 1.1.31 (2026-10-26) — viralhunt_brand_webhook takes format (json, discord, slack, auto) and test: true (one sample alert to the saved webhook, with what the receiver answered). The webhooks guide: https://viralhunt.io/webhooks.
  • 1.1.30 (2026-10-26) — viralhunt_update_post on a SCHEDULED post works per account: each account's own text and pictures are patched only when they changed, a changed thread (new parameter) on X/Threads makes that network's post again, added accounts are created and dropped ones deleted; the answer lists patched, recreated, added, removed, refused; nothing under 6 minutes before the post's time (409 not_editable).
  • 1.1.29 (2026-10-24) — allow_duplicate on viralhunt_schedule and viralhunt_approve_draft: the duplicate firewall refuses an account another post of the last 72 hours already carries the same text for (duplicate_of; 409 duplicate_post when every account is one). A send whose every network was cut answers status: processing with checking: true: never create it again.
  • 1.1.28 (2026-10-23) — all and limit on viralhunt_brand_hot (the most commented threads too, rising first: the app's dashboard list); the answer carries machine (the always-on Chrome's heartbeat), so an empty list is read against whether anybody is searching.
  • 1.1.27 (2026-10-22) — carousel on viralhunt_create_post / viralhunt_update_post: several pictures are allowed only when the user asked for a carousel (else 422 multiple_pictures); png replaces the post's picture instead of being added next to it; a post made on a template always has ONE picture, its render.
  • 1.1.26 (2026-10-20) — the brand's voice on every project of viralhunt_targets (the owner's playbook: read first, follow over the general rules, offer to draft one when empty); complete means every network's copy (X, Bluesky, Threads) in overrides in the same create, never a cut.
  • 1.1.25 (2026-10-19) — every picture on one of the organization's templates (create the template when none fits; pass the PNG and the design, a PNG alone is a flat file nobody can edit); the working agreement in viralhunt_schedule: a post for a person goes to Drafts complete, never to Review unless asked, handed over in one five-line message with the url the answer gives; url, drafts_url, project_id, project_name on create, drafts rows and get.
  • 1.1.24 (2026-10-19) — viralhunt_list_posts (the queue and the history per target), viralhunt_delete_post (take a published target down), account_id on viralhunt_cancel_post; retry on a timed-out create needs force.
  • 1.1.23 (2026-10-18) — cards: assigned_to by id, name or email on viralhunt_create_card; viralhunt_assign_card, viralhunt_get_card, viralhunt_list_cards, viralhunt_archive_card. Drafts rows carry publishes[] (the text each account really sends).
  • 1.1.22 (2026-10-15) — viralhunt_brand_keywords takes run: true ("search now"); viralhunt_brand_status carries machine (is the always-on machine alive).
  • 1.1.21 (2026-10-15) — Brand watch: viralhunt_brand_status, viralhunt_brand_keywords, viralhunt_brand_hot (the discussions heating up right now, with links), viralhunt_brand_alerts, viralhunt_brand_webhook (signed deliveries to the brand's own agent).
  • 1.1.20 (2026-10-15) — viralhunt_translate_post describes what comes back (shortened, overrides, no em dashes) and the one-brand-two-languages pattern.
  • 1.1.19 (2026-10-14) — viralhunt_schedule takes stage and assigned_to; viralhunt_update_post takes assigned_to and answers the stage after the edit; viralhunt_drafts filters by assigned_to; viralhunt_get_post carries the full drafts shape (overrides, design, render…); viralhunt_get_template with preview shows a template before any post; a too-long text answers text_too_long instead of a 500.
  • 1.1.18 (2026-10-14) — design is always sent for a template-made picture (and viralhunt_update_draft repairs a PNG-only post with it): the app can then edit the image.
  • 1.1.17 (2026-10-14) — viralhunt_trending takes sort: most_commented on every network that counts comments (tiktok new; facebook and pinterest map it to most_comments, x, bluesky and mastodon to most_replied).
  • 1.1.16 (2026-10-13) — viralhunt_upsert_template takes action: archive; update works whether the action comes in the body or the URL; viralhunt_list_templates takes scope, per_page, page and lists the organization's own templates first.
  • 1.1.15 (2026-10-13) — every draft is an Editorial Board card (card_id on create) that moves with the post; design_fields on update fixes the texts inside a designed image (a trusted reviewer too); template authors without admin ("Creates templates" on Team); templates never carry code (removed in the answer).
  • 1.1.11 (2026-10-08) — approve by a member token on its own graded post (when ticked on Team); review_stats carries avg_score, self_published, published_over_fix.
  • 1.1.10 (2026-10-07) — the reviewer's edit boundary (overrides and kind only, when trusted); text_limit per account.
  • 1.1.9 (2026-10-07) — kind on create and update (fact | meme | quote | opinion | promo): the reviewer applies only that kind's rules.
  • 1.1.8 (2026-10-07) — overrides[account] takes first_comment and thread per account; Bluesky/Mastodon threads as a reply chain.
  • 1.1.7 (2026-10-07) — author_notes on create and update: the source link for the reviewer, never published.
  • 1.1.6 (2026-10-07) — the safety catch on a trusted reviewer's OK (risk_threshold), project_lang on drafts, review_stats for trusted reviewers.
  • 1.1.5 (2026-10-07) — viralhunt_calendar: the calendar base (international days and anniversaries, with why), mark_used.
  • 1.1.4 (2026-10-07) — viralhunt_news_categories and category on viralhunt_trending (rss); unknown parameters are a 422 on the API.
  • 1.1.3 (2026-10-07) — the policy describes the kinds (fact, meme, quote, opinion, promo): a meme or a quote never gets a source or DOI demand.
  • 1.1.2 (2026-10-06) — content_hash on viralhunt_review_draft (409 content_changed when the post moved under the reviewer); self review is by user, not token.
  • 1.1.1 (2026-10-06) — the reviewer's four extra checks (picture against text, spelling, AI-written, facts with the DOI rule), risk10 1 to 10 on every review, viralhunt_review_stats (flags per collaborator).
  • 1.1.0 (2026-10-05) — the reviewer job: viralhunt_policy, viralhunt_review_queue, needs_review on drafts; the server recalculates the verdict and names in sent.skipped the rule that kept an OK from sending.
  • 0.3.0 (2026-09-28) — drafts and review (viralhunt_drafts, viralhunt_review_draft, viralhunt_approve_draft, viralhunt_edit_log), translation into a linked project's language (viralhunt_translate_post), design on a post and png on update, viralhunt_search, viralhunt_account, viralhunt_stats, viralhunt_quotes, viralhunt_recipes, viralhunt_sync_post; author and free-form time_range on trending; media_limits, needs_reconnect and language links on targets; templates say what is static, dynamic and what they suit; honest post statuses with each network's reason.
  • 0.2.x (2026-09-08) — best time to post, top hashtags, trending sounds, best communities, the editorial board; Reddit, Mastodon, Tumblr and Hacker News on trending; growth_24h documented.
  • 0.1.x (2026-08) — trending, targets, publish/schedule, get, update, cancel, content templates.

What ViralHunt the platform does (beyond this MCP)

ViralHunt is a full product; the tools above are the agent-drivable slice. The rest lives in the app (and some via the REST API):

  • Trending Radar — a live cross-network feed of viral content by niche and time window.
  • Cross-network publishing & scheduling — schedule/publish to up to 11 networks (Instagram, Facebook, TikTok, X, LinkedIn, YouTube, Pinterest, Threads, Bluesky, Telegram, Google Business), per brand.
  • Editorial Board (team) — a kanban to curate before publishing: columns, categories, assignments, comments and team chat, so a team manages what goes out. (Cards/columns/comments are in the REST API.)
  • Auto-DM (comment → DM automation) — when someone comments your keyword on Instagram, ViralHunt auto-replies and sends them a DM — like ManyChat, but flat pricing, unlimited contacts, and a monthly cap that resets. Configured in the app (runs via webhooks); Facebook next.
  • Reports — what each brand/network actually did: posts, reach, DMs sent, replies, top content.

Note: Auto-DM and Reports are product features, not tools this MCP exposes today. The editorial board is exposed (context, cards, moves, comments) so an agent can hand content to a team instead of publishing it directly.

Install (Claude Desktop / Cline)

json
{  "mcpServers": {    "viralhunt": {      "command": "npx",      "args": ["-y", "viralhunt-mcp"],      "env": { "VIRALHUNT_API_KEY": "vhk_your_token_here" }    }  }}

Config: VIRALHUNT_API_KEY (your vhk_… token, required) and VIRALHUNT_BASE_URL (optional, defaults to the production API). Run locally: VIRALHUNT_API_KEY=vhk_... npx viralhunt-mcp (Node ≥ 18).

Listed on the Official MCP Registry as io.github.rodvan/viralhunt-mcp. License: MIT.

來源:README.md,提交 9512caf

工具

49

viralhunt_news_categories

The categories of the news corpus (source rss), with how many feeds carry each and how many articles arrived in the last 7 and 30 days. Read it once before asking for news on a subject, then pass a name as category on viralhunt_trending (source rss). Not the Editorial Board categories. Technology and Artificial Intelligence are separate categories.

無需輸入參數。

viralhunt_account

Who this key is: plan (free/creator/studio/agency), requests per hour, whether it can publish, today's daily content-query quota (free plan: 24 shared across trending, search, best-time, hashtags, sounds, communities), credits balance, and per-endpoint rules. Call it once at the start and again on a 429 or 402, and set expectations from it (free plan: trending is 72h delayed and numbers are withheld, never print 0).

無需輸入參數。

viralhunt_targets

List the user's projects/brands and the connected social accounts you can publish to in each. Also returns needs_reconnect (expired connections: not targets until a person reconnects them in the app; name the network before publishing), media_limits per network (image bytes: bigger ones are re-encoded to fit; video bytes and seconds: a bigger or longer video is refused for that network only, with the numbers; text length), each project's lang and translates_to (linked projects in another language), and must_draft: '' = this token may publish directly; 'role' = a member or agent token: every post waits in Drafts for an owner or admin whatever draft says; 'review_mode' = the organization reviews every post. Read it before promising 'published'. Each project carries voice: the owner's playbook for that brand (audience, tone, hooks, structure, per-network versions, what it never says, verification). Read it before writing anything for that project and follow it over the general rules; when empty, offer to draft one from the brand's best posts for the owner to paste on the Projects page. And complete means every network's copy: for every account whose text_limit the body exceeds (X 280, Bluesky 300, Threads 500), its own short copy in overrides in the same create, never a cut.

輸入參數project

viralhunt_schedule

Publish now, schedule, or (default when the user did not ask to publish right now) leave a DRAFT of a post on a project's connected accounts. Ask the user before publishing or scheduling: it posts to real accounts. Verify content first: never fake news, copyrighted media or spam. Never use another page's text as the copy or its branded picture as the post's picture: the picture comes from the organization's templates (viralhunt_get_template), either rendered by you and passed in media, or passed as `design` with draft=true so the app renders it when a person approves. Returns {id, status, results, warnings, review_url}: status processing|scheduled|review|draft|partial|failed; results keyed by account id carry each network's own reason when it refused. Two stages sit before sending: Drafts (being worked on) and Review (complete, dated, waiting for an owner or admin). Say which one the post is in. The working agreement: a post the user asks for goes to Drafts COMPLETE (text, image, accounts, tentative time, the project they named; no picture with rights = the organization's template with text only), never to Review unless asked. Hand it over in one five-line message: id and project_name, the url the answer gives (never compose a link), the angle, what you verified and the source, the decision you need. Everything else goes in author_notes. The Drafts page shows one project at a time (name the project); media_removed after a week is retention. A picture made on a template is complete only with its design in the post (pass the PNG in media AND design): a PNG alone is a flat file nobody can edit in the app; the answer says picture_editable: false and viralhunt_update_post with design repairs it. Every picture is made on one of the organization's templates; when none fits, CREATE one (viralhunt_upsert_template, the owner's 'Creates templates' tick) and use it.

輸入參數bodykinddraftmediastagedesigncard_idprojectcarouselnetworksoverridesproject_id另有 5 個

viralhunt_drafts

List the posts not yet sent (this project, or every project with all=true): stage 'draft' = being worked on, 'review' = complete and dated, waiting for an owner or admin. Each carries stage, body, media, targets, scheduled_at, overrides, card_id, submitted_via (api = from an agent), design, lang, translated_from_id, assigned_to and assigned_to_name (the member it is assigned to), review {score, verdict, reviewed_at, entries[]}, needs_review (no verdict on its current content), valid_verdict, content_hash and updated_at.

輸入參數allstageprojectproject_idassigned_toneeds_review

viralhunt_policy

The content rule a reviewer applies before any OK, kept on the platform so it changes without a release: what blocks a post (policy_* codes), what sends it back to Drafts (fix_* codes), the six scores (tos_risk, rights, fake_news, sensationalism, brand, grammar; 100 = clean) with the thresholds the server recalculates the verdict with, the extra readings every review carries (risk10 1 safe to 10 breaks a network's terms, image_match, ai_written), the kinds (fact, meme, quote, opinion, promo: a meme or a quote never gets a source or DOI demand), what changes per network, and the server rules an OK cannot bypass. Read it at the start of every review pass; never judge from memory.

無需輸入參數。

viralhunt_review_queue

The reviewer's queue: posts in Review, every project, with no verdict on their current content (never reviewed, or edited after the last verdict). Same rows as viralhunt_drafts. Read viralhunt_policy first, then one viralhunt_review_draft per post.

輸入參數project_id

viralhunt_review_stats

Flags per collaborator (owner, admin, or a reviewer marked 'Their OK publishes'): for the last days (7 = week, 14 = fortnight, 30 = month), per person or agent who authored posts: reviews, ok / fix / block, flags (a fix or block, or any policy_* / fix_* warning), codes (how many of each rule, e.g. fix_doi), avg_risk10 and last_flag_at. The Team page shows the same table.

輸入參數days

viralhunt_submit_draft

Move a draft to Review once it is complete (a body or media, and at least one account): it waits there for an owner or admin to authorize it. now=true clears the time (it goes out when authorized); scheduled_at sets one; neither keeps the draft's own. Nothing is sent.

輸入參數id必填nowscheduled_at

viralhunt_review_draft

Append your review to a post in Review: verdict ok|fix|block, a score 0-100, per-topic scores (tos_risk, rights, fake_news, sensationalism, brand, grammar; 100 = clean) plus risk10 (1 safe to 10 breaks a network's terms), image_match and ai_written (0-100), one warning per issue with the policy's code (policy_* / fix_*), the network it concerns and the severity, and a short note on how to fix it, in the post's language. Judge against viralhunt_policy (read it first), network by network; verify claims with viralhunt_search / trending rss. `fix` sends the post back to Drafts with your note (returned: true). The server recalculates the verdict from your scores and warnings with the policy thresholds and keeps the more severe one (verdict, verdict_requested, verdict_reason in the answer). An `ok` sends the post at its time only when the organization sends on OK AND this token may release (owner, admin, or 'their OK publishes' in Team); The note carries the fix (the corrected sentence, the exact link, the short version); say which problem decided the verdict. The server refuses to send on a self review (same USER, not token: the reviewer is its own agent member), a post with no time or under 15 minutes, one edited after the review, or one whose scores sit outside the policy's auto_send thresholds (risk10 > 5, fake_news < 70, image_match < 60: risk_threshold, a person decides), and says why in sent.skipped. Report `sent` as it is. Drafts rows carry project_lang: a post in another language is fix_language. Always pass content_hash from the row you read: if the post changed meanwhile the server answers 409 content_changed with the current hash and writes nothing; read it again.

輸入參數id必填notescorescoresverdict必填warningscontent_hash

viralhunt_approve_draft

Send a draft (owner or admin token only, and never without the user's explicit yes). A draft blocked by its last review cannot be approved until it is fixed and reviewed again. `translations` makes the translated draft in each linked project in the same call (see viralhunt_translate_post). Returns {status, results, warnings, translations[]}.

輸入參數id必填translations

viralhunt_translate_post

Make the translated draft of a post (a draft or one already sent) in a linked project that publishes in another language. The app adapts the copy, the first comment, the per-network copies, the thread and the TEXT variables of a design (hashtags in the new language; links, mentions, numbers and names kept): do not translate yourself. A design keeps its picture and the answer carries needs_png=true with render {html, css, format}: render it, store the PNG with viralhunt_update_post {id, png}, then approve if wanted. A plain picture (no template) stays unless `image` hands the translated one. The same translation twice is refused. The texts come back without em dashes, and for every network of the target project whose limit the translated body passes (X 280, Bluesky 300, Threads 500) a short copy is written as that network's override: `shortened` lists them (network, limit, full length, short length) and `overrides` carries the copies. One brand, two languages: link the projects once (Projects → Also publish translated in…), work in one project, and the other language comes out of this call or of `translations` on viralhunt_approve_draft. Never write the second language by hand.

輸入參數id必填langimagesend_modeproject_id必填account_ids

viralhunt_edit_log

What people changed in drafts after an agent left them: one row per field (body, media, targets, scheduled_at, first_comment, overrides, thread, design) with before, after, who and when, plus by_field counts. Drafts with submitted_via=api came from an agent: those edits are what the person did not like. Read it at the start of each batch and apply the pattern (shorter captions, another picture, another hour).

輸入參數idlimitsince

viralhunt_sync_post

Refresh the status of this organization's posts from the networks (call before viralhunt_get_post when the answer matters). Returns how many rows were re-read.

無需輸入參數。

viralhunt_get_post

Get the current status and per-network results (incl. permalinks) of a post you created. Also events[] (the delivery log: created, accepted by PostProxy, published with its link, refused with the reason, retried, canceled, reviewed, approved) and support_text, the text to hand the user when they ask what happened to a post. Statuses: scheduled (queued), processing (handed to the networks, or a target being retried), published (every target live), partial (some refused: each failed results[account].error carries the network's own words and error_message sums it up), failed, draft, canceled. The app retries a transient failure up to three times (results show retries, will_retry, retry_after); a final reason (dead connection, refused text, oversized video) is not retried: tell the user what to fix. The post carries the same fields as a viralhunt_drafts row whatever its status: stage, targets, media, overrides (what each account really sends: read it before an OK), thread, design (and render {html, css, format} on a draft or a post in review), card_id, kind, author_notes, lang, assigned_to, review {score, verdict, entries[]}, content_hash, needs_review.

輸入參數id必填

viralhunt_update_post

Edit a post. A DRAFT can be changed freely by its author, an owner or an admin (body, media, overrides, first_comment, targets, scheduled_at, design, and png: the a reviewer marked 'Their OK publishes' may change only overrides (a per-account short copy), kind, and the texts inside the image (design_fields {variable key: text}, never a picture variable or caption; with its png) on someone else's post). design_fields works on posts made on a template only (a flat picture answers no_design); without png the old render leaves (needs_png + render in the answer). overrides is MERGED per account: send only the accounts you change, a key set to null removes that account's copy, overrides_replace: true replaces the whole map; rendered picture of its design as a data:image/png;base64 URL, which becomes the post's first picture). A SCHEDULED post can be edited only while status is 'scheduled' and more than 5 min before publish. Only the fields you send change; the project cannot be changed. Check status with viralhunt_get_post first; on a 409 error re-fetch instead of retrying.

輸入參數id必填pngbodykindmediadesigncarouselnetworksoverridesassigned_toauthor_notesscheduled_at另有 3 個

viralhunt_stats

Engagement of the published posts as the networks report it back: by_network, by_project and top_posts (with permalinks). ready=false means nothing collected yet. Use it to answer 'what worked' and to find more like the winners (viralhunt_search on the winning topic); never invent a number.

輸入參數dayslimitnetworkprojectproject_id

viralhunt_calendar

The calendar base: the international days (UN, UNESCO, WHO) and the anniversaries of science, technology, space, health, the environment and civilization in a window of days, each with `why` (what is celebrated or what happened, and why it matters: write the caption FROM it, never from memory), kind (observance repeats every year; event, birth, death carry year and years_ago), category, origin, importance (3 = most brands can post about it, 2 = worth it inside its category, 1 = niche), image_url (a free Wikipedia thumbnail when there is one), source_url. Use days=7 or 31 to plan ahead; post on the day. The vh-ephemeris template fits an event or a birth; the news frame fits an observance. mark_used=true with calendar_id records what you posted.

輸入參數qdatedayskindlangnotestatsunusedcategorymark_usedcalendar_idmin_importance

viralhunt_quotes

Quotes ranked by our popularity score, for daily-quote series: text, author, author_context (description, born, died), work, categories, rights, popularity high|medium|low and author_image (portrait url, licence, credit). Default rights=public_domain (authors dead more than 70 years): keep it unless the user asks for a modern author, and with rights=any tell the user a quote is restricted before scheduling it under their brand. Write the caption's context FROM author_context and work, never from memory. categories_list=true lists the categories held. unused=true leaves out what this organization already used.

輸入參數langpagesortauthorrightsunusedcategoryper_pagemax_charscategoriescategories_list

viralhunt_mark_quote_used

After scheduling a quote, mark it used for this organization so the next pick (unused=true) is a different one.

輸入參數notequote_id必填

viralhunt_recipes

The standing orders of a brand, saved by a person in the app: each recipe says what to post from (source quotes|trending|manual with source_params, and source_call = the exact request that fetches the content), which template (template.slug for viralhunt_get_template), format, networks, cadence (daily|weekdays|weekly|manual), post_time in the project's timezone (null = the network's best time), caption_brief and last_run_at. Nothing runs on the server: you do the loop (fetch, fill, render, schedule, mark the quote used, then viralhunt_recipe_ran). daily with last_run_at older than today = due. Never run a paused recipe (is_active false).

輸入參數activeproject_id

viralhunt_recipe_ran

Stamp a recipe run so the person sees in the app that it happened.

輸入參數noterecipe_id必填

viralhunt_brand_status

Every brand (project) of the organization and whether it is being watched: keywords count, category, webhook set, alerts in the last 7 days, and per network when the extension (or the Reddit cron) last searched its keywords (last_run, never_run, found). keywords: 0 = not watched, offer to set them; never_run with an old last_run = the always-on machine is off, tell the owner.

輸入參數project_id

viralhunt_brand_keywords

Read a brand's keywords (what the always-on extension searches on X, Quora, Pinterest, Instagram, TikTok, Facebook, and the server on Reddit), or REPLACE the list (owner/admin token): keywords = product names, ingredients, the problems its buyers search for, #hashtags; up to 40; every keyword is machine time on every network. The answer carries the sweep state per network.

輸入參數runcategorykeywordsnetworksproject_id必填

viralhunt_brand_hot

The discussions about a brand heating up RIGHT NOW: posts of the last window that mention one of its keywords and whose comments grew by delta in the last hours (or were born loud), each with title, url, author, comments_from/to, delta, hours, alerted_at. The answer to 'where should I comment today': hand the user the biggest deltas with their links and a proposed comment. Never post the comment yourself.

輸入參數hourswindownetworksmin_deltaproject_id必填

viralhunt_brand_alerts

What a brand was alerted about (each thread once), newest first; or, with mark_read_ids, mark alerts as taken so unread=true shows only what is left. Poll with since = your last read every 10 to 30 minutes, or set a webhook with viralhunt_brand_webhook.

輸入參數limitsinceunreadproject_id必填mark_read_ids

viralhunt_brand_webhook

Read, set or clear the webhook where a brand's alerts are POSTed the minute the cron writes them (owner/admin to change it): JSON body {event: brand.alerts, project, alerts[], radar_url}, header X-VH-Signature = sha256=<hex HMAC-SHA256 of the raw body with the secret returned here>. Answer 2xx within 8 s; no retry (alerts stay readable). url null clears it.

輸入參數urlproject_id必填

viralhunt_list_templates

List ViralHunt content templates (layouts you fill and render yourself). Lean by design — no html/css — so use viralhunt_get_template for the one you'll actually render.

輸入參數qpagescopenetworkassignedcategoryper_pagefavoritesmedia_typeproject_id

viralhunt_get_template

Get one template's full spec: html, css, the variable manifest (with hard rules per variable), formats, palette tokens, embedded fonts, render_tech, plus what is `static` (the owner fixed it: logo, frame, signature, fixed texts; never move, cover or restyle it), what is `dynamic` (the variables you fill: the picture, the headline, the caption that is the post body), what it `suits` (news, photo, quote, number, tip, on_this_day, meme, any) and the owner's `instructions` (they override any general rule). Fill every dynamic {{variable}}, then render with headless Chrome at the chosen format's size and WAIT for [data-vh-ready='1'] before screenshotting .vh-card. With preview=true the answer is instead preview {document, html, css, format, variables}: a complete page with the example values (or `variables`) filled and the organization's design baked in, to open in a browser or render, so a template is seen before any post is made.

輸入參數idslugformatpreviewvariables

viralhunt_upsert_template

Create or edit a content template (layout HTML/CSS + variable manifest). Editing a curated/global template CLONES it into the org's own copy — the global is never modified. Every {{placeholder}} in the html must be declared in variables, or the call is rejected. Owners and admins, or a member/agent the owner ticked 'Creates templates' (they edit only the templates they created). A template is html, css and images, never code: scripts, iframes, forms, event handlers and javascript: URLs are removed and listed in `removed`; data:font/ and data:image/ are accepted. Coloured words and a headline that fits need no script: put data-highlight="{{highlight}}" on the headline (the listed words get <span class="hl">, your css styles .hl), data-fit="28" (or data-fit-lines="4") on a block whose text must shrink to fit, and the platform appends its runtime (runtime_added: true), which also sets data-vh-ready. On update you may send only the fields that change. Then viralhunt_get_template with preview=true shows how it came out.

輸入參數idcsshtmlnameslug必填fontsactionaspectformatsnetworkpalettecanvas_h另有 9 個

viralhunt_assign_template

Assign (or unassign) a content template to a project, so that project's agents see it via viralhunt_list_templates with assigned=true. Owner/admin only.

輸入參數actionproject_id必填template_id必填

viralhunt_cancel_post

Cancel the not-yet-published targets of a scheduled post, or with account_id stop ONE network (a pending retry, a timed-out create, a not-yet-published PostProxy post). A published target answers 409: use viralhunt_delete_post.

輸入參數id必填account_id

viralhunt_list_posts

What went out and what did not: posts of the project (or the organization with all) by status, newest first, each target with status, PostProxy id, permalink, error, will_retry, timed_out (may be live), reconciled.

輸入參數idalllimitsinceoffsetstatusaccount_idproject_id

viralhunt_delete_post

Owner, admin or a member marked 'Their OK publishes': take a PUBLISHED target down from its network through PostProxy (the cleanup of a duplicate). Confirm on the network afterwards. Without account_id every published target of the post goes.

輸入參數id必填account_id

viralhunt_best_time

Best time to post on a network, measured on the posts that went viral there in the last 365 days (their OWN publish time). Returns best_slots (weekday + hour, ranked by average engagement, each with its sample size and hit_rate_pct = share of that slot's posts that reached the network's top 10%), worst_slot, today's best hours, by_hour and by_weekday tables, proof_posts, and sample {posts, window, from, to}. Read `confidence` (high >= 500 posts, medium >= 200, low) before quoting an hour. Hours are rotated to `timezone`; weekday aggregates stay UTC. With `keyword`, slots are recomputed on posts whose caption contains it; if that sample is under 200 posts the response says fallback:true and returns the network-wide slots instead.

輸入參數keywordnetwork必填timezone

viralhunt_top_hashtags

Top hashtags from the captions of the posts we hold, per network or across all, optionally filtered to tags containing a word. Each row carries posts (sample size), total_engagement and per_post (the number to compare: a tag used less but hitting harder). `window` is all-time over the corpus with updated_at (there is no per-day hashtag history; say so if asked for 'this week'). Pass `hashtag` to get one tag broken down by network with its top posts.

輸入參數qpagesorthashtagnetworkper_pagemin_posts

viralhunt_best_communities

Where to post a topic: the best subreddits (network=reddit) or Bluesky custom feeds (network=bluesky) from our own measurements. Reddit rows are ranked by peak_per_1k, the best score we hold per 1,000 members (upside relative to size); no average score is published because a swept community's sample is its greatest hits. Each row carries members, sample.posts and the window of post dates. Pass `subreddit` for one community: timing (best UTC hours/day the climbing posts were posted), pace, flairs, type mix, top posts and similar communities. Bluesky rows carry posts, authors, avg_likes; pass `feed` (slug) for its top posts, authors, tags.

輸入參數qfeedpagesortnetworkper_pagesubredditmax_membersmin_members

viralhunt_board_context

The team's Editorial Board in one call: organization, members (people and agents, with ids to assign cards to), columns (with is_default / is_done flags) and categories. Call this before creating or moving cards.

無需輸入參數。

viralhunt_create_card

Create a card on the Editorial Board: a piece of content to curate, with an optional post URL (title/description/image are filled from the URL's metadata when omitted), assignee, priority, due date, category and column. Returns the card with its id. Use it to hand a trending post to a teammate instead of publishing it directly.

輸入參數notestitledue_dateplatformpost_urlprioritycard_typeimage_urlassigned_tocategory_iddescriptionboard_column_id另有 1 個

viralhunt_move_card

Move a card to another column (moving into the column flagged is_done completes it; a 'done' comment does not).

輸入參數card_id必填positionboard_column_id必填

viralhunt_assign_card

Hand a card to a member (id, name as the Team page shows it, or email); null unassigns. The member is notified. The answer carries the card with assigned_to_user_id and assigned_to_name read back.

輸入參數card_id必填assigned_to必填

viralhunt_get_card

One card of the Editorial Board: title, column (name, is_done), status, assignee (id and name), priority, due date, notes, archived.

輸入參數card_id必填

viralhunt_list_cards

The organization's cards, newest first (up to 200): filter by column, status, assignee (id, name or email), unassigned or archived.

輸入參數limitstatusarchivedunassignedassigned_toboard_column_id

viralhunt_archive_card

Take a card off the board (archive). Nothing is deleted: a person restores it from the board's Archived view.

輸入參數card_id必填

viralhunt_my_cards

Cards assigned to the authenticated token's member (your own workload when you are an agent member of the team). Optional status filter.

輸入參數pagestatusprojectper_page

viralhunt_card_comments

Read the comments on a card, or add one (comment set). New comments notify the assignee and appear in the team chat's #board channel.

輸入參數card_id必填comment

版本歷史

4
  1. v1.1.27最新Oct 23, 2026
  2. v1.1.25Oct 20, 2026
  3. v0.3.0Sep 28, 2026
  4. v0.1.2Sep 16, 2026

評分

已滿足適用檢查項的 80%

該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。

  • 近 30 天內可連通25 分
  • 已宣告認證方式10 分

    請在註冊中心條目中宣告憑證請求標頭,或保持端點能夠回應探測,以便判定其認證方式。

  • 已列出工具必需15 分
  • 描述必需15 分
  • 圖示10 分
  • 文件15 分
  • 授權條款10 分

    請在儲存庫或註冊中心條目中宣告授權條款。