mcpbeat Sign in

VHGENGINE MCP Server

by railway-up-engine-production-3bdc Your server? Claim it
answering

VHGENGINE is answering right now. Last checked 15 min ago. It exposes 45 tools.

Agents-first viral-hook engine: generate, score, and remix short-form hooks over MCP.

Uptime history 51 days of history · worst day 35%
51 days agonow
100.0%
Uptime 24h
90 of 90 checks
45
Tools
read from the server
353 ms
Response time
average over 24h
open, no key
Access
streamable-http

What changed 109

Every tool that appeared, vanished or quietly changed what it asks for. Recorded since 10 August 2026. No other catalogue keeps this.

18 Sep 2 tools changed the parameters they ask for research_hook_evidence, synthesize_hooks
17 Sep a tool description was rewritten research_hook_evidence
14 Sep a tool changed the parameters it asks for research_hook_evidence
11 Sep 3 tools changed the parameters they ask for get_job, research_hook_evidence, wait_for_job
11 Sep 2 tool descriptions were rewritten research_hook_evidence, wait_for_job
10 Sep a tool changed the parameters it asks for research_hook_evidence
10 Sep a tool description was rewritten research_hook_evidence
6 Sep a tool description was rewritten research_hook_evidence
6 Sep a tool changed the parameters it asks for research_hook_evidence
3 Sep 2 tool descriptions were rewritten generate_hooks, research_hook_evidence
and 94 more, back to 10 August 2026

Nothing serious here today

Today is the operative word: we check VHGENGINE every 15 minutes and re-read its code on every release. Watch it and you find out the day that stops being true.

Three servers free · no card

Connect this server

Endpoint below is the one we actually reach during checks — not the one copied from a README. Last verified 15 min ago.

run in your terminal
claude mcp add vhgengine --transport http https://engine-production-3bdc.up.railway.app/mcp
~/Library/Application Support/Claude/claude_desktop_config.json
{
  "mcpServers": {
    "vhgengine": {
      "url": "https://engine-production-3bdc.up.railway.app/mcp"
    }
  }
}
~/.codex/config.toml
[mcp_servers.vhgengine]
url = "https://engine-production-3bdc.up.railway.app/mcp"
.cursor/mcp.json
{
  "mcpServers": {
    "vhgengine": {
      "url": "https://engine-production-3bdc.up.railway.app/mcp"
    }
  }
}
.vscode/mcp.json
{
  "mcpServers": {
    "vhgengine": {
      "url": "https://engine-production-3bdc.up.railway.app/mcp"
    }
  }
}

Available tools 45

Read directly from the server with tools/list, grouped by what they act on. If a tool disappears, we record the date.

creator
create_creator_profile
Create an owned, versioned creator profile. Free; admin scope. At least one creator/audience/stance/fact is required. Returns the exact version, deny-by-default secondary-use decisions, receipts, and an unverified-attestation warning. Optional idempotency_key replays safely. Errors: unauthorized, forbidden, invalid_request, conflict, idempotency_conflict, configuration_unavailable, rate_limited.
delete_creator_profile
Erase profile facts and consent history; retain a retraction marker. Admin scope. Already committed customer hook outputs are not silently deleted. No profile data is used for secondary learning or cross-customer retrieval today. One-way replay-key tombstones prevent delayed keyed writes from recreating the profile. Requires the current expected_version and confirm="delete". Errors: unauthorized, forbidden, not_found, conflict, idempotency_conflict, invalid_request, configuration_unavailable, rate_limited.
get_creator_profile
Get the current or one exact historical creator-profile version. Read scope. Foreign, deleted, and unknown ids all return the same not_found envelope. Returns the same profile object as REST. Errors: unauthorized, forbidden, not_found, invalid_request, rate_limited.
list_creator_profiles
List current creator-profile versions, newest changed first. Free; read scope. Returns {profiles, limit, offset, total}. Each profile carries its immutable version, declarations, current secondary-use decisions, consent receipts, and unverified-attestation warning. Errors: unauthorized, forbidden, invalid_request, rate_limited.
update_creator_profile
Append a full immutable profile version with compare-and-swap. Admin scope. expected_version prevents lost updates. Returns version+1, or unchanged:true when the normalized full snapshot is identical. Optional idempotency_key replays safely. Errors: unauthorized, forbidden, not_found, conflict, idempotency_conflict, invalid_request, configuration_unavailable, rate_limited.
webhook
delete_webhook
Remove this account's webhook (WP-M). Admin scope. Args: api_key (admin scope). Cost=free. Returns {deleted: true}. Errors: unauthorized, forbidden, not_found (none registered), rate_limited.
get_webhook
This account's webhook (url + last delivery status; never the secret). Free read. Args: api_key (read scope). Cost=free. Returns {url, created_at, last_delivery_status, last_delivery_at, events}. Errors: unauthorized, not_found (none registered), rate_limited.
list_webhook_deliveries
List this account's webhook deliveries, newest first. Free read (WP-HOOKS). Verify your receiver end-to-end (a webhook.test ping is enqueued at registration) and diagnose failures without waiting out a real event. Args: status (pending|retrying| delivered|dead|retired), limit (1-200, default 50), offset (>=0), api_key. Each row has {delivery_id, event_type, status, attempts, last_status_code, error, timestamps, next_attempt_at, payload_preview (200 chars; the full body is never returned)}. Dead rows are kept 7 days. Errors: unauthorized, invalid_request, rate_limited.
set_webhook
Register (or replace) this account's webhook; the secret is returned ONCE. Admin scope. Hook Detector POSTs signed job.succeeded/job.failed/credits.low (WP-M). `url` https, no creds, public host; re-registering ROTATES the secret (a repeat call is not a no-op). Verify via X-VHG-Signature: sha256=HMAC_SHA256(secret, raw_body); a webhook.test pings. Args: url (1-2048), api_key (admin). Cost=free. Errors: unauthorized, forbidden, invalid_request, rate_limited. Returns {url, secret, created_at, events, note, test_delivery_id}.
account
delete_account
Permanently delete this account. TERMINAL, not reversible. Admin scope (WP-LIFE). Pass confirm="delete" (guards accidents). Revokes ALL keys and deletes live profile facts/consent, hooks, webhooks, deliveries, jobs and idempotency; KEEPS bounded profile retraction markers, the immutable financial ledger, and de-associated outcome rows. Export FIRST with export_usage: ledger, every hook/immutable instance/outcome/profile, plus every retained job, commission and request tag in one call. Paged: get_usage/list_hooks/list_outcomes/list_jobs. Backup aging: GET /v1/legal. Errors: unauthorized, forbidden, invalid_request, rate_limited.
get_account
Return this account's state + remaining rate-limit budget. Free read. `rate_limit` carries {limit, remaining, reset_epoch, reset_at, window_seconds} for the per-account window, the same budget REST clients read from X-RateLimit-* headers. Pace a fleet off `remaining` instead of discovering the ceiling by taking a rate_limited mid-run; this read itself consumes one of those calls. No API key is ever echoed back. Errors: unauthorized, rate_limited.
generate
generate_hooks
Archived source-free writer. Use research_hook_evidence instead. Always fails before model, template, provider, storage, or billing work. Research requires a real public source video with at least 50,000 observed views, a canonical link, and an independently audio-verified exact opener. Errors: unauthorized; invalid_request with reason unsourced_hook_generation_archived.
generate_hooks_batch
Archived source-free batch writer. Use research_hook_evidence instead. Always fails before model, template, provider, job, storage, or billing work. It cannot pad research supply with generated or paraphrased hooks. Errors: unauthorized; invalid_request with reason unsourced_hook_generation_archived.
score
score_hook
Score any hook text on 5 dimensions with rewrite tips. Free during beta. Deterministic heuristic scorer (no LLM). Args: text (3-300), platform, topic (optional, reproduces generate's score via the verbatim-echo penalty), tags (1-5 fleet slugs, WP-J), verbosity (full keeps per-dimension attribution), api_key, idempotency_key (replay not re-charged). Returns {score:{...,total}, verdict, suggestions, confidence, disclaimer, credits_charged, credits_remaining, request_id}. Errors: unauthorized, invalid_request, insufficient_credits, rate_limited.
score_hooks_batch
Score many hooks ranked with `best`, or compare named SETS. Free during beta. All-or-nothing charge. Plain: texts (1-25, each 3-300 chars). Self-test (E13): compare=true + sets (2-4 named lists, <=25 texts total) INSTEAD of texts -> per-set rankings + avg_score + winner + an honest winner_summary (same heuristic scorer on every set, never view prediction). Also: platform, tags, verbosity, api_key, idempotency_key. Returns {results, best, ...} or {sets, winner, winner_summary, ...}. Errors: unauthorized, invalid_request, insufficient_credits, rate_limited.
activity
get_activity
See what this account's agents are doing: in-flight ops + recent ops. Free. `in_flight` merges the live-ops registry (real stage/pct/eta mid-run) with your queued/running jobs; `recent` is the last completed charged ops. Every row has a human-readable message. The REST surface also offers an SSE feed at GET /v1/activity/stream. Args: recent_limit (1-100, default 20), api_key. Errors: unauthorized, rate_limited.
archetypes
list_archetypes
List the hook archetypes with psychology, platforms, and templates. Free, no auth. Returns {archetypes:[{id, name, description, psychological_trigger, best_for, templates}]}. Use an id for generate_hooks(archetypes=[...]) or remix_hook(target_archetype=...).
billing
list_billing_events
Recent billing events (usage.recorded, credits.granted, credits.low). Free. Newest first, paged with limit/offset like list_hooks and list_outcomes. Returns {events:[{id, event_type, payload, created_at}], limit, offset, total}. Errors: unauthorized, invalid_request, rate_limited.
cancel
cancel_job
Cancel a job that is STILL QUEUED. Free, repeatable, never refunds. ALWAYS branch on `cancelled`; reason + next_action say what to do. A queued job was never charged (the worker charges), so credits_refunded is always 0. A RUNNING job cannot be stopped: it finishes, CHARGES and persists. Cancelled reads as status "failed" with error.error.details.cancelled true; to re-run, resubmit with a FRESH idempotency_key (reusing the cancelled one replays the cancelled result). Errors: unauthorized, forbidden (key lacks the spend scope), not_found, rate_limited.
checkout
create_checkout
Get a hosted-checkout link outside beta. Disabled while beta pricing is free. The REQUIRED idempotency_key creates or replays one durable order and Stripe is called under an order-derived key, so a retry never mints a second order or session. Args: pack (from pricing.credit_packs), idempotency_key, success_url/cancel_url, api_key (spend). Returns {checkout_url, pack, credits, usd_cents, expires_at, order_id, order_state, replayed}. Errors: unauthorized, forbidden, invalid_request, idempotency_conflict, payments_disabled, rate_limited.
credits
add_credits
Compatibility credit grant (1-10000); beta customer operations are already free. When VHGENGINE_ADMIN_KEY is configured on the deployment this requires a matching admin_key argument; otherwise it stays self-serve (unless VHGENGINE_FREE_CREDITS is off). Idempotent on idempotency_key (replay does NOT grant twice). Returns {credits (new balance), granted}. Errors: unauthorized (missing/wrong admin key or self-serve disabled), invalid_request (amount range / balance ceiling), idempotency_conflict, rate_limited.
estimates
get_estimates
The measured/expected wait per generation mode. Free, no auth. Size a call before spending. Returns {op, modes:{instant|smart|research: {p50_ms, p90_ms, samples, source ("measured" once enough samples, else "default"), advice}}}.
export
export_usage
Export ledger, hook, instance, lineage, outcome, profile, and retained-job data. Free; run BEFORE delete_account. Same JSON body as GET /v1/usage/export; CSV has events. UNBOUNDED: prefer paged reads on big accounts. Email is masked without admin scope. Returns account/email/count, ledger, hooks, instances, lineage, outcomes, jobs, profiles, source_evidence, and corrupt markers. Jobs and profiles retain their bounded receipts. Source evidence includes metrics, retractions, and separate research/extraction results. Filters narrow ledger events only; all retained data categories stay complete. Errors: unauthorized, forbidden (key lacks read scope), rate_limited.
getting
getting_started
The 5-step agent quickstart: modes, wait guidance, links. Free, no auth. Written to be parsed and acted on. Returns {what_this_is, five_steps, modes (cost + live latency + when to use), wait_guidance (expected_wait, estimates, progressToken, jobs), links}.
health
health
Deep health: DB read+write probe, worker/queue, backup + integrity. Free. Uses the same DB, backup, offsite, and integrity probes as GET /health; status is "ok" only when the DB reads and writes. Returns status/time/LLM, outcome, queue, backups, integrity, running synthesis and delivery postures, commission/source/extract readers, profile readiness, and source writer state. Readable schema 3 proves codec support only; readiness separately proves this process has the exact authorization, private queue, deletion, and immutable-lineage substrate. llm_configured never calls an LLM; check job_worker_alive before start_generate_job.
hook
get_hook
Fetch one bought hook in full, including its parsed score. Free (WP-G). Account-scoped: a foreign or unknown id is not_found (no existence leak). Args: hook_id (from a generate/batch/remix response or list_hooks), api_key. Returns {hook_id, text, archetype, claim_type, mode, platform, topic, score_total, score, prompt_version, request_id, created_at, outcomes:[...], outcome_summary:{count, max_views, avg_views}}. Report results with report_outcome. Errors: unauthorized, not_found, rate_limited.
hooks
list_hooks
List the hooks this account has bought, newest first. Free (WP-G). Retrievable for 90 days. Args: mode (instant|smart|research|remix, or a generate alias such as template/search), since (ISO timestamp), tag (exact fleet-tag match), topic (substring), request_id (recover one charged call's hooks), unreported (only hooks a first outcome report can reward), limit (1-100), offset, api_key. Returns {hooks:[{hook_id, text, archetype, mode, score_total, created_at, request_id}], limit, offset, total}. Errors: unauthorized, invalid_request, rate_limited.
job
get_job
Poll an async job: status, real engine stage, progress, ETA, result/error. Poll after poll_after_seconds until status is "succeeded" (result holds the full generate body) or "failed" (error holds the typed envelope). Only the owning account can read a job; a foreign/unknown id is not_found (no existence leak). Returns {job_id, status, stage, progress_pct, eta_seconds, elapsed_ms, poll_after_seconds, result, error}. Errors: unauthorized, not_found, rate_limited.
jobs
list_jobs
List this account's jobs, newest first (summaries without the result blob). Args: limit (1-200, default 50), offset (>=0), api_key. Returns {jobs:[{job_id, status, stage, progress_pct, created_at, started_at, finished_at}], limit, offset, total}. Errors: unauthorized, rate_limited.
key
create_key
Mint a new named API key; the plaintext is returned ONCE. Requires admin scope. Delegate safely (WP-SCOPE): optional scopes (subset of read|spend|admin; omit for full power) + daily_credit_cap (credits/day; omit for uncapped) hand a sub-agent a key that can only do what you allow. Args: name (1-100), api_key (an admin-scoped key). Returns {api_key (store it), prefix, name, scopes, daily_credit_cap, created_at}. Errors: unauthorized, forbidden, invalid_request, rate_limited.
keys
list_keys
List this account's API keys as PREFIXES only (never the raw key). Admin scope. Returns {keys:[{prefix, name, scopes, daily_credit_cap, spent_today, created_at, revoked_at}]}, oldest first; revoked_at is null for an active key, scopes lists the key's grant (WP-SCOPE), spent_today is its credits spent since UTC midnight. Your signup key shows as name "default". Errors: unauthorized, forbidden, rate_limited.
outcomes
list_outcomes
List the posted outcomes THIS account has reported, newest first. Free (WP-LIFE). Retrieve submitted telemetry in bulk. Args: platform (tiktok|instagram|youtube|x|linkedin|other), since (ISO timestamp), hook_id, limit (1-200, default 50), offset (>=0), api_key. Rows include the feature snapshot. Returns {outcomes:[...], limit, offset, total}. Errors: unauthorized, invalid_request, rate_limited.
pricing
pricing
The machine-readable price list, with per-mode expected_wait. Free, no auth. Every customer operation is zero-priced during private beta. Returns {unit, usd_per_credit:0, beta, operations, pricing_modes with zero base/per_hook, expected_wait}. Internal provider-credit ceilings are separate from this list.
quote
quote
Read archived generation price and wait metadata without spending. Free. Validates the retained input schema and computes its historical price ceiling, balance, cap blocker, and wait metadata. It does not authorize or predict a runnable operation: generate_hooks is archived and always fails before work or billing. Errors: unauthorized, invalid_request, rate_limited.
redrive
redrive_webhook_delivery
Requeue a dead-lettered webhook delivery: reset to pending, due now. Admin scope. Valid ONLY on a `dead` delivery (a live receiver that exhausted its retries); any other status is a 409 conflict and a delivery you do not own is not_found. It re-attempts through the normal pipeline and, if it dies again, dead-letters normally. Args: delivery_id (from list_webhook_deliveries), api_key. Returns the refreshed row. Errors: unauthorized, forbidden, not_found, conflict, rate_limited.
remix
remix_hook
Archived source-free remix writer. Use research_hook_evidence instead. Always fails before rewriting, model, storage, or billing work. An extracted source hook cannot be replaced by generated or paraphrased copy. Errors: unauthorized; invalid_request with reason unsourced_hook_generation_archived.
report
report_outcome
Report what a bought hook actually did once posted. FREE (WP-H). Caller-supplied, unverified, and not used by generation/scoring/retrieval today. Retained for possible future calibration; no view prediction. Args: hook_id, platform (tiktok|instagram|youtube|x|linkedin|other), posted_at, views/likes (0..1e11), retention_pct?, url?, api_key, idempotency_key. Caps 20/hook, 500/day; an exact duplicate is a conflict. Returns outcome + aggregate + reward. Errors: unauthorized, not_found, invalid_request, conflict, rate_limited.
research
research_hook_evidence
Return an unpadded portfolio selected deterministically from verified evidence. Hard gates precede relevance and diversity; views are observed platform views. Openers are audio_verified, or transcript_grounded with explicit caveats when enabled. Each item has a grounded idea and later exact payoff, bound by content_arc_receipt to one request, media and transcript. Exact-audio items carry first_audible_speech and leading_segments; transcript-grounded items carry first_transcribed_spoken_unit and leave both audio-only fields null. New calls default to exact delivery; allow_partial accepts a shortfall at or above the declared minimum. Retained terminals may replay legacy shapes. Where the provider runtime is bound this DISPATCHES and SPENDS credits under a 600-second authorization for synchronous calls: allow at least 610 seconds. A 502 after about 300 seconds is the transport cutting a silent response, not the commission failing: replay the same idempotency_key for the completed result at no additional charge. Counts 11-30 require an idempotency key and return a durable job; poll get_job. Their execution budget is 1200 seconds, not a measured latency promise. Use result_view=compact for source evidence without the operational ledgers; full preserves the complete audit result. Errors: unauthorized, invalid_request, idempotency_conflict, rate_limited.
revoke
revoke_key
Revoke the key with `prefix` (from list_keys): it stops working, others keep working. Use to kill a leaked or old key. Args: prefix (the 12-char key prefix, e.g. vhg_sk_ab12), api_key (a DIFFERENT active key to authenticate this call). Returns {prefix, name, revoked, revoked_at, already_revoked}. You cannot revoke your LAST active key (create a replacement first). Requires the admin scope. Errors: unauthorized, forbidden, invalid_request (last key), not_found, rate_limited.
runs
list_runs
Every call this account was charged for, newest first. Free read. Recover a lost response in two calls, never re-charged: list_runs(request_id=...) for the receipt, then follow `hooks_url` for the hooks it produced. Page with `cursor` (one pass total) or `offset`; stop only when `exhausted` is true, never on a short page. Same composed read GET /v1/runs makes, so the two can never disagree. Errors: unauthorized, invalid_request, rate_limited.
signup
signup
Redeem a private-beta code and create an account. No API key needed. Standard codes are single-use with ten product requests. Owner codes are reusable and unlimited. Signup retains 500 credits as a compatibility balance, while customer pricing is zero during beta. An exact idempotent replay returns the same account and same derived API key without a second redemption. Errors: beta_access_denied, invalid_request, idempotency_conflict, rate_limited.
start
start_generate_job
Archived source-free writer job. Use research_hook_evidence instead. Always fails before a job, model, provider, storage, or billing work. Async execution cannot bypass source-video, view, link, and excerpt proof. Errors: unauthorized; invalid_request with reason unsourced_hook_generation_archived.
synthesize
synthesize_hooks
Write original hooks derived from verified viral source evidence. Each hook cites one admitted source: verbatim opening, timestamps or explicit nulls for untimed transcript evidence, observed views with observation time and a versioned virality receipt whose caveats say views correlate with, not prove, quality. A lexical novelty guard rejects copied source wording; quality stays unmeasured; never padded. idempotency_key is REQUIRED; a replay returns the exact stored terminal, uncharged. Live posture: GET /health hook_synthesis_enabled; evidence and LLM gates also apply. Errors: unauthorized, invalid_request, idempotency_conflict, conflict, rate_limited.
usage
get_usage
Return the credit balance, per-operation totals, and recent ledger. Free. Args: recent_limit (1-200, default 50), offset (>=0, pages `recent` past the newest rows), request_id (scope recent to that call's charges), tag + key_prefix (WP-J fleet filters), api_key. Returns {credits, totals:{by_operation}, recent:[...]} (each row carries key_prefix; tags in metadata). Errors: unauthorized, invalid_request, rate_limited.
wait
wait_for_job
Block until a job is terminal, then return it. Free, bounded, no poll loop. Returns the chosen get_job result_view plus timed_out, waited_ms and polls; branch on `status` exactly as you would with get_job. timed_out:true is NOT a failure, it means the budget ran out: call again with the SAME job_id. Waiting neither cancels nor charges; the worker charges when it runs the job either way. It returns IMMEDIATELY with worker_alive:false + `warning` when no worker exists here. Errors: unauthorized, not_found (unknown or foreign job_id), rate_limited.

Endpoints

URLTransportStateLatencyChecked
https://engine-production-3bdc.up.railway.app/mcp streamable-http answering 322 ms 15 min ago

Alternatives to VHGENGINE

same job, measured the same way
Kairn
by primeline-ai

Local-first knowledge engine for AI agents: memory, graph, and recall over MCP.

local only
I
Dee — Free Music for AI Agents
by danielwuhk77

Free AI music generation. Generate, share, and discover songs. First 10/month free.

77 installs/wk local only
Plur
by plur-ai

Open, local-first engram memory for AI agents: read, correct, delete; shared over MCP.

851 installs/wk local only
Product Lock MCP
by nickjazz

Product Lock tools for AI agents: generate, review, validate, and score locks.

25 installs/wk local only
Anvil
by usefulapi

Hosted MCP server for Anvil — fill & generate PDFs and run Etch e-signature packets for AI agents.

10 tools answering
Re:port Flow MCP
by re-port-flow

Generate PDF reports from Re:port Flow templates via Claude and other AI agents.

37 installs/wk 2 tools answering
Secobserve MCP
by nh4ttruong

MCP server for SecObserve: triage findings, import scan reports and SBOMs, generate VEX.

local only
Ryudi84
by ryudi84

MCP server for generating REST API boilerplate and Express endpoints.

22 installs/wk local only

VHGENGINE — questions

Answers built from our own checks of this server.

What can VHGENGINE do?
It exposes 45 tools, read directly from the server on our last check. Among them: add_credits, cancel_job, create_checkout, create_creator_profile, create_key, delete_account and 39 more. The full list with descriptions is on this page — we take it from the server itself via tools/list, not from a README. How MCP servers expose tools in the first place →
What is VHGENGINE mostly used for?
Its tools cluster around creator, webhook and account. That is what this server is built to work with — the grouping comes from the actual tool names, not from a category we assigned.
Is VHGENGINE working right now?
We send a real MCP handshake every 15 minutes. Over the last 24 hours 90 of 90 checks got a reply (100.0%), average response time 353 ms. The bar chart above shows every period we have measured.
How do I connect VHGENGINE?
Copy the ready config from this page — we generate it for Claude Code, Claude Desktop, Codex, Cursor and VS Code, each with the file path that client actually reads. It is a remote server, so there is nothing to install — the client connects to the address.
Does VHGENGINE need an API key?
No. VHGENGINE completed a full MCP handshake with us as an anonymous client and listed its tools without asking for anything. All 45 of them are readable on this page. This is what we observed, not what the docs claim.
How fast is VHGENGINE?
It answers our handshake in 353 ms on average, which is faster than 46% of all working MCP servers we measure. The comparison comes from our own checks across the whole registry, every 15 minutes.