# uploadcheck [Health: Active]

**Category:** 💻 Developer Tools  
**Repository:** https://github.com/ajantoniou/uploadcheck-mcp  
**GitHub Stars:** 0  
**Views:** 0  
**Installs:** 0  
**Upvotes:** 0  
**Directory Page:** https://allmcps.com/mcp/uploadcheck

## Description
QC videos, podcasts, and clips before upload — timestamped flags with agent-ready repair prompts.

## Tools
Capabilities this server exposes over MCP:

- **qc_estimate_cost** — Estimate checked minutes and effective gates before running
- **qc_run_local_file** — Check a local export (reads the file, sends it to the hosted API)
- **qc_run_video** — Check a YouTube URL, signed URL, upload id, or base64 payload
- **qc_get_job** — Poll status, progress, verdict, metered minutes
- **qc_get_report** — The finished report: verdict + timestamped flags + evidence
- **qc_get_events** — Lifecycle events, so the agent can explain what ran
- **qc_get_artifacts** — List generated report artifacts
- **qc_get_marker_csv** — Editor marker CSV (drop flags straight into your NLE timeline)
- **qc_create_upload_url** — Signed upload URL for larger files

## Claude Desktop Quick Installation
Install path detected from listing signals. Uses `npx` (confidence: high):

```json
"mcpServers": {
  "uploadcheck": {
    "command": "npx",
    "args": ["-y","@drantoniou/uploadcheck-mcp"]
  }
}
```

## Documentation & README

<div align="center">

# 🎬 UploadCheck MCP

### The quality gate between your AI and "publish".

**Your agent can generate video. It can't tell you the audio cut out at 0:08, a frame froze at the stitch seam, or the captions are cropped. UploadCheck can — and hands back the exact timestamps to fix.**

[![npm](https://img.shields.io/npm/v/@drantoniou/uploadcheck-mcp?color=2563eb)](https://www.npmjs.com/package/@drantoniou/uploadcheck-mcp)
[![License: MIT](https://img.shields.io/badge/License-MIT-22c55e.svg)](./LICENSE)
[![For: Claude Code · Cursor · Codex](https://img.shields.io/badge/for-Claude%20Code%20·%20Cursor%20·%20Codex-0d9488.svg)](#install)
[![Free tier](https://img.shields.io/badge/free%20tier-200%20min%2Fmo-f97362.svg)](https://uploadcheck.app)

</div>

> **For anyone whose agent, pipeline, or editor produces media that ships to real people** — AI-video pipelines, Shorts/Reels, podcasts, client deliverables.

---

## The problem

An agent that writes code can run the tests. An agent that renders a video has no idea whether it's broken.

So the broken export ships: silence where narration should be, a frozen frame where two clips were stitched, lips out of sync, captions clipped by the platform UI, loudness well off target. Somebody notices in the comments.

**UploadCheck is the check your agent calls before it publishes.** Point it at the finished file. It returns `PASS`, `WATCH`, or `BLOCK` with per-flag timestamps and machine-actionable fixes — so the agent repairs only the flagged span and re-checks, instead of guessing or shipping.

## Install

```bash
npx -y @drantoniou/uploadcheck-mcp
```

<details>
<summary><b>Claude Code</b></summary>

```bash
claude mcp add --env UPLOADCHECK_API_BASE_URL=https://api.uploadcheck.app \
  --env UPLOADCHECK_API_KEY=YOUR_KEY \
  --transport stdio --scope user uploadcheck -- npx -y @drantoniou/uploadcheck-mcp
```
</details>

<details>
<summary><b>Cursor / Claude Desktop</b> (<code>mcp.json</code>)</summary>

```json
{
  "mcpServers": {
    "uploadcheck": {
      "command": "npx",
      "args": ["-y", "@drantoniou/uploadcheck-mcp"],
      "env": {
        "UPLOADCHECK_API_BASE_URL": "https://api.uploadcheck.app",
        "UPLOADCHECK_API_KEY": "YOUR_KEY"
      }
    }
  }
}
```
</details>

<details>
<summary><b>Codex</b></summary>

```bash
codex mcp add uploadcheck \
  --env UPLOADCHECK_API_BASE_URL=https://api.uploadcheck.app \
  --env UPLOADCHECK_API_KEY=YOUR_KEY \
  -- npx -y @drantoniou/uploadcheck-mcp
```
</details>

Get a free key at **[uploadcheck.app](https://uploadcheck.app)** — 40+ gates, 200 checked minutes/month, no card.
Machine-readable install snippets for every client live in [`mcp-install.json`](./mcp-install.json).

> **Keep your key private.** It's a secret bearer token tied to your plan minutes. Put it in your personal MCP config — never in a committed file, a shared prompt, or a report.

## Use it

Once installed, just ask:

```text
check ./final-cut.mp4 before I upload
```

The agent calls `qc_run_local_file`, polls `qc_get_job`, then reads `qc_get_report` and shows you the flags with timestamps.

## What it checks

**40+ automated gates run on every check**, including:

| | |
|---|---|
| **Picture** | frozen/looped frames, black frames, canvas fit & pillarboxing, temporal warping, flicker, interlace combing |
| **Audio** | dead air, clipping, loudness (LUFS) & true peak, loudness range, channel balance, mains hum, dropouts |
| **Sync & text** | lip/audio drift, caption safe-area, text contrast, cropped or overlapping text |
| **Delivery** | resolution/codec/frame-rate spec, Shorts/Reels format |

Paid plans add AI "oracle" gates — garbled speech, duplicated faces in AI crowds, narration match.

*What it doesn't do: it doesn't tell you whether a clip was AI-generated. It assumes it might be, and checks whether it's clean enough to publish.*

## Tools

| Tool | What it does |
|---|---|
| `qc_estimate_cost` | Estimate checked minutes and effective gates before running |
| `qc_run_local_file` | Check a local export (reads the file, sends it to the hosted API) |
| `qc_run_video` | Check a YouTube URL, signed URL, upload id, or base64 payload |
| `qc_get_job` | Poll status, progress, verdict, metered minutes |
| `qc_get_report` | The finished report: verdict + timestamped flags + evidence |
| `qc_get_events` | Lifecycle events, so the agent can explain what ran |
| `qc_get_artifacts` | List generated report artifacts |
| `qc_get_marker_csv` | Editor marker CSV (drop flags straight into your NLE timeline) |
| `qc_create_upload_url` | Signed upload URL for larger files |

Pass `idempotency_key` to `qc_run_video` when an agent might retry the same asset — the API returns the existing job instead of duplicating the run.

Use `profile` when you know the media type but don't want to hand-pick gates: `auto`, `shorts`, `audio`, `thumbnail`, `generic_creator_video`, and named delivery targets like `youtube_shorts`, `podcast_delivery`, `broadcast_r128`, `ai_render_gate`. Explicit `checks` always win.

## Environment

```bash
export UPLOADCHECK_API_BASE_URL="https://api.uploadcheck.app"
export UPLOADCHECK_API_KEY="<workspace_api_key>"
```

This package is a thin MCP client over the hosted UploadCheck API — checks run server-side, not on your machine. Small and medium local files can be sent inline (base64) without durable storage; use signed upload URLs for large ones.

## Links

- **Website & free key** — [uploadcheck.app](https://uploadcheck.app)
- **Docs (API + MCP + full gate reference)** — [uploadcheck.app/docs](https://uploadcheck.app/docs/)
- **Signed PASS/BLOCK receipts** — [uploadcheck.app/docs/receipts](https://uploadcheck.app/docs/receipts/)

## License

MIT — see [LICENSE](./LICENSE).

