Card snapshot
gradetv.net
·
2026-10-03 03:59:09 UTC
·
d5bc04ddb1928880a88d5ceb9f0958070dd6ce05f1e8d53323f233dbb8a1ebc0
This is a frozen copy of the agent's agent-card.json as we observed it at the timestamp above. We capture a new snapshot every time the card's content hash changes. Useful for: forensic drift analysis, verifying downstream callers see the right version, reproducing routing decisions made historically.
{
"name": "Grade",
"description": "Encontre TV e r\u00e1dio, abra um canal e guarde seus favoritos para voltar. Pastas e M3U para o VLC. Projetos de produtores com direitos sob consulta.",
"url": "https://gradetv.net",
"provider": {
"organization": "Grade",
"url": "https://gradetv.net",
"email": "contato@gradetv.net"
},
"documentationUrl": "https://gradetv.net/llms.txt",
"protocol": "mcp",
"protocolUrl": "https://modelcontextprotocol.io",
"interfaces": [
{
"transport": "streamable-http",
"url": "https://gradetv.net/mcp"
}
],
"capabilities": {
"streaming": true,
"pushNotifications": false,
"authentication": "none"
},
"defaultInputModes": [
"application/json"
],
"defaultOutputModes": [
"application/json",
"text/markdown"
],
"skills": [
{
"id": "api_index",
"name": "api_index",
"description": "\u00cdndice auto-descrito da API inteira, com os idiomas e as p\u00e1ginas HTML de cada um.",
"endpoint": "GET /api/"
},
{
"id": "health",
"name": "health",
"description": "Liveness e o commit publicado agora \u2014 \u00e9 como o smoke espera o pr\u00f3prio deploy.",
"endpoint": "GET /api/health"
},
{
"id": "geo",
"name": "geo",
"description": "Pa\u00eds e idioma sugeridos para quem est\u00e1 chamando. Sem pa\u00eds detectado pela borda, sugere BR com `source: \"fallback\"`; `detected` diz o que a borda viu.",
"endpoint": "GET /api/geo"
},
{
"id": "list_countries",
"name": "list_countries",
"description": "Pa\u00edses do cat\u00e1logo com contagem playable e URL da bandeira (kind=radio conta esta\u00e7\u00f5es).",
"endpoint": "GET /api/countries"
},
{
"id": "list_tags",
"name": "list_tags",
"description": "Tags das esta\u00e7\u00f5es de r\u00e1dio toc\u00e1veis, com contagem; opcionalmente por pa\u00eds.",
"endpoint": "GET /api/tags"
},
{
"id": "search_channels",
"name": "search_channels",
"description": "Busca canais p\u00fablicos (filtros: q, country, category, language, network, quality, playable; kind=radio para esta\u00e7\u00f5es de r\u00e1dio, tag para tag de r\u00e1dio; sort=score ordena pela sa\u00fade medida por terceiro, sort=votes pelos votos da r\u00e1dio; online=1 s\u00f3 quem foi visto online nas \u00faltimas 48 h). \u00c9 a porta de entrada do produto. A resposta varia por navegador, sistema e pa\u00eds de quem pede \u2014 cada canal traz `social.your_fails`, o recorte do SEU ambiente \u2014 por isso ela \u00e9 `Cache-Control: private`.",
"endpoint": "GET /api/channels"
},
{
"id": "list_languages",
"name": "list_languages",
"description": "Idiomas que t\u00eam canal toc\u00e1vel, com a contagem de cada um.",
"endpoint": "GET /api/languages"
},
{
"id": "list_networks",
"name": "list_networks",
"description": "Redes e emissoras que t\u00eam canal toc\u00e1vel, com a contagem.",
"endpoint": "GET /api/networks"
},
{
"id": "list_qualities",
"name": "list_qualities",
"description": "Qualidades distintas encontradas nos streams do cat\u00e1logo (em r\u00e1dio, codec e bitrate).",
"endpoint": "GET /api/qualities"
},
{
"id": "list_subdivisions",
"name": "list_subdivisions",
"description": "Estados e prov\u00edncias que t\u00eam canal toc\u00e1vel.",
"endpoint": "GET /api/subdivisions"
},
{
"id": "list_cities",
"name": "list_cities",
"description": "Cidades que t\u00eam canal toc\u00e1vel, filtr\u00e1veis por pa\u00eds e por estado.",
"endpoint": "GET /api/cities"
},
{
"id": "get_channel",
"name": "get_channel",
"description": "Ficha completa de um canal, com os streams j\u00e1 apontando para o nosso hop.",
"endpoint": "GET /api/channels/:id"
},
{
"id": "get_channel_guide",
"name": "get_channel_guide",
"description": "Programa\u00e7\u00e3o de hoje do canal (grabada por n\u00f3s): agora, a seguir e a lista. Dispon\u00edvel nos canais com guia (`guide=1`), com validade de at\u00e9 dois dias. Confira a data da resposta; a ficha traz o resumo em `guide_now`.",
"endpoint": "GET /api/channels/:id/guia"
},
{
"id": "create_guest",
"name": "create_guest",
"description": "Cria guest ipt_\u2026 N\u00e3o pede e-mail nem nada. Guarde o token: perdeu o token, perdeu a biblioteca \u2014 a n\u00e3o ser que a conta j\u00e1 o tenha reivindicado (`POST /api/auth/claim`), e a\u00ed o que ele guardou est\u00e1 na conta.",
"endpoint": "POST /api/guest"
},
{
"id": "get_library",
"name": "get_library",
"description": "A galeria inteira do dono: pastas, sub-abas, canais e as URLs de feed de cada n\u00edvel.",
"endpoint": "GET /api/library"
},
{
"id": "create_category",
"name": "create_category",
"description": "Cria tab/categoria pessoal. Teto de 8 pastas por dono. A resposta traz a biblioteca inteira j\u00e1 atualizada \u2014 n\u00e3o precisa recarregar `GET /api/library` depois.",
"endpoint": "POST /api/categories"
},
{
"id": "create_group",
"name": "create_group",
"description": "Cria sub-aba numa categoria. Teto de 12 sub-abas por pasta. A resposta traz a biblioteca inteira j\u00e1 atualizada \u2014 n\u00e3o precisa recarregar `GET /api/library` depois.",
"endpoint": "POST /api/groups"
},
{
"id": "add_item",
"name": "add_item",
"description": "Adiciona canal \u00e0 sub-aba. Teto de 40 canais por sub-aba. A resposta diz em que pasta e sub-aba o canal caiu, para a tela abrir no lugar certo. A resposta traz a biblioteca inteira j\u00e1 atualizada \u2014 n\u00e3o precisa recarregar `GET /api/library` depois.",
"endpoint": "POST /api/items"
},
{
"id": "get_history",
"name": "get_history",
"description": "Hist\u00f3rico de canais assistidos pelo dono. Exibe somente canais dispon\u00edveis no cat\u00e1logo.",
"endpoint": "GET /api/history"
},
{
"id": "record_watch",
"name": "record_watch",
"description": "Registra um canal assistido no hist\u00f3rico do dono.",
"endpoint": "POST /api/history"
},
{
"id": "forget_watch",
"name": "forget_watch",
"description": "Tira um canal do hist\u00f3rico do dono.",
"endpoint": "DELETE /api/history/:channel_id"
},
{
"id": "clear_history",
"name": "clear_history",
"description": "Limpa o hist\u00f3rico inteiro do dono, de uma vez.",
"endpoint": "DELETE /api/history"
},
{
"id": "legacy_stream",
"name": "legacy_stream",
"description": "Metadados p\u00fablicos: site oficial do canal, URL da transmiss\u00e3o para copiar em outro player e player legado HTTP. O bot\u00e3o legacy_url abre http://legacy.gradetv.net:8080/legacy?stream=ID. A p\u00e1gina isolada aceita lang=pt/en/es/fr/de e theme=light/dark. Playlists continuam pelo hop HTTPS e m\u00eddia direto da origem. N\u00e3o remove recusa de acesso nem exig\u00eancia CORS. Uma leitura indexada; n\u00e3o busca origem nem grava no D1.",
"endpoint": "GET /api/legacy/:id"
},
{
"id": "producer_services",
"name": "producer_services",
"description": "Oferta de transmiss\u00e3o autorizada sob consulta: informa\u00e7\u00f5es e contatos para produtores. N\u00e3o ativa streams. Somente informa\u00e7\u00f5es e capta\u00e7\u00e3o de interesse. N\u00e3o provisiona, n\u00e3o cobra e n\u00e3o ativa transmiss\u00e3o. Use contact.form_url no browser, contact.email por e-mail ou POST /api/contact para apresentar o projeto. O envio \u00e9 livre \u2014 sem captcha nem pagamento \u2014, uma mensagem a cada 10 s por rede.",
"endpoint": "GET /api/producers"
}
],
"discovery": {
"openapi": "https://gradetv.net/openapi.json",
"llms": "https://gradetv.net/llms.txt",
"okf": "https://gradetv.net/okf/index.md",
"numbers": "https://gradetv.net/api/vitrine",
"partnerships": "https://gradetv.net/api/partners",
"api_catalog": "https://gradetv.net/.well-known/api-catalog",
"x402": "https://gradetv.net/.well-known/x402",
"pricing": "https://gradetv.net/pricing",
"docs": "https://gradetv.net/docs"
},
"updated": "2026-10-03"
}