{"protocolVersion":"0.3.0","name":"Percify","version":"3.0.0","description":"AI avatar platform — generate realistic talking avatars, clone voices in many languages, produce lip-synced videos from text, and replicate short-form videos from a link with shot-level analysis.","url":"https://mcp.percify.io/mcp","documentationUrl":"https://docs.percify.io/api-reference/introduction","provider":{"organization":"Percify","url":"https://percify.io"},"supportedInterfaces":[{"url":"https://mcp.percify.io/mcp","transport":"streamable-http","preferredTransport":"streamable-http"},{"url":"https://api.percify.io/v3/playground/v1","transport":"http+json"}],"capabilities":{"streaming":false,"pushNotifications":false,"stateTransitionHistory":false},"defaultInputModes":["text/plain","application/json"],"defaultOutputModes":["application/json"],"securitySchemes":{"bearer":{"type":"http","scheme":"bearer","description":"Long-lived API key, prefixed `pk_live_`. Create one at app.percify.io → API access."}},"security":[{"bearer":[]}],"skills":[{"id":"list_models","name":"List models","description":"List Percify generation models (image / video / audio) with their id, output type, credit cost, and required inputs.","tags":["ai","avatar","video","voice"],"inputModes":["text/plain","application/json"],"outputModes":["application/json"]},{"id":"get_model","name":"Get model","description":"Get the full input JSON Schema, pricing, and a worked example for one model id.","tags":["ai","avatar","video","voice"],"inputModes":["text/plain","application/json"],"outputModes":["application/json"]},{"id":"estimate_cost","name":"Estimate cost","description":"Price a generation BEFORE running it — exact server-side pricing including quality/resolution multipliers and per-second audio billing (the server probes audio duration itself).","tags":["ai","avatar","video","voice"],"inputModes":["text/plain","application/json"],"outputModes":["application/json"]},{"id":"wait_for_generation","name":"Wait for generation","description":"Long-poll a generation server-side: returns as soon as it finishes (or after ~45s with stillRunning=true — just call again).","tags":["ai","avatar","video","voice"],"inputModes":["text/plain","application/json"],"outputModes":["application/json"]},{"id":"generate","name":"Generate","description":"Start a generation.","tags":["ai","avatar","video","voice"],"inputModes":["text/plain","application/json"],"outputModes":["application/json"]},{"id":"get_generation","name":"Get generation","description":"Poll a generation by id.","tags":["ai","avatar","video","voice"],"inputModes":["text/plain","application/json"],"outputModes":["application/json"]},{"id":"check_usage","name":"Check credits and usage","description":"Return this account's REMAINING credit balance plus the current month's usage (credits spent, runs, API runs) and the top-up URL.","tags":["ai","avatar","video","voice"],"inputModes":["text/plain","application/json"],"outputModes":["application/json"]},{"id":"list_generations","name":"List past generations","description":"List this account’s most recent generations, newest first: id, model, status, output urls, credits spent and the start of the prompt.","tags":["ai","avatar","video","voice"],"inputModes":["text/plain","application/json"],"outputModes":["application/json"]},{"id":"wait_for_job","name":"Wait for a job","description":"Wait server-side for a long job instead of polling: returns as soon as the job reaches a final state, or after ~45s with stillRunning=true (just call again).","tags":["ai","avatar","video","voice"],"inputModes":["text/plain","application/json"],"outputModes":["application/json"]},{"id":"analyze_video","name":"Analyze a video","description":"Video intelligence: break a short-form video (TikTok / YouTube Shorts / Reels URL, or any direct https video URL) into a shot-level replication blueprint — per-clip generation prompts, per-second a…","tags":["ai","avatar","video","voice"],"inputModes":["text/plain","application/json"],"outputModes":["application/json"]},{"id":"get_video_analysis","name":"Get video analysis","description":"Poll a video analysis by id.","tags":["ai","avatar","video","voice"],"inputModes":["text/plain","application/json"],"outputModes":["application/json"]},{"id":"replicate_video","name":"Replicate a video","description":"Generate an AI replica from a ready video analysis: each blueprint clip renders through the chosen model, clips are stitched, and a branded side-by-side compare video is produced.","tags":["ai","avatar","video","voice"],"inputModes":["text/plain","application/json"],"outputModes":["application/json"]},{"id":"get_replication","name":"Get replication","description":"Poll a replication run by id.","tags":["ai","avatar","video","voice"],"inputModes":["text/plain","application/json"],"outputModes":["application/json"]},{"id":"compare_models","name":"Render a model comparison","description":"Render a branded, post-ready \"Model A vs Model B\" MARKETING cut (9:16 or 16:9) from two of your finished generations — the shareable side-by-side ad.","tags":["ai","avatar","video","voice"],"inputModes":["text/plain","application/json"],"outputModes":["application/json"]},{"id":"get_compare","name":"Get model comparison","description":"Poll a compare_models render.","tags":["ai","avatar","video","voice"],"inputModes":["text/plain","application/json"],"outputModes":["application/json"]},{"id":"create_avatar","name":"Create avatar persona","description":"Save a reusable Avatar Persona: a face frame + a voice, callable by name with avatar_say.","tags":["ai","avatar","video","voice"],"inputModes":["text/plain","application/json"],"outputModes":["application/json"]},{"id":"list_avatars","name":"List avatar personas","description":"List the user’s saved Avatar Personas (name, whether a voice is attached).","tags":["ai","avatar","video","voice"],"inputModes":["text/plain","application/json"],"outputModes":["application/json"]},{"id":"avatar_say","name":"Make an avatar speak","description":"Make a saved Avatar Persona speak a script: the persona’s voice is cloned saying the text (zonos2), then the frame is lip-sync animated to it (infinitetalk).","tags":["ai","avatar","video","voice"],"inputModes":["text/plain","application/json"],"outputModes":["application/json"]},{"id":"get_avatar_job","name":"Get avatar job","description":"Poll an avatar_say job.","tags":["ai","avatar","video","voice"],"inputModes":["text/plain","application/json"],"outputModes":["application/json"]},{"id":"delete_avatar","name":"Delete avatar persona","description":"Permanently delete a saved Avatar Persona (its stored frame/voice references and say-job history).","tags":["ai","avatar","video","voice"],"inputModes":["text/plain","application/json"],"outputModes":["application/json"]},{"id":"make_video","name":"Make a short video","description":"Make a fully-edited short-form \"mascot\" video from a topic: writes a spoken script, generates an AI presenter + voice, lip-syncs, then applies the retention three-act edit (b-roll hook, seam captio…","tags":["ai","avatar","video","voice"],"inputModes":["text/plain","application/json"],"outputModes":["application/json"]},{"id":"reedit_video","name":"Recut a video","description":"Re-cut a finished make_video job with a different retention flow, WITHOUT re-rendering its lip-sync.","tags":["ai","avatar","video","voice"],"inputModes":["text/plain","application/json"],"outputModes":["application/json"]},{"id":"get_mascot","name":"Get video job","description":"Poll a make_video job.","tags":["ai","avatar","video","voice"],"inputModes":["text/plain","application/json"],"outputModes":["application/json"]},{"id":"read_brand","name":"Read a brand from its website","description":"Brand OS: read a brand from its website.","tags":["ai","avatar","video","voice"],"inputModes":["text/plain","application/json"],"outputModes":["application/json"]},{"id":"list_brands","name":"List brands","description":"Brand OS: this account’s brands, with id, name, domain and status.","tags":["ai","avatar","video","voice"],"inputModes":["text/plain","application/json"],"outputModes":["application/json"]},{"id":"get_brand","name":"Get brand","description":"Brand OS: one brand in full.","tags":["ai","avatar","video","voice"],"inputModes":["text/plain","application/json"],"outputModes":["application/json"]},{"id":"list_plays","name":"List plays","description":"Brand OS: the play library.","tags":["ai","avatar","video","voice"],"inputModes":["text/plain","application/json"],"outputModes":["application/json"]},{"id":"write_take","name":"Write a take on a play","description":"Brand OS: write a brand’s words into a play, the text for each of its slots from one angle.","tags":["ai","avatar","video","voice"],"inputModes":["text/plain","application/json"],"outputModes":["application/json"]},{"id":"render_play","name":"Render a play","description":"Brand OS: render a brand’s version of a play to an MP4 from the play’s current take (write_take first).","tags":["ai","avatar","video","voice"],"inputModes":["text/plain","application/json"],"outputModes":["application/json"]},{"id":"get_render","name":"Get render","description":"Brand OS: a render_play job: running, done with videoUrl, or failed.","tags":["ai","avatar","video","voice"],"inputModes":["text/plain","application/json"],"outputModes":["application/json"]},{"id":"get_autopilot","name":"Get autopilot","description":"Brand OS: a brand’s autopilot.","tags":["ai","avatar","video","voice"],"inputModes":["text/plain","application/json"],"outputModes":["application/json"]},{"id":"set_autopilot","name":"Set autopilot","description":"Brand OS: turn a brand’s autopilot on or off, or change when and where it posts.","tags":["ai","avatar","video","voice"],"inputModes":["text/plain","application/json"],"outputModes":["application/json"]},{"id":"run_autopilot","name":"Run autopilot now","description":"Brand OS: fill a brand’s empty autopilot slots now instead of at the next 15 minute pass.","tags":["ai","avatar","video","voice"],"inputModes":["text/plain","application/json"],"outputModes":["application/json"]},{"id":"get_brand_performance","name":"Get brand performance","description":"Brand OS: what performs for a brand, from its own published posts with numbers over the last 120 days.","tags":["ai","avatar","video","voice"],"inputModes":["text/plain","application/json"],"outputModes":["application/json"]},{"id":"list_social_accounts","name":"List social accounts","description":"Brand OS: the social accounts connected to this Percify account, or those for one brand plus any unassigned: id, platform, username, the brand each speaks for, whether it can post and whether it ne…","tags":["ai","avatar","video","voice"],"inputModes":["text/plain","application/json"],"outputModes":["application/json"]},{"id":"schedule_post","name":"Publish or schedule a post","description":"Brand OS: publish, schedule or draft a post on connected social accounts.","tags":["ai","avatar","video","voice"],"inputModes":["text/plain","application/json"],"outputModes":["application/json"]},{"id":"get_post","name":"Get post","description":"Brand OS: a post made with schedule_post.","tags":["ai","avatar","video","voice"],"inputModes":["text/plain","application/json"],"outputModes":["application/json"]}],"additionalInterfaces":{"mcpServerCard":"https://percify.io/.well-known/mcp/server-card.json","apiCatalog":"https://percify.io/.well-known/api-catalog","authGuide":"https://percify.io/auth.md"}}