{"_id":"@drantoniou/uploadcheck-mcp","_rev":"2-f69ef725d44212edb578f9fafc044e9c","name":"@drantoniou/uploadcheck-mcp","dist-tags":{"latest":"0.1.1"},"versions":{"0.1.0":{"name":"@drantoniou/uploadcheck-mcp","version":"0.1.0","license":"UNLICENSED","_id":"@drantoniou/uploadcheck-mcp@0.1.0","maintainers":[{"name":"drantoniou","email":"alex@antoniou.net"}],"homepage":"https://uploadcheck.app","bugs":{"url":"https://github.com/ajantoniou/uploadcheck/issues"},"bin":{"uploadcheck-mcp":"index.mjs"},"dist":{"shasum":"8f18c1d6aba63f7c97281d138af00801502ad6d3","tarball":"https://registry.npmjs.org/@drantoniou/uploadcheck-mcp/-/uploadcheck-mcp-0.1.0.tgz","fileCount":7,"integrity":"sha512-h2CylIlhb7YhKwaCGECNl/DUBuSNlTWsw4SaMdQhfql2WIQBnuGh+DIe1JXJenf+wTfmYaGEF6WdLO/WfX/KgQ==","signatures":[{"sig":"MEUCIG1VdpBH41H9obGBXZuFkZU5+YUcdKbpIGoYuEvsIhu/AiEA4nlChu/K127X0MYDjYLmXzLvTwq6nwz3Hepf1/WiPK8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":32583},"type":"module","gitHead":"be90bcb45d18c4067a60430b07e76ecf844a6049","_npmUser":{"name":"drantoniou","email":"alex@antoniou.net"},"repository":{"url":"git+https://github.com/ajantoniou/uploadcheck.git","type":"git","directory":"mcp-server"},"_npmVersion":"11.4.2","description":"MCP wrapper for the UploadCheck hosted API.","directories":{},"_nodeVersion":"24.4.1","dependencies":{"@modelcontextprotocol/sdk":"^1.24.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/uploadcheck-mcp_0.1.0_1780845980116_0.6684350912525563","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@drantoniou/uploadcheck-mcp","version":"0.1.1","type":"module","description":"MCP wrapper for the UploadCheck hosted API.","homepage":"https://uploadcheck.app","repository":{"type":"git","url":"git+https://github.com/ajantoniou/uploadcheck-mcp.git"},"bin":{"uploadcheck-mcp":"index.mjs"},"dependencies":{"@modelcontextprotocol/sdk":"^1.24.0"},"license":"MIT","publishConfig":{"access":"public"},"mcpName":"app.uploadcheck/uploadcheck","keywords":["mcp","model-context-protocol","video","qc","quality-control","youtube","podcast","uploadcheck"],"_id":"@drantoniou/uploadcheck-mcp@0.1.1","bugs":{"url":"https://github.com/ajantoniou/uploadcheck-mcp/issues"},"_nodeVersion":"24.4.1","_npmVersion":"11.4.2","dist":{"integrity":"sha512-a0IAuAQ61KMzyEwO2Uj/OQWk5KtLinQ/Gcw3ZYbzLKTHL/72tgmJeW20PUUyMcftFgtKdLoOB4xNTI9Jaiwb2A==","shasum":"71296efb76134078b69b844868b6c9b149b14497","tarball":"https://registry.npmjs.org/@drantoniou/uploadcheck-mcp/-/uploadcheck-mcp-0.1.1.tgz","fileCount":9,"unpackedSize":35917,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIAHMqcHmk/d+V2Fveq+E8l8KGlduYZHJBZRqwDanppsXAiASY53eLfRrKKFnSVNXUuh367xn3DkgNVB3jnpZwnDdKg=="}]},"_npmUser":{"name":"drantoniou","email":"alex@antoniou.net"},"directories":{},"maintainers":[{"name":"drantoniou","email":"alex@antoniou.net"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/uploadcheck-mcp_0.1.1_1781129806031_0.4021276234523703"},"_hasShrinkwrap":false}},"time":{"created":"2026-06-07T15:26:19.915Z","modified":"2026-06-10T22:16:46.295Z","0.1.0":"2026-06-07T15:26:20.275Z","0.1.1":"2026-06-10T22:16:46.201Z"},"bugs":{"url":"https://github.com/ajantoniou/uploadcheck-mcp/issues"},"license":"MIT","homepage":"https://uploadcheck.app","repository":{"type":"git","url":"git+https://github.com/ajantoniou/uploadcheck-mcp.git"},"description":"MCP wrapper for the UploadCheck hosted API.","maintainers":[{"name":"drantoniou","email":"alex@antoniou.net"}],"readme":"# UploadCheck MCP Server\n\nThin MCP wrapper over the hosted UploadCheck API. It does not run quality checks locally.\n\nCanonical naming:\n\n- MCP server: `uploadcheck`\n- CLI/package: `uploadcheck` or `uploadcheck-mcp`\n- Tagline: Quality check videos, podcasts, and clips before you upload.\n\n## Environment\n\n```bash\nexport UPLOADCHECK_API_BASE_URL=\"https://api.uploadcheck.app\"\nexport UPLOADCHECK_API_KEY=\"<workspace_api_key>\"\n```\n\n## Agent Workflow\n\nUse `/check` from Claude Code, Codex, or another slash-command capable workspace to quality check a media asset before upload.\n\n```text\n/check ./final-upload.mp4\n```\n\nSmall and medium local files can be sent through Render without durable storage by base64-encoding the media and passing one of:\n\n- `video_base64` with `video_content_type`\n- `audio_base64` with `audio_content_type`\n- `media_base64` with `media_content_type` and `media_kind`\n- `data_url`\n\nThe API writes the payload to a temp file, runs the gate, and deletes the temp file after processing. Use signed URLs or future direct object storage for large files.\n\nThe agent should call `qc_run_local_file` for a reachable local export, or `qc_run_video` when it already has a YouTube URL, signed URL, upload id, or base64 payload. Then poll `qc_get_job`, fetch `qc_get_report`, and list timestamped evidence plus source-level issues it can reach.\n\nUse `profile` when the caller knows the media type but does not need to hand-maintain every gate. Supported values are `auto`, `nto_long_form`, `generic_creator_video`, `shorts`, `audio`, `npo_podcast_or_audio`, and `thumbnail`. Explicit `checks` still win when supplied.\n\nFor Codex, Claude Code, Cursor, or NTO/NPO production pipelines, call `qc_get_pipeline_handoff` first when you need the complete production runbook. It gives the launch preflight, recipe, cost-basis, estimate, media-ingress, report, marker CSV, repair-loop, and rerun sequence. Then call `qc_get_pipeline_recipes` when you need the current default checks and sidecar arguments, and use `qc_run_local_file` for the selected profile.\n\nFor NPO podcast/audio projects, call `qc_get_npo_pipeline_handoff` or run `uploadcheck npo-pipeline-handoff --json` when you need the focused audio handoff without the broader NTO recipe bundle. It includes the cost preflight, default checks, transcript/watchlist/locked-script sidecars, inline/signed media-ingress rules, marker CSV handoff, \"Fix now?\" prompt, and rerun-before-publish-ready rule:\n\n```json\n{\n  \"file_path\": \"/path/to/final-upload.mp4\",\n  \"profile\": \"nto_long_form\",\n  \"manifest_path\": \"/path/to/storybook.json\",\n  \"transcript_path\": \"/path/to/transcript.txt\",\n  \"watchlist_path\": \"/path/to/watchlist.json\",\n  \"expected_script_path\": \"/path/to/locked-script.txt\",\n  \"sidecar_dir\": \"/path/to/_dialogue-chunks\",\n  \"plan_id\": \"creator\",\n  \"cost_guardrail\": \"downgrade\"\n}\n```\n\nSmall files are base64 encoded by the local MCP process and evaluated through Render inline. Larger files use the signed-upload path automatically unless `upload_mode: \"inline\"` or `upload_mode: \"signed\"` is specified.\n\nHosted media ingress can be smoke-tested from the repo before handing the MCP to another production pipeline:\n\n```bash\nUPLOADCHECK_MEDIA_INGRESS_BASE_URL=https://api.uploadcheck.app UPLOADCHECK_API_KEY=<private_bearer> npm run media-ingress:verify\n```\n\nWhen a project has a storybook, edit decision list, or visual timeline JSON, pass it as `manifest_json` with `checks: \"repeat_fatigue\"`. UploadCheck will use it to flag exact visual reuse and source-family dominance even before a final render is reviewed.\n\nWhen a project has transcript text or a script-sidecar, pass it as `transcript_text` or `transcript_json` with `checks: \"spoken_leaks\"`. UploadCheck will flag spoken URLs, markdown, prompt text, stage directions, vendor/tool names, and known wrong-name substitutions without running ASR.\n\nFor customer-specific terms, pass `watchlist_json` with `checks: \"pronunciation_watchlist\"` plus transcript text. Watchlist entries can include `terms: [{ expected, banned: [] }]` and top-level `banned: []`.\n\nWhen a project has a locked narration script and final transcript, pass `expected_script_text` or `expected_script_json` plus transcript text with `checks: \"script_faithfulness\"`. UploadCheck compares word error rate model-free, so agents can catch narration drift without paying for full multimodal review.\n\nWhen a project has local chunk QC reports, pass `sidecar_dir` with `checks: \"chunk_sidecar_failures\"`. The local MCP process packages JSON sidecars such as `*.garble-report.json`, Render evaluates them from memory/temp storage, and failed chunk reports become BLOCK flags before upload.\n\nFor queued Render worker jobs, do not use inline sidecar payloads because they are deleted after the create request. Use HTTPS sidecar URLs instead: `manifest_url`, `transcript_url`, `watchlist_url`, `expected_script_url`, and `chunk_sidecars_url`. UploadCheck fetches them only when the worker drains the job, stores them in temporary server storage for that run, and redacts the URLs from public job/report responses.\n\nFor thumbnail candidates, call `qc_run_local_file` on the image with `checks: \"thumbnail_text_readability\"`. The same inline Render path evaluates OCR contrast and edge/safe-area readability without model spend.\n\nUse `qc_get_cost_basis` before pricing, plan, or model-backed review decisions. Use `plan_id`, `ai_review_seconds`, and `cost_guardrail` when an agent is asking for paid AI review beyond deterministic checks. The default guardrail is `downgrade`: margin-breaking AI review is removed and the job runs deterministic checks. Use `block` to reject unsafe requests, or `off` only for internal experiments/deep-review add-ons.\n\nChecked minutes mean deterministic publish-readiness QC minutes. Deep model review stays internal for engine backtesting, roadmap generation, and deterministic capture-rate measurement rather than being sold as a public minute allowance.\n\nCall `qc_get_launch_status` before launch-sensitive production workflows when an agent needs the live Product Hunt go/no-go state, remaining blockers, and operator commands. Call `qc_get_launch_handoff` when the agent needs blocker-specific required actions, proof commands, launchDoctorCommands, and the no-launch rule. Call `qc_get_launch_doctor` when the agent needs the `/v1/launch-doctor` blocker fix plan plus normalized launch-doctor command coverage, including the hosted Render media-ingress proof command. Call `qc_get_launch_evidence` when the agent needs a redacted evidence bundle from `/v1/launch-evidence` without local npm scripts. These launch endpoints are public; the other QC tools still require an API key.\n\nCall `qc_estimate_cost` before uploading large media or asking for model-backed checks. It returns the effective checks, removed checks, margin safety, and cost estimate without creating a job.\n\n## Tools\n\n- `qc_estimate_cost`\n- `qc_get_launch_status`\n- `qc_get_launch_handoff`\n- `qc_get_launch_doctor`\n- `qc_get_launch_evidence`\n- `qc_get_pipeline_handoff`\n- `qc_get_npo_pipeline_handoff`\n- `qc_get_pipeline_recipes`\n- `qc_get_cost_basis`\n- `qc_run_video`\n- `qc_run_local_file`\n- `qc_get_job`\n- `qc_get_report`\n- `qc_get_events`\n- `qc_get_artifacts`\n- `qc_get_marker_csv`\n- `qc_submit_gate_verdict`\n- `qc_list_recent_jobs`\n- `qc_create_upload_url`\n\nUse `idempotency_key` with `qc_run_video` when an agent may retry the same asset. The hosted API returns the existing job instead of creating a duplicate run.\nUse `qc_submit_gate_verdict` after running `scripts/qc-engine/run_gate.py` so the hosted job report reflects the full-video gate result.\nInternal Gemini capture-rate backtests are not part of the public MCP package. Run them only from the private UploadCheck repo with `scripts/qc-engine/gemini_watch.py`.\n\n## Codex Install Shape\n\n```bash\ncd mcp-server\nnpm install\nnode index.mjs\n```\n\n## Client Config Snippets\n\nMachine-readable install snippets for Codex, Claude Desktop, Cursor, and generic\nstdio MCP clients are published in `mcp-install.json`. Keep this file aligned\nwith the package name `uploadcheck-mcp`, binary `uploadcheck-mcp`, current\nhosted API base URL, and first-call sequence for NPO/NTO production pipelines.\nThe current MCP install path is a public GitHub clone or local checkout with a workspace API key tied to included plan minutes or an operator-created account. The `npx -y @drantoniou/uploadcheck-mcp` snippets in `mcp-install.json` are future-package snippets for after `uploadcheck-mcp` is published to npm.\n","readmeFilename":"README.md","keywords":["mcp","model-context-protocol","video","qc","quality-control","youtube","podcast","uploadcheck"]}