# MCP: make ads from Claude Code

Add 10xvid to Claude Code, or to any agent that speaks MCP, with one line, then ask for ads in plain words.

## Add it to Claude Code

One line, with your own key in place of `YOUR_API_KEY`:

```bash
claude mcp add --transport http 10xvid https://10xvid.com/mcp --header "Authorization: Bearer YOUR_API_KEY"
```

The key comes from the [API keys](/app/api-keys) page of the app: press **Create key** and copy it. It is shown once, and your email address must be confirmed first. Then, in Claude Code, say what you want:

> make 3 vertical ads for `https://your-app.com`

Claude reads your site through 10xvid, makes the videos and gives you their links when they are done. The site is read in a few minutes; each video takes about 5 to 8 minutes once its turn comes.

You can say more: the shapes (vertical, square, landscape), the engine (Motion V1 Flash, the default, or Motion V1), the angle, and what the ads must say or avoid. Claude passes it on.

## Other agents

Any client that speaks MCP over Streamable HTTP connects the same way: the address is `https://10xvid.com/mcp`, and the key goes in the `Authorization` header as `Bearer tenx_...`. A client that cannot set headers may put the key on the address instead, as `https://10xvid.com/mcp?key=tenx_...`; keep that address as private as the key.

The server is stateless: each call is one JSON-RPC message over POST, answered at once. Nothing is streamed.

## The tools

| Tool | What it does | Inputs |
|---|---|---|
| `make_videos` | With a link: reads the site, writes the plan of the ad and makes the videos by itself. With a format id: makes more videos from it now. | `link` or `format`; `count` (1 to 6, default 1); `aspects` (any of `9:16`, `1:1`, `16:9`, default `["9:16"]`); `engine` (`motion-v1-flash`, the default, or `motion-v1`); `voiceover`; `music` (`false` for none, with `motion-v1-flash`); `angle`; `notes` |
| `read_link` | Reads a site into a format without making a video. | `link`; `angle`; `notes` |
| `get_video` | One video: its status and, when it is done, its files with links that work for seven days. | `id` |
| `list_videos` | The videos, newest first, of one format (with where the format stands) or of the whole account. | `format`; `limit` |
| `account` | The credits left, the top up balance, what was spent this month and today's prices. | none |

Each tool is a route of the [API](/docs/api): `make_videos` with a link is `POST /formats`, with a format it is `POST /formats/{id}/videos`; `read_link` is `POST /formats` with `videos: false`; `get_video` and `list_videos` are `GET /videos`; `account` is `GET /account`. What a key may reach applies the same way: a key restricted to reading cannot make videos. See [Authentication and keys](/docs/api/authentication).

## What it costs

The same as the API, charged the same way: the reading of a site, the plan, and each video by the second in each shape, at the engine's own price, with its voiceover by the characters it speaks and its music by its seconds. Your plan's credits pay first, then the top up balance. Nothing is charged for a video that could not be finished. See [API pricing](/docs/api/pricing); `account` tells what is left.

## Keep the key safe

The line above stores the key in Claude Code's settings on your computer. Make a key of its own for it, so you can delete it without stopping anything else, and restrict it to what the agent needs: formats and videos to write, account to read.
