My TV Channel

com.my-tv-channelPublished by my-tv-channel.comOfficial publisherv1.1.0Updated Oct 24, 2026

Create and run 24/7 linear TV channels. Import videos by URL; we transcode, schedule and stream.

VerifiedStreamable HTTPWeb executableProductivity & WorkflowMedia & Design

Overview

AI-generated overview

Lets an assistant create and manage 24/7 linear TV channels: import videos by URL, set schedules, and monitor transcoding and launch status.

What you can do
The server exposes 19 tools for running streaming channels on My TV Channel. An assistant can check account status and quotas, list and inspect channels, check handle availability, create, update or archive channels, and import videos from direct media URLs or from the owner's own YouTube uploads. It can list assets, poll transcode progress, adjust how often each video plays, delete assets, read and validate schedule rules, set fixed slots and dayparts, regenerate the schedule, and read the EPG.
When to use it
Use it when someone wants an assistant to stand up or maintain a scheduled linear TV channel without manual work in the web app: bulk-importing videos, tuning rotation weights, or defining recurring programming rules. It is also useful for checking whether a channel has met the launch threshold and gone live.
Requirements
A remote streamable HTTP endpoint at my-tv-channel.com, with no local package. Requires an active subscription on any tier and a bearer API key created in the account's Agent Access settings, sent in the Authorization header. Videos must be reachable by public, direct, unauthenticated URLs; local files cannot be uploaded through this interface.
Before you install
The Authorization bearer token is a secret granting access to the account's channels and quota. Several tools change live state: create_channel, update_channel, archive_channel, delete_asset, set_asset_weight, set_schedule_rules and regenerate_schedule. set_schedule_rules replaces the entire ruleset and needs Pro tier or higher; validate_schedule_rules is the dry run. Imported URLs are fetched by the service, and YouTube imports only work for videos the owner uploaded.

Installation

In SourceWeft

  1. Open My TV Channel in the dashboard and add it to a workspace.
  2. Connect Authorization token credentials. They are stored privately and never shown on public pages.
  3. Enable the server for the chats that should use its tools.

Web executable via Streamable HTTP. Remote servers run from the web runtime once configured in a workspace.

Use with an agent

Paste this prompt into Claude Code, Codex, Cursor or another agent — or into SourceWeft chat. The agent reads this server's install guide, shows you its publisher, endpoint and sign-in, and adds it to your client once you agree. Keys never go into a command.

Read https://sourceweft.com/mcp/com.my-tv-channel%2Fmy-tv-channel/install.md and connect the MCP server it describes to my client. Before changing any config, show me its publisher, endpoint and sign-in method and wait for my OK. Never put an API key in a command or in a file I would commit; ask me where it should come from.

Read the install guide the agent follows

Other MCP clients

Add this to your client's mcpServers config.

{
  "mcpServers": {
    "my-tv-channel": {
      "type": "http",
      "url": "https://my-tv-channel.com/api/mytvchannel/mcp",
      "headers": {
        "Authorization": "Bearer <YOUR_TOKEN>"
      }
    }
  }
}

Tools

19

get_account_status

Get account status

Start here. Returns who the account is, its subscription tier and limits, how much weekly upload/stream quota is used and remaining, and every channel the owner has with its ready-asset count and what it still needs to go live (launchGaps). Call this before creating anything so you know the real limits for THIS account rather than assuming.

Takes no parameters.

list_channels

List channels

List the channels owned by this account.

Takes no parameters.

get_channel

Get channel

Get one channel by id. Includes scheduleStatus (inactive | pending | active | error) — poll this to confirm a channel has gone live — plus watchUrl, launchedAt and isArchived.

Parameterschannel_idrequired

check_handle_available

Check handle availability

Check whether a channel handle is free before trying to create it. The handle becomes the subdomain: {handle}.my-tv-channel.com. 3-63 chars, lowercase a-z, 0-9 and hyphens.

Parametershandlerequired

create_channel

Create channel

Create a 24/7 linear TV channel. It will NOT be live yet — a channel goes live automatically once it has at least 4 ready assets AND at least 15 minutes of total content. is_public lists it in Discover and is available on every subscription tier, including Starter.

Parametersnamerequiredtagshandlerequiredcategorylocationis_publicdescriptionorientationchannel_typerequiredprimary_language

update_channel

Update channel

Update an existing channel: name, description, visibility, category, language, age rating, or the community chat link. Only send the fields you are changing.

Parametersnamecategorykeywordsis_publicchannel_idrequireddescriptionchat_platformshow_schedulechat_server_idchat_channel_idprimary_languageage_classification+1 more

archive_channel

Archive channel

Take a channel off the air and out of every listing. This ARCHIVES rather than destroys: the handle stays reserved and assets and schedule history are retained, so it can be restored. Refuses with 409 while transcodes are still running. Idempotent. This is the reversible way to take a channel down; delete_asset removes individual videos instead.

Parameterschannel_idrequired

import_video_from_url

Import video from URL

Add a video to a channel from a direct media URL. THIS IS THE MAIN WAY TO ADD CONTENT over MCP — you cannot upload local file bytes through this interface, so if the owner has local files, ask them to host them somewhere reachable or upload via the app. The URL must be a direct, public, unauthenticated link to mp4/mov/m4v/mpeg/mpg/avi, or a FINITE .m3u8 (VOD, not a live stream) — not a web page, not behind a login, not a YouTube/Vimeo watch page. The server downloads it. Returns immediately; the asset then goes downloading -> pending -> transcoding -> ready. Duration counts against the weekly upload quota. Re-submitting the same URL to the same channel returns the original asset instead of importing twice.

Parametersurlrequiredtagstitleweightchannel_idrequired

import_youtube_video

Import YouTube video

Import a YouTube video that the OWNER UPLOADED THEMSELVES. This will not work for anyone else's video, by design — a channel built from other people's videos is a copyright problem for the owner. Ownership is proved by a tag only the uploader can add: 1. The owner's tag looks like 'MyTVChannelApp#<device-id>'. When the import fails for a missing tag, the 403 error message contains that account's exact tag string. 2. They paste that exact string into the video's description or tags on YouTube. 3. Retry the import. You cannot do step 2 for them and you cannot bypass it. Public finished videos only: no live streams, no private or age-restricted videos, no playlists or channel URLs. Capped at 10 per day. Counts against the same weekly upload quota as everything else.

Parametersurlrequiredtagstitleweightchannel_idrequired

list_assets

List assets

List the videos on a channel.

Parameterschannel_idrequired

get_transcode_status

Get transcode status

Poll transcode progress. Give either channel_id (all its videos) or asset_id (one). Each asset reports uploadStatus (downloading -> pending -> transcoding -> ready) and the summary tells you when meetsLaunchRequirements becomes true: 4+ ready assets AND 900+ seconds. Poll every 30-60s; transcoding takes roughly real-time/4.

Parametersasset_idchannel_id

set_asset_weight

Set asset weight

Change how often a video plays (weight 0-10, default 5; 0 removes it from rotation entirely), and optionally its title or tags. IMPORTANT ORDERING: weights only affect what actually airs when the schedule is (re)generated. A channel builds its schedule the instant it crosses the launch threshold, so weights set AFTER that are stored but do not air. Either set the weight when you import each video, or call regenerate_schedule afterwards. Weights are relative: identical weights across every video produce a uniform rotation, and the spread between them is what shapes airtime.

Parameterstagstitleweightasset_idrequired

delete_asset

Delete asset

Remove a video from a channel. Soft delete — it stops being scheduled immediately and the schedule regenerates automatically. Idempotent. The asset is retained and stops being scheduled; it is not erased. Affects one video — archive_channel takes a whole channel off the air.

Parametersasset_idrequired

retry_transcode

Retry transcode

Re-queue a video whose transcode failed. Only works on assets in a failed state.

Parametersasset_idrequired

regenerate_schedule

Regenerate schedule

Rebuild the channel's schedule now using the current weights. Call this after changing weights on a channel that is ALREADY live, otherwise the change will not air until the hourly cron. Throttled to one call per channel per 5 minutes; exceeding that returns 429 with a Retry-After header giving the seconds remaining. Requires the channel to meet launch requirements.

Parameterschannel_idrequired

get_schedule

Get schedule

Read the channel's EPG — what is playing and what is coming up. Note this one returns a plain array of entries (unlike other tools, which return an object).

Parameterschannel_idrequired

get_schedule_rules

Get schedule rules

Read the channel's declarative schedule rules (fixed time slots and dayparts), plus its scheduling mode and timezone.

Parameterschannel_idrequired

validate_schedule_rules

Validate schedule rules

DRY-RUN a ruleset. Saves nothing. Returns {valid, errors, warnings, preview} where preview is a simulated 24h grid of what would actually air. Intended as the dry run for set_schedule_rules: rules are wall-clock, slots start on-or-after their time, and dayparts reweight the random fill, so the airing result is hard to predict from the rules alone. Unlike set_schedule_rules this is not tier-gated and works on any tier. Same payload as set_schedule_rules.

Parametershoursrulesrequiredtimezonechannel_idrequired

set_schedule_rules

Set schedule rules

Give the channel a durable schedule: fixed slots ("news at 18:00") and dayparts ("no kids content after 22:00"). The scheduler re-honours these on EVERY rebuild, so you set them once instead of babysitting the grid. **Pro tier or higher.** This REPLACES the entire ruleset — send every rule you want, not just new ones. Sending an empty array removes all rules and returns the channel to plain weighted-random. Validate first with validate_schedule_rules. Rule shapes: time_slot {rule_type:'time_slot', start_time:'18:00', end_time?:'21:00', days_mask:127, selector_type:'asset'|'tag'|'playlist', selector_value:<id|tag|[ids]>, priority?:0} daypart_weight {rule_type:'daypart_weight', start_time:'22:00', end_time:'06:00', days_mask:127, selector_type:'asset'|'tag', selector_value:..., weight_multiplier:0-10} days_mask is a bitmask: bit0=Mon … bit6=Sun. 127=daily, 31=Mon-Fri, 96=weekend. end_time on a time_slot makes it a BLOCK that keeps drawing from the selector until that time — that is how you get 'cartoons 06:00-09:00' rather than one cartoon. selector_type 'playlist' with an array of asset ids plays them IN ORDER. weight_multiplier 0 removes matching assets from that window entirely. Set `timezone` (IANA) or the times mean UTC, which is almost never what the owner meant. Slots start ON-OR-AFTER their time: the programme running into a slot is never cut short, so an 18:00 slot may begin at 18:02. That is intended.

Parametersrulesrequiredtimezonechannel_idrequired

Version history

1
  1. v1.1.0LatestSep 16, 2026

Score

83% of the applicable checks met

How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.

  • Reached in the last 30 daysRequired25 pts
  • Auth declaredRequired10 pts
  • Tools listedRequired15 pts
  • DescriptionRequired15 pts
  • Logo10 pts
  • Documentation15 pts

    Declare a GitHub repository with a README, or serve resource_documentation in the OAuth protected-resource metadata.

  • LicenseNot applicable

    A hosted service is used under its provider's terms, so no license is expected here. This check is left out of the percentage.