MODEL CONTEXT PROTOCOL
GhostViral MCP.
GhostViral MCP lets Claude, Cursor, Codex, and other MCP clients create faceless videos on your GhostViral account. The model uses tools for script, stock search, captions, composition, and GhostViral FFmpeg render. DeepSeek, ElevenLabs, and Pexels keys stay on GhostViral — they are never put in the client config.
Connect in one step
https://ghostviralai.com/mcpClaude
- Open Settings → Connectors → Add custom connector.
- Name it GhostViral and paste the MCP address.
- Press Connect, sign in to GhostViral and press Allow.
ChatGPT
- Open Settings → Apps & Connectors → Advanced, and turn on Developer mode.
- Create a connector named GhostViral with the MCP address and OAuth.
- Sign in to GhostViral and press Allow.
Cursor
- Press Add to Cursor and confirm.
- Cursor asks you to sign in: sign in to GhostViral and press Allow.
VS Code
- Press Add to VS Code and confirm.
- Sign in to GhostViral when VS Code asks, and press Allow.
Claude Code
- Run the command below.
- In Claude Code, type /mcp, pick ghostviral and sign in.
claude mcp add --transport http ghostviral https://ghostviralai.com/mcpAny other agent
- Paste the address into the agent's MCP settings; agents that support OAuth open the Allow page by themselves.
- Agents that only take a key: get a personal address on the Agent page.
MCP URL
Primary endpoint: https://ghostviralai.com/mcp
Alias: https://ghostviralai.com/api/mcp
Machine-readable pointers for agents: https://ghostviralai.com/llms.txt
Connect in 4 steps
- Open Agent and pick Claude, Cursor, Codex, or Other — then copy the MCP URL.
- Paste
https://ghostviralai.com/mcpin your AI app and choose Connect (Codex:codex mcp addthencodex mcp login … --oauth-client-registration dcr). - GhostViral opens a one-time personal Allow link (
/agent/allow?request=…). Sign in and Allow. Unused links expire in about 15 minutes. - Ask the model to call
get_options. Access lasts about 1 hour; refresh up to 24 hours. Manual Bearer links from Agent last about 6 hours.
Example config
{
"mcpServers": {
"GhostViral": {
"url": "https://ghostviralai.com/mcp"
}
}
}For clients that accept a JSON remote MCP entry, use the URL above. OAuth-capable clients handle access tokens and renewal automatically (access ~1 hour, refresh up to 24 hours). Manual Bearer connections from Agent last about 6 hours.
What models can do
Prefer GhostViral tools for script, licensed stock video and photos, ElevenLabs voice, and Neon Pop or Pro Bold captions. The connected MCP agent makes every creative choice (research, script, stock picks from thumbnails, voice, captions). Use MCP prompts produce_faceless_short / pick_stock_timeline for the full brief. Gemini does not auto-pick visuals over MCP. For factual topics, research with your connected agent and include HTTPS sources in set_script.
create_project,set_script, optionalplan_visuals(query suggestions only)search_stock(always withprojectId) then agent picks →set_timelineset_composition,set_captionsestimate_creditsthensynthesize_voicewithconfirm:true(this charges credits)set_audio(optional): a built-in bed and effects placed on words of the script. The built-in sounds need no credit.search_soundsand Openverse are there when a video needs a specific bed, ambience or hit; you pick thesoundId.review_audiochecks the mix, and any credit goes in the post description.get_motion_guide,set_motion(optional: title, cuts, callouts; free to change)start_renderwithconfirm:true(renderMode: "server"when the agent cannot run shell commands), thenpoll_render,get_download_url- Shortcut skill:
create_faceless_video
Cloud MCP supports 15 / 30 / 45 / 60 second shorts and 5 / 8 / 12 minute videos (300 / 480 / 720s) at 9:16 or 16:9.
Scheduling and posting
On a paid plan a model can also set up the Calendar: a rule that makes a new 15 to 60 second video on set days and times and posts it to the user's connected YouTube, TikTok, Instagram and X accounts, automatically or after the user's approval. Accounts are connected by the user in Channels, never by the model.
list_social_accounts: the connected accounts and the credit fee per postcreate_schedule_plan: call it first withoutconfirmfor the credit estimate, show that to the user, then again withconfirm:truelist_schedule_plans,update_schedule_plan(pause, resume, stop or edit)next_scheduled_render: render a waiting plan video on this machine
Creating a rule charges nothing. Credits are taken per video when it is made, and a rule pauses itself when they run out. Three rules can run at once and a day holds three videos.
Sound
Every render can carry a music bed under the voice, ducked while the voice speaks, and a short effect on swipes, flashes, punches and callouts. With no instruction the bed is chosen from the script. The eight built-in tracks (epic, mysterious, upbeat, chill, dramatic, inspiring, tense, lofi) are original compositions, public domain, and need no credit.
The agent can also place effects on moments of the script: set_audio with effects, each a sound and a cue of two to five words copied from the script. The built-in effects are a riser that ends on its cue, boom, drop, chime, glitch, typing, notify, shutter, tick, click, heartbeat, swoosh and the five cut hits. All of them are synthesized by GhostViral and public domain. Over speech a placed effect plays quieter so the words stay clear.
When none of them fits, the agent can design its own with design_sound: a synth recipe of up to six layers (oscillators or noise with a pitch glide, an envelope, a filter sweep and repeats, then echo and drive), or one of the presets shifted in pitch and length. No file is uploaded; the renderer synthesizes the recipe, so the sound is original and needs no credit. The reply measures it first and says when a phone speaker would barely play it or when it ends in a long silence.
search_sounds looks through Openverse (no API key) for a bed, an ambience used as that bed, or a short effect. Only CC0, public domain and CC BY are returned, so the video can be used commercially. Share-alike, non-commercial and no-derivatives are left out. The agent chooses a soundId and passes it to set_audio as bedSoundId or effectSounds. A raw audio URL is not accepted. When a result asks for attribution, that line belongs in the description.
review_audio scores the mix before render: level, ducking, whether each effect lands in a gap between words, and which credits are due. The prompt choose_soundtrack is the brief. Earshot, the local listening tool, is optional and runs on the agent's own machine; GhostViral does not load those models.
Motion design
A connected agent does not have to invent the picture. set_motion takes a direction: pulse (precise), signal (warm), shadow (cinematic), type (loud hook) or drift (charts). The server applies the accent, the cuts and the camera. Leave those fields empty unless you mean to override them. With no direction, a matching script still picks one; otherwise a short stays punch and a long video stays clean.
Every render carries motion design: a hook title, accents on the cuts, callouts for the figures the voice says and, on shorts, a progress bar. With no instruction the video is directed automatically (the Punch look for shorts, Clean for 5 to 12 minute videos). An agent can direct it with set_motion:
direction:pulse,signal,shadow,typeordriftlook:auto,punch,depth(3D type),cleanoroff(plain cuts)title: the hook card, withrise,poporstampcuts, one per scene boundary:cut,punch,flash,dip,swipecamera, one per scene:hold,push,pullcallouts: short text at the second its word is spoken;endCard,progress,accent
Graphic scenes
set_motion can also put a graphic on a scene: an animated composition drawn by code, with the captions still running. By default it is drawn over the scene's own footage, which keeps playing dimmed behind it; with ground: "solid" (always the case for maps and the paper theme) it gets a ground of its own and the clip is not used. Each entry of graphics names a type and where it goes: a scene (from 1), or a cue, a few consecutive words of the script. With a cue the graphic lands where the words are spoken, and a list or chart whose items are spoken after the cut keeps building while the footage changes. The types:
map: one to fourplaces. A country is coloured in, a city gets a pin and a label, androute:truedraws the line from each place to the next. Countries and about 240 major cities are looked up; anything else needslatandlon.stat: onevaluesuch as90%or$5,000counts up and settles onatSec, with alabelunder it.bars: two to six bars from zero, atitlethat states the conclusion, aunitand asource.type: lines of on-screen type;main:trueis the large one and asterisks mark the accent words.list: atitleand two to five short items, one per cue.canvas(optional): the agent's own Canvas 2Dcode, the body of a function ofctxandscalled once per frame, withmarksplaced on spoken words. For models that write reliable drawing code, when no built-in type can show the idea. The code runs in an isolated sandbox with no access to the page, the account or the network, and a built-infallbackis drawn wherever it cannot run. The code gets brushes onsfor motion-graphics craft in a few lines: springs, staggered and enveloped timing, counters, words that rise or pop in one by one, strokes and routes that draw themselves with an arrow head, rings, mask reveals, marker highlights, particle bursts and glow, all pure functions of the frame.get_motion_guidehas the full contract and an example.
graphicsTheme is ink (dark) or paper (editorial), and buddy:true adds a small character that reacts to each cue. A graphic needs a scene of at least two seconds; a place that cannot be located, or a value that is not a number, is dropped and reported rather than guessed. Graphic scenes are drawn by the browser render and by the local render command alike.
Lottie animations
A graphics entry with type: "lottie" plays an animation from GhostViral's built-in library over the footage, which keeps playing undimmed: lowerThird, arrow, circle, underline, checkmark, cross, fire, heart, laugh, subscribe, follow, swipeUp and burst. Name it with name and place it with a cue (it starts on those words), atSec or a scene. It can share a scene with another graphic and run over a cut.
slot:top,center,bottomor a corner, always inside the 9:16 safe area (clear of the top 13%, the bottom 35% and the icon strip on the right).scalefrom 0.5 to 1.6.tintrecolours its accent parts (the video's accent by default);playisonceorloop, andholdSeckeeps it on screen between its entrance and exit.textandsubtextfor the lower third (name and role), the subscribe and follow prompts and the swipe-up hint.
Up to eight per video. A request the library cannot take comes back from set_motion under refused with the reason; one that cannot be placed (spoken during the hook, its slot already taken, too close to the end) is listed in the plan's dropped. Every animation is GhostViral's own work, free to use in any video made here, commercial use included. They are drawn on the machine that renders, by the browser render, the local render command and the server render alike.
The renderer keeps motion readable whatever it is asked: one text element at a time, text holds 0.3 seconds per word plus 0.5 before it leaves, no effect on scenes shorter than 0.7 seconds, and flashes at least half a second apart. set_motion returns the plan as it will be drawn and lists anything those rules dropped. get_motion_guide returns the full vocabulary with the project's scene windows and word times, and the direct_motion prompt is the brief.
To check the result before the final render, start_render also returns a previewCommand: a half-size draft made on the agent's machine with a contact sheet of the frames around every title, callout and cut. Nothing is uploaded and no credits are charged; change set_motion and run it again as often as needed. Camera moves, the punch zoom and the 3D type of the depth look are drawn by the browser render on /agent; the local FFmpeg command draws the titles, callouts and cut effects flat.
Checks before and after the render
GhostViral's video engine is called Poltergeist. It checks a video twice. Before the voice is made, set_timeline returns pacing: a score from 0 to 10 with a verdict (good, fix_recommended or slideshow) and a fix for each finding, such as the same clip used twice, one shot held too long, a still photo as the opening shot, or a clip shorter than its scene that would restart on screen. After an agent render, poll_render returns check: one FFmpeg pass over the finished MP4 that reports the length, picture size, loudness (platforms play videos at about -14 LUFS), true peak, and any black or frozen stretches. Neither check blocks a render; the agent tells the user what was found.
Where the video renders
start_render takes a renderMode. With server, GhostViral renders the MP4 on its own server and the agent only calls poll_render and get_download_url: nothing to run and no network needed on the agent's side, which suits chat apps and cloud sandboxes. It covers videos up to 60 seconds, within a monthly allowance shared with scheduled videos. With agent, the agent runs the returned runCommand to encode on its own machine with FFmpeg (any length, canvas-code graphics drawn). The default, auto, returns the command and moves a short to the server by itself when the job is not fetched within three minutes.
The command works behind HTTPS_PROXY (it restarts itself with NODE_USE_ENV_PROXY=1 on Node 22.21+ or 24, and accepts NODE_EXTRA_CA_CERTS or SSL_CERT_FILE). A sandbox allowlist needs every host listed under render.agentRenderHosts in get_options; if a host is refused, the command names it and suggests renderMode: "server".
If an AI says “MCP not found”
GhostViral MCP is not a third-party marketplace listing yet. Share this docs page or the endpoint URL directly:
- Docs:
https://ghostviralai.com/docs/mcp - Endpoint:
https://ghostviralai.com/mcp - Connect UI:
https://ghostviralai.com/agent