AgentMarketMCP / SKILL 资产档案馆

目录 / My TV Channel

MCP 鉴权未知 未评级 已上架

My TV Channel

Create and run 24/7 linear TV channels — the kind that just play, with no menu to browse. Import videos by URL, shape the rotation with per-video weights, and the service transcodes and schedules them into a continuous broadcast at `{handle}.my-tv-channel.com`, watchable on the web and in the iOS, tvOS, macOS, Android, Fire TV and Roku apps. **What your agent can do** - Create a channel and check the handle is free - Import videos from any direct media URL, or from YouTube videos the owner proves they own - Set how often each video plays (weight 0–10) and regenerate the schedule to apply it - Read the EPG, and on Pro tiers set fixed slots and dayparts ("cartoons 6–9am weekdays, news at 6pm") - Poll transcode progress and see exactly what a channel still needs before it goes live A channel goes live automatically once it has 4 ready videos and 15 minutes of content. **Note:** you cannot upload local files over MCP — tool arguments are JSON, so there is no multipart channel. Use `import_video_from_url` with a public URL; local files go through the apps. Requires a My TV Channel API key (any subscription tier). Create one at https://my-tv-channel.com/agent-keys/

该来源不提供完整文件导出(国内平台多为平台内托管),仅存元数据与原链

接入信息

传输形态
http
鉴权方式
鉴权未知
端点
https://my-tv-channel--my-tv-channel.run.tools
鉴权方式未标注,请核对官方文档后再接入——不要直接使用以下片段
{
  "mcpServers": {
    "My TV Channel": {
      "url": "https://my-tv-channel--my-tv-channel.run.tools"
    }
  }
}

能力清单

工具说明
get_account_statusStart 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.
list_channelsList the channels owned by this account.
get_channelGet one channel by id. Includes scheduleStatus (inactive | pending | active | error) — poll this to confirm a channel has gone live — plus watchUrl, launchedAt and isArchived.
check_handle_availableCheck 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.
create_channelCreate 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 allowed on every subscription tier (do not tell the owner to upgrade for it).
update_channelUpdate an existing channel: name, description, visibility, category, language, age rating, or the community chat link. Only send the fields you are changing.
archive_channelTake 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. Use this to clean up channels you created by mistake rather than leaving them behind.
import_video_from_urlAdd 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.
import_youtube_videoImport 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>'. If the import fails, the error message contains their exact tag — relay it to them VERBATIM. 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.
list_assetsList the videos on a channel.
get_transcode_statusPoll 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.
set_asset_weightChange 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. Do not set everything to 10 — the differences between weights are what shape the channel.
delete_assetRemove a video from a channel. Soft delete — it stops being scheduled immediately and the schedule regenerates automatically. Idempotent. Use this to undo your own mistakes rather than leaving unwanted content on the owner's channel. Do not delete content you did not add unless the owner asked you to.
retry_transcodeRe-queue a video whose transcode failed. Only works on assets in a failed state.
regenerate_scheduleRebuild 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 — if you get a rate-limit error, wait, do not retry in a loop. Requires the channel to meet launch requirements.
get_scheduleRead 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).
get_schedule_rulesRead the channel's declarative schedule rules (fixed time slots and dayparts), plus its scheduling mode and timezone.
validate_schedule_rulesDRY-RUN a ruleset. Saves nothing. Returns {valid, errors, warnings, preview} where preview is a simulated 24h grid of what would actually air. ALWAYS call this before set_schedule_rules — rules are wall-clock, slots start on-or-after their time and dayparts reweight the random fill, so the result is hard to predict by reading the rules. Works on ANY tier, so you can show the owner what they would get before they upgrade. Same payload as set_schedule_rules.
set_schedule_rulesGive 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.
纠错与举报(发现条目失效、署名有误或涉及侵权?)
提交举报 / 纠错

侵权举报经核验成立后,我们会即时下线该条目并删除已存的内容副本。