Skip to main content

zyng-mcp

Record a running app with your coding agent, get back a managed, directed launch film — without ever recording it yourself.

Point your agent (Claude Desktop, Claude Code, or any MCP client) at your localhost app. This server captures real product proof keyless and free, then uses hosted Zyng Director to assemble the first cut, review it, and publish it on your credits. No TTS key ever leaves your machine, the video engine stays managed.

Tools

tool what it does needs
account your Zyng credit balance (the "do I have credits?" check) API token
direct read a local app's brand + route map so your agent can understand the product before capture Chromium, no key
capture_clips drive a running app headless, screen-record a feature into a raw clip + timeline Chromium, no key
trailer send the URL, brief, and captured proof into hosted Director, get back the exact reviewable spec, review token, and hosted Studio project URL, free API token
review local review page and markdown for the exact spec and clips, free nothing
estimate approximate the credit cost before spending API token
voices voice catalog, and whether premium voices are unlocked for this account API token
publish upload clips + a composition spec → a managed narrated stitch, downloaded as MP4 API token, spends credits

Install

pipx install zyng-mcp            # or: pip install ./zyng_mcp-0.1.0-py3-none-any.whl
python -m playwright install chromium   # one-time browser download (~150MB)

capture_clips needs Chromium; publish does not (the render happens on Zyng). No ffmpeg required.

Get an API token

  1. Sign in at https://app.zyng.work (Google).
  2. Avatar menu → API tokensMint, and copy the zyk_… token (shown once).

A fresh account includes free credits; 1 credit = 1 second of finished video.

Recording apps that need a login

Never put a password in a capture spec — it would land in the agent's context, the tool-call logs, and (if typed on screen) the uploaded video. Three on-machine options instead, all resolved locally so the credential never reaches the agent or Zyng:

HTTP Basic Auth (the browser's WWW-Authenticate dialog — e.g. a staging site):

zyng-mcp secret set staging_basic_auth   # hidden prompt; enter:  username:password

Then pass the secret's name to capture (the agent never sees the value):

{ "do": "capture_clips", "http_auth": "staging_basic_auth" }

Playwright answers the challenge at the network layer — no dialog, nothing on screen, authenticated:true.

Preferred — a saved session (nothing is typed or recorded):

zyng-mcp login http://localhost:3000   # opens a browser; log in by hand, press Enter to save

This writes the authenticated session to ~/.zyng/state/<host>.json (chmod 600). capture_clips auto-detects it for that host, so recordings start already signed in — the result shows "authenticated": true. No login step, no password on screen.

If you must demonstrate the login itself — a named secret (the agent only sees the name):

zyng-mcp secret set acme_password      # hidden prompt; stored in the OS keychain or a chmod-600 file

Then a step references it by name (never the value):

{ "do": "fill", "selector": "#password", "secret": "acme_password" }

The value is resolved at capture time and never enters the spec, the tool call, a log, or the result. Keychain storage needs pipx install "zyng-mcp[keychain]"; otherwise it falls back to ~/.zyng/secrets.json (chmod 600). You can also pass a secret as an env var, e.g. ZYNG_SECRET_ACME_PASSWORD.

Anything visible on screen during capture ends up in the uploaded MP4 — prefer the saved session for anything sensitive, and use a throwaway/test account where you can.

Register with your agent

Add to claude_desktop_config.json (Claude Desktop) or .mcp.json (Claude Code):

{
  "mcpServers": {
    "zyng": {
      "command": "zyng-mcp",
      "env": {
        "ZYNG_API_KEY": "zyk_your_token_here",
        "ZYNG_BASE_URL": "https://app.zyng.work"
      }
    }
  }
}

(If you installed with pipx, zyng-mcp is on your PATH. With a venv, use the absolute path to the zyng-mcp script, or command: "python", args: ["-m", "zyng_mcp.server"].)

Use it

Tell your agent something like:

My app is running at http://localhost:3000. Record the sign-in and the dashboard, then publish a 30-second pitch. Say "this is the fastest way to onboard" over the dashboard.

The preferred flow is: ask whether this should be a desktop cut or a mobile-first cut, capture one proof clip per payoff with capture_clips, call trailer to let hosted Director assemble the first cut, show the review, then publish once you approve it.

The brief should sound like Director, not a form fill. Ask in plain language:

  • what should this cut make unmistakable?
  • who is this for?
  • what product proof should it show?

If the product needs a little understanding first, use direct before capture. It reads the local brand and route map so the agent can form a stronger brief before it calls trailer.

Spec shapes

trailer input:

{
  "url": "http://localhost:3000",
  "nudge": "Focus on onboarding speed for founders.",
  "clips": ["/abs/path/dashboard.webm", "/abs/path/report.webm"],
  "register": "cinematic",
  "audio_mode": "music_captions",
  "aspect": "16:9"
}

trailer returns the exact publish spec, an estimate, a local review_url, a review_token, and a hosted project_url that opens the same cut in Zyng Studio. Show that to the user first. Then call publish with the same spec, same clips, and the token.

capture_clips spec:

{ "url": "http://localhost:3000", "title": "Dashboard", "aspect": "16:9",
  "steps": [
    { "do": "wait",  "ms": 1000, "say": "Here's the dashboard." },
    { "do": "click", "selector": "text=New report", "say": "One click to a new report." }
  ] }

publish spec, usually returned by trailer (clip files matched by basename to the captured clips you pass in clips):

{ "title": "My app", "theme": "dawn", "voice": "narrator", "aspect": "16:9",
  "segments": [
    { "card": { "layout": "title", "heading": "My app", "narration": "A quick tour." } },
    { "clip": { "file": "dashboard.webm", "audio": "narrate", "say": "This is the dashboard." } }
  ] }

Notes

  • Credits + voice are managed. You never ship an ElevenLabs/OpenAI key; Zyng renders with its own voice and charges your balance (gate-at-zero with a clear error).
  • Selectors come from your source, not pixel-guessing — Zyng executes the steps your agent authors, so a recording is deterministic and re-runnable. A bad selector returns a clean error naming the step.
  • Set ZYNG_BASE_URL to a different host to target a self-hosted or staging studio.

Release files for zyng-mcp 0.15.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Built distribution (wheel)

Table of built distributions (wheels) for zyng-mcp 0.15.0
File Interpreter ABI Platform
zyng_mcp-0.15.0-py3-none-any.whl Python 3 none any Details

Release files / zyng_mcp-0.15.0-py3-none-any.whl

Download URL zyng_mcp-0.15.0-py3-none-any.whl
Size 65.3 kB
Tags Python 3
SHA-256 checksum
How to use checksums
73f58ad2a651ed96fa0693226d3be8cb4b6ba7f283ef718030973be93065e87c
BLAKE2b-256 checksum
How to use checksums
e0c45a653c9c958891eb6f28b47acac5dc091865579495d041b6a1ec7fb75637
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.8

Release history Release notifications | RSS feed

0.23.0

1 release file

0.22.0

1 release file

0.21.1

1 release file

0.21.0

1 release file

0.20.0

1 release file

0.19.0

1 release file

0.18.0

1 release file

0.17.0

1 release file

0.16.0

1 release file

0.15.1

1 release file

This release

0.15.0 This release

1 release file

0.14.0

1 release file

0.13.0

1 release file

0.12.0

1 release file

0.11.0

1 release file

0.10.0

1 release file

0.9.0

1 release file

0.8.0

1 release file

0.7.0

1 release file

0.6.1

1 release file

0.6.0

1 release file

0.5.0

1 release file

0.4.0

1 release file

0.3.0

1 release file

0.2.0

1 release file

0.1.0

1 release file

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page