Marketing
engine-production-3bdc.up.railway.app
Provides tools for generating and managing marketing hooks with psychology insights and templates.
ENDPOINT 1
https://engine-production-3bdc.up.railway.app/mcp
MCP server metadata
- Name
- vhgengine
- Version
- 3.1.0
VHGENGINE - agents-first viral-hook engine. You are the customer; there is no human in a browser. Every step is machine-driven. GETTING STARTED 1. Call signup(beta_access_code="<YOUR-8-DIGIT-CODE>", idempotency_key="unique-retry-key", name=...) -> api_key. Substitute the code issued to you. The placeholder is deliberately NOT eight digits: an eight-digit guess passes schema validation, reaches signup, and spends a durable rate-limited attempt before the code is ever tested, returning 403 beta_access_denied. Standard access includes ten free product requests; owner access is unlimited. Signup retains 500 credits as a compatibility balance for historical ledgers, but beta operations charge zero. Exact signup replay recovers the same derived key. 2. Authenticate every other tool: pass api_key="..." on the call, OR send Authorization: Bearer <key> over HTTP, OR set VHGENGINE_API_KEY (stdio default). An unauthorized envelope carries details.reason (no_credential | revoked | unknown_key | deleted) and a hint naming the fix for THAT one. reason="revoked" means your account is intact: use list_keys / create_key, do NOT sign up again. 3. Call getting_started (free, no auth) for the evidence quickstart and archive boundary. ARCHIVED QUOTE METADATA: quote can still parse historical generation inputs and prices, but it cannot authorize or predict a runnable writer. Do not use it as a fallback for missing source evidence. VERIFIED EVIDENCE: research_hook_evidence requests up to ten verified public source examples, separate from generated hooks. It publishes hard-gate and ranking receipts, never pads a short result, and accepts language, locale, format, source-minimum, and opener-verification policy. Where the approved provider runtime is bound, the call DISPATCHES to that provider and SPENDS vendor credits, bounded by a 300-second authorization: allow at least 310 seconds and do not re-ask with a fresh idempotency_key while it is still running. Where that runtime is not bound, the call makes no provider dispatch at all. Call health and read hook_research_provider_ready to see which posture you are on. unsupported_cell always means no provider call was made and the charge is zero, either because the request carries a planning deficiency or because that runtime is unavailable here. ARCHIVED MODES + COST / PRIVATE-BETA PRICING (base + per_hook * hooks_returned): instant 0+0/hook, smart 0+0/hook, research 0+0/hook, 0 at count=10. Customer pricing is zero. Aliases and wait fields remain stored-client metadata. Pricing rows keep literal {base, per_hook} fields for compatibility. Every generation, batch, job, and remix writer fails before work or billing. Reads (getting_started, pricing, get_estimates, list_archetypes, get_account, get_usage, get_activity, get_job, list_jobs, list_keys, list_hooks, get_hook, list_outcomes, list_runs, list_billing_events, list_creator_profiles, get_creator_profile, health) are free. LOST A RESPONSE? list_runs(request_id=...) is the receipt for any call you were charged for, newest first; follow its `hooks_url` for the hooks that call produced instead of re-running (and re-charging) the request. Bought hooks are retrievable for 90 days via list_hooks / get_hook (kept indefinitely once you report an outcome on them); list_hooks(mode=) takes the legacy generation vocabulary, aliases included, and resolves each to the stored instant|smart|research|remix, while list_hooks(tag=) is an exact literal slug match ("_" is a tag character, not a wildcard). Report what a hook actually did once posted with report_outcome (free; caller-supplied and not independently verified, retained for future calibration, but not consumed by generation, scoring, or retrieval today and no view prediction is claimed; list_hooks(unreported=true) finds rewardable hooks); read your reported outcomes in bulk with list_outcomes. Manage API keys with create_key / list_keys / revoke_key (free). Keep reusable, account-owned creator declarations with create_creator_profile / list_creator_profiles / get_creator_profile / update_creator_profile / delete_creator_profile. These versioned caller declarations and deny-by-default secondary-use decisions are stored for governance; VHGENGINE does not verify authority, and learning/retrieval do not consume them today. Export the ledger, every hook/immutable served instance/non-prose lineage marker/outcome, and retained jobs, commissions, and request tags in ONE call with export_usage, then leave cleanly with delete_account (terminal; keeps the financial ledger and de-associates outcomes from the account while retaining their submitted content, URLs, and tags in the shared corpus). ARCHIVED WAIT GUIDANCE: expected_wait {p50_ms, p90_ms, source}, progressToken, and generation-job fields remain readable for stored clients. No archived writer starts, streams progress, or queues work. SOURCE-FREE GENERATION IS ARCHIVED. generate_hooks, generate_hooks_batch, remix_hook, and start_generate_job fail before model, provider, queue, persistence, or billing work. They cannot create substitutes for missing research supply, so cancellation cannot leave hidden generated hooks or charges. Use research_hook_evidence with an idempotency_key; it returns only source-proven public footage or an honest shortfall/unsupported outcome. ERRORS are one typed envelope: {"error": {code, message, retriable, retry_after_seconds, details (with a next-action hint), request_id}}. Common codes: unauthorized, forbidden (key lacks the scope), beta_access_denied, beta_quota_exhausted, invalid_request, not_found, conflict, insufficient_credits (retained compatibility error; customer operations are zero-priced during beta), llm_unavailable (legacy compatibility error, never an evidence fallback), configuration_unavailable (the operator must install a required security secret), capability_disabled (the operation is defined but its measured writer remains off), idempotency_conflict, rate_limited (honor retry_after_seconds; get_account.rate_limit shows the remaining window so a fleet can pace BEFORE being throttled), internal. Each tool's docstring lists the errors it can return. A failed resource read (vhgengine://...) carries the SAME envelope in the JSON-RPC error's `data` field, with the message repeated in `message`. SCHEMAS: every tool advertises both an inputSchema (per-argument descriptions, enums and bounds) and an outputSchema naming the keys it returns. Read them instead of guessing, and instead of paying for a call to discover a field name. IDEMPOTENCY: pass idempotency_key on signup / generate_hooks / generate_hooks_batch / research_hook_evidence / score_hook / score_hooks_batch / remix_hook / add_credits / start_generate_job / report_outcome / create_creator_profile / update_creator_profile / delete_creator_profile; a replay returns the stored result (replayed:true) and never applies the write twice or re-charges. Profile deletion erases its old create/update replay bodies; reusing one of those keys fails closed with idempotency_conflict and reason=resource_deleted instead of recreating the profile.
Known tools 45
list_archetypesList the hook archetypes with psychology, platforms, and templates.
Inferred read-onlyexport_usageExport ledger, hook, instance, lineage, outcome, profile, and retained-job data.
Inferred read-onlyadd_creditsCompatibility credit grant (1-10000); beta customer operations are already free.
Inferred read-onlyget_creator_profileGet the current or one exact historical creator-profile version.
Inferred read-onlyupdate_creator_profileAppend a full immutable profile version with compare-and-swap.
Inferred read-onlydelete_creator_profileErase profile facts and consent history; retain a retraction marker.
Potential side effectsrevoke_keyRevoke the key with `prefix` (from list_keys): it stops working, others keep working.
Inferred read-onlyresearch_hook_evidenceReturn a deterministic, unpadded portfolio of verified hook evidence.
Inferred read-onlysynthesize_hooksWrite original hooks derived from verified viral source evidence.
Potential side effectslist_jobsList this account's jobs, newest first (summaries without the result blob).
Inferred read-onlyset_webhookRegister (or replace) this account's webhook; the secret is returned ONCE.
Inferred read-onlyredrive_webhook_deliveryRequeue a dead-lettered webhook delivery: reset to pending, due now.
Inferred read-onlyCONNECT WITH APPROVAL
Client installation
Review this server and its permissions before adding it. Secret placeholders must be set locally.
Codex
~/.codex/config.toml
[mcp_servers.vhgengine]
url = "https://engine-production-3bdc.up.railway.app/mcp"
enabled = true
Claude Code
.mcp.json
{
"mcpServers": {
"vhgengine": {
"type": "http",
"url": "https://engine-production-3bdc.up.railway.app/mcp"
}
}
}
Claude Desktop
Settings → Connectors → Add custom connector
Name: vhgengine
Remote MCP URL: https://engine-production-3bdc.up.railway.app/mcp
Add this remote URL as a custom connector in Claude Desktop. Availability depends on the user plan and workspace policy.
Cursor
.cursor/mcp.json
{
"mcpServers": {
"vhgengine": {
"url": "https://engine-production-3bdc.up.railway.app/mcp"
}
}
}
Visual Studio Code
.vscode/mcp.json
Add to Visual Studio Code{
"servers": {
"vhgengine": {
"type": "http",
"url": "https://engine-production-3bdc.up.railway.app/mcp"
}
}
}
Generic MCP
Client-specific MCP configuration
{
"name": "vhgengine",
"transport": "streamable-http",
"url": "https://engine-production-3bdc.up.railway.app/mcp"
}
MCP Inspector
Run the official MCP Inspector locally and enter the indexed Streamable HTTP endpoint.
TRUST AND VERIFICATION EVIDENCE
Trust Data Available
BuiltWith Trust API v2 evidence for railway.app was fetched 2026-08-25T20:04:34.605Z.
railway.app is assessed as Trusted: Domain has an established technology history spanning over a year.
Evidence is source-attributed and does not guarantee that a third-party server is safe. Risk labels are conservative metadata heuristics.