# Tell an AI agent to build you a TV channel

> My TV Channel runs 24/7 linear channels — the kind that just play, with no menu to browse. Connect Claude or any MCP client and it can do the whole job: create the channel, import the videos, decide how often each one plays, and hand you back a URL that is already broadcasting.

<!--
Source: https://my-tv-channel.com/agents/
Site: My TV Channel - https://my-tv-channel.com
Published: 2026-07-03
Summary: Connect Claude or any MCP client to My TV Channel and let it create, program and launch a 24/7 linear TV channel. 19 MCP tools, a REST API, and a live demo channel built entirely through them.
-->

## A channel that no human programmed

[demo.my-tv-channel.com](https://demo.my-tv-channel.com) is a real, continuously broadcasting channel. It was created, filled, weighted and scheduled entirely through the tools on this page — the channel record, the five programmes, the per-video weights and the 24/7 schedule. Nobody opened the app.

It carries broadcast test patterns on a twenty-minute loop, so it runs forever with no rights questions. Open it on a phone, a laptop or an Apple TV; it is playing right now.

## Connect in three minutes

**1. Get a key.** Create one at [my-tv-channel.com/agent-keys/](https://my-tv-channel.com/agent-keys/), or in the iOS or macOS app under **Profile → Agent Access**. Any subscription tier works. The key is shown exactly once, so paste it somewhere safe before you close the page.

**2. Add the server.** Streamable HTTP, stateless, no session id to track.

### Claude Code

```
claude mcp add --transport http my-tv-channel \
  https://my-tv-channel.com/mcp \
  --header "Authorization: Bearer mytv_sk_YOUR_KEY"
```

### Claude Desktop, or any client using `mcpServers` JSON

```
{
  "mcpServers": {
    "my-tv-channel": {
      "type": "http",
      "url": "https://my-tv-channel.com/mcp",
      "headers": {
        "Authorization": "Bearer mytv_sk_YOUR_KEY"
      }
    }
  }
}
```

### Anything else

Plain JSON-RPC 2.0 over HTTP POST. No SDK required:

```
curl -s -X POST https://my-tv-channel.com/mcp \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $KEY" \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'
```

`initialize` and `tools/list` answer without a key, so a client can inspect the server before credentials are configured. `tools/call` needs one.

> Two URLs, one server.
>
> `https://my-tv-channel.com/mcp` is a short alias for `https://my-tv-channel.com/api/mytvchannel/mcp`, which is what the MCP registry and Smithery publish. They run the same script and will never disagree — use whichever you already have.

## Things to say once it is connected

These work as written. The arrow shows what the agent actually calls.

“What’s my My TV Channel account status — what tier am I on and how much upload quota is left?”

→ `get_account_status`. A good first call: it also lists every channel you have and exactly what each one still needs before it can go live.

“Create a channel called Retro Arcade TV, handle `retro-arcade`, import these four videos, and tell me when it’s broadcasting.”

→ `check_handle_available` → `create_channel` → `import_video_from_url` ×4 → `get_transcode_status` until ready → `get_channel` until `scheduleStatus` is `active`. The channel then streams at `https://retro-arcade.my-tv-channel.com`.

“Play the long-plays twice as often as the reviews on my arcade channel, starting now.”

→ `list_assets` → `set_asset_weight` per video → `regenerate_schedule`. The last step is the one people forget; without it the new weights are stored but never reach the air.

“Show me what’s on my channel this evening.”

→ `get_schedule` returns the EPG with start and end times.

“Put cartoons on 6–9am on weekdays and news every day at 6pm.” *(Pro tier and above)*

→ `validate_schedule_rules` first — it saves nothing and returns a simulated 24-hour grid — then `set_schedule_rules`.

## The 19 tools

Every tool ships MCP `annotations` (`readOnlyHint`, `destructiveHint`, `idempotentHint`, `openWorldHint`), so a client can decide for itself what to run unattended. “Destructive” here means it changes or removes something you can see — none of it is unrecoverable. Archiving keeps the handle and the videos; deleting a video is a soft delete.

| Tool | Does | Safe to autorun? |
| --- | --- | --- |
| get_account_status | Tier, limits, quota used and remaining, all channels and what they need to go live | read-only |
| list_channels | Channels owned by this account | read-only |
| get_channel | One channel — includes `scheduleStatus`, poll this to confirm it went live | read-only |
| check_handle_available | Is a handle free | read-only |
| list_assets | Videos on a channel | read-only |
| get_transcode_status | Poll progress; tells you when launch requirements are met | read-only |
| get_schedule | Read the EPG | read-only |
| get_schedule_rules | Current ruleset | read-only |
| validate_schedule_rules | Dry-run a ruleset; **saves nothing**, returns a simulated 24-hour grid | read-only |
| create_channel | Create a channel | writes |
| update_channel | Rename, re-describe, re-tag, change visibility | writes |
| import_video_from_url | **The main way to add content.** Import from a direct media URL | writes, external |
| import_youtube_video | Import a YouTube video the owner proves they own | writes, external |
| set_asset_weight | How often a video plays (0–10), plus title and tags | writes |
| retry_transcode | Re-queue a failed transcode | writes |
| archive_channel | Take off air — archives, does not destroy | destructive |
| delete_asset | Remove a video (soft delete, auto-regenerates) | destructive |
| regenerate_schedule | Rebuild the schedule now — replaces what was going to air | destructive |
| set_schedule_rules | **Replaces** the whole ruleset | destructive |

## Two things that surprise people

### You cannot upload local files over MCP

MCP tool arguments are JSON; there is no multipart channel. `import_video_from_url` is therefore *the* ingestion path for an agent, and the video has to be reachable at a direct, public, unauthenticated URL — not a web page, not something behind a login. If your files are on your laptop, upload them through the app and let the agent take it from there.

### Weights only air when the schedule is generated

A channel builds its schedule the instant it crosses the launch threshold. Weights set after that are stored but do not change what is on air until a regeneration. Either set each video’s weight as you import it, or call `regenerate_schedule` when you are done.

## No MCP? Drive the REST API

Everything the MCP server does, it does by forwarding to a REST endpoint that already implements it, passing your `Authorization` header straight through. Auth, ownership, quota and tier gating all live in the REST layer, so the two surfaces cannot drift apart. You can skip MCP entirely.

```
curl -s -H "Authorization: Bearer $KEY" \
  https://my-tv-channel.com/api/mytvchannel/users/status.php
```

Written for a machine to read, in rough order of how much you will want them:

- [/llms.txt](https://my-tv-channel.com/llms.txt) — the short index; start here
- [/llms-full.txt](https://my-tv-channel.com/llms-full.txt) — every endpoint, its parameters and its traps, on one page
- [/openapi.yaml](https://my-tv-channel.com/openapi.yaml) — OpenAPI 3.1, 23 operations, if your client consumes a schema
- [/api/mytvchannel/docs/AGENTS.md](https://my-tv-channel.com/api/mytvchannel/docs/AGENTS.md) — the long-form agent guide, with a worked golden path from nothing to a live channel
- [/api/mytvchannel/mcp/README.md](https://my-tv-channel.com/api/mytvchannel/mcp/README.md) — MCP setup and the tool catalogue

## Where it is listed

Official MCP Registry ↗

com.my-tv-channel/my-tv-channel

Smithery ↗

my-tv-channel/my-tv-channel

## Questions

Can an AI agent upload a video file from my computer?

Not over MCP — tool arguments are JSON, so there is no multipart channel for a file. Importing from a public URL is the ingestion path for agents. For files on your own machine, upload through the iOS, iPadOS or macOS app, or post them to the REST endpoint directly.

Do I need a subscription?

Yes. Creating an API key requires an active subscription on any tier, from $0.99 a week. The key inherits the owner’s tier limits for upload minutes, streaming minutes and features. Discovery calls — `initialize` and `tools/list` — work without a key, so a client can inspect the server before credentials are configured.

Can an agent create its own API key?

No, by design. Keys are minted only by a signed-in human, in the web portal or in the app. An agent holding a key cannot escalate to issuing more.

How long until a channel is on air?

A channel launches automatically once it has at least 4 ready videos and at least 15 minutes of content. The gating step is transcoding, which runs on an encoding farm after each import. The agent polls `get_transcode_status` and tells you when it is live.

Which clients work?

Any client that speaks Streamable HTTP, including Claude Code and Claude Desktop. The server implements the current `2026-07-28` revision — `server/discover` and the per-request metadata that replaced the `initialize` handshake — and it has always been stateless, so there is no session id to track. Older clients are still served: the handshake works unchanged for `2025-11-25`, `2025-06-18`, `2025-03-26` and `2024-11-05`. Anything that does not speak MCP can call the REST API directly.

Is it safe to let an agent run unattended?

Every tool carries MCP annotations, so a client can decide for itself what to run without asking. Nothing in the tool set is unrecoverable: archiving a channel keeps its handle and its videos, and deleting a video is a soft delete. The rate limit is 1,000 requests an hour per key.

Why is the endpoint a path and not `mcp.my-tv-channel.com`?

Because every subdomain of `my-tv-channel.com` is a TV channel — that is how `{handle}.my-tv-channel.com` works. An `mcp.` subdomain would be routed as somebody’s channel.

## Further reading

[**MCP in media, video and streaming: what exists, and the gap nobody has filled**](https://my-tv-channel.com/mcp-media-video-streaming/) — a survey of every MCP server in the media stack as of August 2026, why they all stop at the clip rather than the channel, and the four things that make durable broadcast state harder to hand an agent than a render.

## Start with a key

It takes about a minute, and the demo channel is proof the rest works.

[Create an API key](https://my-tv-channel.com/agent-keys/)
