Every change Wellknown observed on this MCP server, newest first, with what it was before and what it became. Tool-surface changes carry the definition diff. Nothing here is edited after the fact.
Changed the definition of "play_reports" and "report_play"
⟨10 unchanged words⟩ METRICS_TOKEN). Use para investigar um canal específico.ExisteNosseparadorelatosdoatuais,painelopúblicocampojustamente`ip`porquecontémtrazumendereço.identificadorAcalculadolinhaasomepartirdepoisdadorede e de um valor secreto. O prazo de retenção está em`retention_days`,`retention_days`.eO`/api/channels/:id/health`painelnuncapúblico não devolveIP.esse identificador.
⟨15 unchanged words⟩ país saem do pedido, não do corpo. O primeiro relato desse resultado no dia devolve 201. Conta até uma vez por dono,porcanal,pordia epor resultado; relatar deresultado.novoRepetir devolve 200 com `reason:ja_relatado_hoje`, e não é erro.ja_relatado_hoje`. Navegador e sistemasaemvêm doUser-Agent eUser-Agent.oO paísdavembordados—dadosmandar
Added "get_programacao", "get_programacao_dia" and "list_programacao" (42 tools before, 45 now)
Get programacao — Última programação disponível do canal e até 20 datas do histórico.
Get programacao dia — Programação preservada de um canal em um dia específico.
List programacao — Canais com programação coletada, até 48 por página.
Added "tv_pass" and "tv_state" (40 tools before, 42 now)
Tv pass — Compra 30 dias para a rede da TV por 4,99 USDC; 402 x402, repetir com X-PAYMENT. Sem renovação automática. Responde 402 x402 na Base; repita a mesma chamada com X-PAYMENT. Usa o pagamento global e registra tentativa, liquidação e direito. Pagamento no celular libera a rede identificada pelo código. Repetir o comprovante não compra outro passe.
Tv state — Consulta a ativação da rede da TV pelo código de seis dígitos.
Changed the definition of "producer_services"
⟨6 unchanged words⟩ da oferta: pt, en, es, fr, de oude;hu; ausente ou desconhecido volta a pt.","enum":["pt","en","es","fr","de","hu"],"type":"string"}},"type":"object"}
Changed the definition of "add_favorite", "add_item", "api_index" and 37 more
before
—after
Add favoritebefore
—after
{"destructiveHint":false,"idempotentHint":false,"readOnlyHint":false,"title":"Add favorite"}before
—Add item
Certificate changed, valid to 2026-12-22
Changed the definition of "contact" and "producer_services"
Contato,Faleprojetocomdequemprodutorfaz o produto: dúvida, ou proposta depatrocínio/parceria/anúnciopatrocínio/parceria/anúncio.($0.10Grátis,x402/créditosemporcaptchaenvio).nem
Changed the definition of "add_favorite", "add_item", "api_index" and 31 more
Favorita umcanalcanal.paraRepetir não soma: odono.contador público conta pessoas, não cliques.
Adiciona canal à 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á atualizada — não precisa recarregar `GET /api/library` depois.Removed "mint_key"; changed the definition of "chat_pass" and "me" (41 tools before, 40 now)
Passe mensal do chat ($0.10 / 30 dias).do convidado que fala no chat. Sem pagamento → 402.
Conta da sessão (cookie repassado pelo cliente MCP): e-mail,convidado principale tamanho dabiblioteca.biblioteca da conta.
Changed the definition of "channel_health", "chat_history", "chat_send" and 8 more
{"properties":{"id":{"description":"ID do canal noiptv-org.catálogo.","type":"string"}},"required": ⟨3 unchanged words⟩
{"properties":{"channel_id":{"description":"ID do canal noiptv-org.catálogo.","type":"string"}},"required": ⟨3 unchanged words⟩
Removed "nsfw_consent_accept", "nsfw_consent_revoke", "nsfw_consent_status" and 2 more; changed the definition of "legacy_stream" and "search_channels" (46 tools before, 41 now)
⟨10 unchanged words⟩ copiar em outro player e player legado HTTP.Recusa adulto e bloqueados.
⟨5 unchanged words⟩ country, category, language, network, quality,playable, nsfw;playable; kind=radio para estações de rádio, tag para ⟨26 unchanged words⟩
Changed the definition of "me"
ContaMMda sessão (cookie repassado pelo cliente MCP): ⟨7 unchanged words⟩
Changed the definition of "add_favorite", "add_item", "forget_watch" and 3 more
⟨2 unchanged words⟩ :{"description":"Canal a favoritar, ex.`Globo.br`.`GloboNews.br`.","type":"string"}},"required": ⟨3 unchanged words⟩
⟨3 unchanged words⟩ ":"ID do canal no catálogo, ex.`Globo.br`.`GloboNews.br`.","type":"string"},"group_id":{ ⟨14 unchanged words⟩
Removed "auth_start" and "auth_verify"; changed the definition of "me" (48 tools before, 46 now)
Conta MM da sessão (cookie repassado pelo cliente MCP): e-mail, convidado principal e tamanho da biblioteca.
Manda o código de login por e-mail.
Confere o código, abre sessão e reivindica o convidado (devolve o convidado principal).
Added "pricing" (47 tools before, 48 now)
Current public prices and free allowances; no charge.
Certificate recorded, valid to 2026-12-05
Authorization not required
First tool surface recorded: 47 tools (server version 6d417292)
Showing the latest 18 events. The API returns up to 500 and filters by kind: ?kind=tool_surface_changed
⟨9 unchanged words⟩ :"string"},"code":{"description":"PorCódigoquedafalhou;falha; só quando `ok` é `false`. Código ausente ou desconhecido entra como `outro`.","enum":["cors","geo","sumiu","codec","playlist","sem_resposta","protocolo","sem_stream","embed","outro"],"type":"string"}, ⟨15 unchanged words⟩
before
—after
{"destructiveHint":false,"idempotentHint":false,"readOnlyHint":false,"title":"Add item"}before
—after
API indexbefore
—after
{"destructiveHint":false,"idempotentHint":true,"readOnlyHint":true,"title":"API index"}before
—after
Billingbefore
—after
{"destructiveHint":false,"idempotentHint":true,"readOnlyHint":true,"title":"Billing"}before
—after
Channel healthbefore
—after
{"destructiveHint":false,"idempotentHint":true,"readOnlyHint":true,"title":"Channel health"}before
—after
Chat historybefore
—after
{"destructiveHint":false,"idempotentHint":true,"readOnlyHint":true,"title":"Chat history"}before
—after
Chat passbefore
—after
{"destructiveHint":false,"idempotentHint":false,"readOnlyHint":false,"title":"Chat pass"}before
—after
Chat sendbefore
—after
{"destructiveHint":false,"idempotentHint":false,"readOnlyHint":false,"title":"Chat send"}before
—after
Clear historybefore
—after
{"destructiveHint":true,"idempotentHint":true,"readOnlyHint":false,"title":"Clear history"}before
—after
Contactbefore
—after
{"destructiveHint":false,"idempotentHint":false,"readOnlyHint":false,"title":"Contact"}before
—after
Create categorybefore
—after
{"destructiveHint":false,"idempotentHint":false,"readOnlyHint":false,"title":"Create category"}before
—after
Create groupbefore
—after
{"destructiveHint":false,"idempotentHint":false,"readOnlyHint":false,"title":"Create group"}before
—after
Create guestbefore
—after
{"destructiveHint":false,"idempotentHint":false,"readOnlyHint":false,"title":"Create guest"}before
—after
Delete commentbefore
—after
{"destructiveHint":true,"idempotentHint":true,"readOnlyHint":false,"title":"Delete comment"}before
—after
Forget watchbefore
—after
{"destructiveHint":true,"idempotentHint":true,"readOnlyHint":false,"title":"Forget watch"}before
—after
Geobefore
—after
{"destructiveHint":false,"idempotentHint":true,"readOnlyHint":true,"title":"Geo"}before
—after
Get channelbefore
—after
{"destructiveHint":false,"idempotentHint":true,"readOnlyHint":true,"title":"Get channel"}before
—after
Get channel guidebefore
—after
{"destructiveHint":false,"idempotentHint":true,"readOnlyHint":true,"title":"Get channel guide"}before
—after
Get historybefore
—after
{"destructiveHint":false,"idempotentHint":true,"readOnlyHint":true,"title":"Get history"}before
—after
Get librarybefore
—after
{"destructiveHint":false,"idempotentHint":true,"readOnlyHint":true,"title":"Get library"}before
—after
Healthbefore
—after
{"destructiveHint":false,"idempotentHint":true,"readOnlyHint":true,"title":"Health"}before
—after
Legacy streambefore
—after
{"destructiveHint":false,"idempotentHint":true,"readOnlyHint":true,"title":"Legacy stream"}before
—after
List citiesbefore
—after
{"destructiveHint":false,"idempotentHint":true,"readOnlyHint":true,"title":"List cities"}before
—after
List commentsbefore
—after
{"destructiveHint":false,"idempotentHint":true,"readOnlyHint":true,"title":"List comments"}before
—after
List countriesbefore
—after
{"destructiveHint":false,"idempotentHint":true,"readOnlyHint":true,"title":"List countries"}before
—after
List favoritesbefore
—after
{"destructiveHint":false,"idempotentHint":true,"readOnlyHint":true,"title":"List favorites"}before
—after
List languagesbefore
—after
{"destructiveHint":false,"idempotentHint":true,"readOnlyHint":true,"title":"List languages"}before
—after
List networksbefore
—after
{"destructiveHint":false,"idempotentHint":true,"readOnlyHint":true,"title":"List networks"}before
—after
List qualitiesbefore
—after
{"destructiveHint":false,"idempotentHint":true,"readOnlyHint":true,"title":"List qualities"}before
—after
List subdivisionsbefore
—after
{"destructiveHint":false,"idempotentHint":true,"readOnlyHint":true,"title":"List subdivisions"}before
—after
List tagsbefore
—after
{"destructiveHint":false,"idempotentHint":true,"readOnlyHint":true,"title":"List tags"}before
—after
Mebefore
—after
{"destructiveHint":false,"idempotentHint":true,"readOnlyHint":true,"title":"Me"}before
—after
Play reportsbefore
—after
{"destructiveHint":false,"idempotentHint":true,"readOnlyHint":true,"title":"Play reports"}before
—after
Post commentbefore
—after
{"destructiveHint":false,"idempotentHint":false,"readOnlyHint":false,"title":"Post comment"}before
—after
Pricingbefore
—after
{"destructiveHint":false,"idempotentHint":true,"readOnlyHint":true,"title":"Pricing"}before
—after
Producer servicesbefore
—after
{"destructiveHint":false,"idempotentHint":true,"readOnlyHint":true,"title":"Producer services"}before
—after
Record watchbefore
—after
{"destructiveHint":false,"idempotentHint":false,"readOnlyHint":false,"title":"Record watch"}before
—after
Remove favoritebefore
—after
{"destructiveHint":true,"idempotentHint":true,"readOnlyHint":false,"title":"Remove favorite"}before
—after
Report playbefore
—after
{"destructiveHint":false,"idempotentHint":false,"readOnlyHint":false,"title":"Report play"}before
—after
Search channelsbefore
—after
{"destructiveHint":false,"idempotentHint":true,"readOnlyHint":true,"title":"Search channels"}⟨48 unchanged words⟩ ":{"description":"O que você querdizer.dizer (alias `mensagem`).","type":"string"},"name":{"description":"Como chamar quemescreveu.escreve (alias `nome`).","type":"string"},"orcamento":{ ⟨58 unchanged words⟩
⟨36 unchanged words⟩ POST /api/contact para apresentar o projeto. O envioporéAPIlivremantém—osemgatecaptchax402nemoupagamentocrédito—,pré-pago;umaomensagemformulárioahumanocadausa10Turnstile.s por rede.
DescobreÍndiceaauto-descrito da APIGrade.inteira, com os idiomas e as páginas HTML de cada um.
Preços e tetos. É o número EM VIGOR: leia daqui antes de gastar chamada, em vez de assumir o preço da documentação. Com credencial, também diz se o passe de chat de quem fala no chat (o convidado; sem ele, a conta) está ativo. `prices.abuso_24h_usd` é o preço da porta de UA vazio/curl, hoje desligada.⟨5 unchanged words⟩ de sucesso, motivos de falha e ambientes afetados. É o que separa 'o canal está fora do ar' de 'o canal está bloqueado no seu país'. `geo` diz se é restrição regional ou falha geral (com os países), `regions[]` traz sucesso/falha por país, `latency[]` a velocidade de abertura medida no hop por país, e `pra_voce` resume tudo para o país de quem chama. Sem relato da comunidade (`POST /api/play-report`) o painel fica vazio.
⟨10 unchanged words⟩ que fala no chat. Sem pagamento → 402. Passe já válido devolve 200 sem cobrar de novo — dá para chamar antes de escrever, sem risco de pagar duas vezes. O passe é de quem fala no chat: o convidado de `X-Guest-Token` (é ele que o WebSocket reconhece no `hello`); sem convidado, a sessão da conta, que fala só por HTTP. Fica no registro global de compras (`direito`).
Manda mensagem na sala de um canal por HTTP. Ler é grátis; escrever custa $0.10 por 30 dias. Sem passe válido a resposta é 402 com `accepts[]` — pague e repita a mesma chamada. Quem fala é o convidado (`X-Guest-Token`), o mesmo que o WebSocket reconhece; sem convidado, a sessão da conta.Limpa o histórico inteiro dodono.dono, de uma vez.
⟨12 unchanged words⟩ . Após o 1º envio: 429 + Retry-After. Projetos de produtores: consulte GET /api/producers e use contact.message_template na mensagem. O primeiro envio de agente sai sem espera, após pagamento; depois o backoff é 60s dobrando até 1 hora (`Retry-After`). O valor paga somente o envio do contato, não o serviço de transmissão.
Cria tab/categoria pessoal. Teto de 8 pastas por dono. A resposta traz a biblioteca inteira já atualizada — não precisa recarregar `GET /api/library` depois.Cria sub-aba numa categoria. Teto de 12 sub-abas por pasta. A resposta traz a biblioteca inteira já atualizada — não precisa recarregar `GET /api/library` depois.Cria guest ipt_… Não pede e-mail nem nada. Guarde o token: perdeu o token, perdeu a biblioteca — a não ser que a conta já o tenha reivindicado (`POST /api/auth/claim`), e aí o que ele guardou está na conta.Apaga um comentário do próprio dono. O 404 é de propósito: a API não confirma que existe um comentário com aquele id se ele não é seu.Paíssugeridoe idioma sugeridos paraaquemUIestá(fallbackchamando. Sem país detectado pela borda, sugere BR).com `source: "fallback"`; `detected` diz o que a borda viu.
DetalheFicha completa de um canal,ecomseusosstreams.streams já apontando para o nosso hop.
⟨7 unchanged words⟩ nós): agora, a seguir e a lista. Disponível nos canais com guia (`guide=1`), com validade de até dois dias. Confira a data da resposta; a ficha traz o resumo em `guide_now`.
Histórico de canais assistidos pelo dono. Exibe somente canais disponíveis no catálogo.ÁrvoreAorganizadagaleria inteira do dono:+pastas, sub-abas, canais e as URLs defeed.feed de cada nível.
Liveness.Liveness e o commit publicado agora — é como o smoke espera o próprio deploy.
⟨10 unchanged words⟩ copiar em outro player e player legado HTTP. O botão legacy_url abre http://legacy.gradetv.net:8080/legacy?stream=ID. A página isolada aceita lang=pt/en/es/fr/de e theme=light/dark. Playlists continuam pelo hop HTTPS e mídia direto da origem. Não remove recusa de acesso nem exigência CORS. Uma leitura indexada; não busca origem nem grava no D1.
Cidadescomque têm canaltocável.tocável, filtráveis por país e por estado.
Comentários da comunidade sobre um canal. Com credencial na chamada, cada comentário seu vem com `mine: true` — é assim que a interface sabe o que dá para apagar.Favoritos do dono. Exibe somente canais disponíveis no catálogo.Idiomasdoquecatálogotêmtocável.canal tocável, com a contagem de cada um.
Redes(network)edoemissorascatálogoquetocável.têm canal tocável, com a contagem.
Qualidades distintasdosencontradasstreams.nos streams do catálogo (em rádio, codec e bitrate).
Estados/subdivisõesEstadoscome províncias que têm canal tocável.
⟨8 unchanged words⟩ ): e-mail e tamanho da biblioteca da conta. A conta é a da biblioteca de conta; `user.id` é o id da conta, e é ele o dono da galeria com sessão.
⟨10 unchanged words⟩ (METRICS_TOKEN). Use para investigar um canal específico. Existe separado do painel público justamente porque traz endereço. A linha some depois do prazo em `retention_days`, e `/api/channels/:id/health` nunca devolve IP.
Comenta num canal (teto de 20/hora por dono). Sem `author`, o apelido é gerado e fica estável para o mesmo dono — a pessoa não vira um nome diferente a cada mensagem.⟨6 unchanged words⟩ informações e contatos para produtores. Não ativa streams. Somente informações e captação de interesse. Não provisiona, não cobra e não ativa transmissão. Use contact.form_url no browser, contact.email por e-mail ou POST /api/contact para apresentar o projeto. O envio por API mantém o gate x402 ou crédito pré-pago; o formulário humano usa Turnstile.
TiraDesfavoritaumo canaldosefavoritosdevolvedoodono.ponto ao contador público.
⟨14 unchanged words⟩ e país saem do pedido, não do corpo. Conta uma vez por dono, por canal, por dia e por resultado; relatar de novo devolve 200 com `reason: ja_relatado_hoje`, e não é erro. Navegador e sistema saem do User-Agent e o país da borda — mandar isso no corpo não muda nada. Sem relato, o catálogo não aprende: é assim que `GET /api/channels/:id/health` sabe distinguir canal fora do ar de canal bloqueado para você.
⟨36 unchanged words⟩ foi visto online nas últimas 48 h). É a porta de entrada do produto. A resposta varia por navegador, sistema e país de quem pede — cada canal traz `social.your_fails`, o recorte do SEU ambiente — por isso ela é `Cache-Control: private`.
Gera API key iptk_… (texto 1×).
⟨27 unchanged words⟩ ":{"description":"ID do canal noiptv-org.catálogo.","type":"string"}},"required": ⟨4 unchanged words⟩
País sugeridopelo Cloudflarepara a UI (fallback BR).
{"properties":{"id":{"description":"ID do canal noiptv-orgcatálogo, ex. `GloboNews.br`.","type":"string"}} ⟨4 unchanged words⟩
{"properties":{"id":{"description":"ID do canal noiptv-org.catálogo.","type":"string"}},"required": ⟨3 unchanged words⟩
{"properties":{"id":{"description":"ID do canal noiptv-org.catálogo.","type":"string"}},"required": ⟨3 unchanged words⟩
⟨7 unchanged words⟩ ) conta canais de TV; `radio` conta estaçõesdo RadiodeBrowser;rádio; `all` junta os dois.","enum":[" ⟨7 unchanged words⟩
Tags das estações de rádio tocáveis(Radio Browser), com contagem; opcionalmente por país.
⟨31 unchanged words⟩ ":{"description":"ID do canal noiptv-org.catálogo.","type":"string"}},"required": ⟨4 unchanged words⟩
{"properties":{"category":{"description":"ID de categoria doiptv-org.catálogo.","type":"string"},"city":{"description":"Cidade, código doiptv-org.catálogo.","type":"string"},"country":{ ⟨35 unchanged words⟩ o catálogo de TV; `radio` são as estaçõesdo RadiodeBrowser;rádio; `all` junta os dois. Sem `kind`, rádio ⟨29 unchanged words⟩ `1` traz só canal visto online pela fonte(IPTV Nexus para TV, Radio Browser para rádio)nas 48 h anteriores à última recarga do ⟨66 unchanged words⟩ ":"`score` ordena pela saúde medida por terceiro(IPTV Nexus), melhor primeiro; canal não medido vai para o fim. `votes` ordena pelos votosda comunidaderegistradosdoparaRadioaBrowserestação (rádio). `name` é a ordem alfabética." ⟨6 unchanged words⟩ subdivision":{"description":"Estado/província, código doiptv-org.catálogo.","type":"string"},"tag":{"description":"Tag da estação de rádio (vocabulário livredo Radio Browser, ex. `mpb`, `news`); veja `GET /api/tags`. ⟨4 unchanged words⟩
⟨93 unchanged words⟩ da rede/emissora.","type":"string"},"nsfw":{"default":"0","description":"`1` inclui conteúdo adulto; exige consentimento 18+ gravado, senão 403.","enum":["0","1"],"type":"string"},"online":{"default":"0","description": ⟨161 unchanged words⟩
Declara 18+ e aceita os termos de conteúdo adulto; libera nsfw=1 para este dono.
Revoga o consentimento adulto do dono.
Estado do portão de conteúdo adulto do dono.
Compra o passe de conteúdo adulto ($0.10 / 30 dias, x402). Exige consentimento de idade antes.
Diz se o passe adulto do dono está válido e até quando.
⟨3 unchanged words⟩ ":"Canal a remover do histórico, ex.`Globo.br`.`GloboNews.br`.","type":"string"}},"required": ⟨3 unchanged words⟩
⟨3 unchanged words⟩ ":"ID do canal no iptv-org, ex.`Globo.br`.`GloboNews.br`.","type":"string"}},"required": ⟨3 unchanged words⟩
{"properties":{"channel_id":{"description":"Canal assistido, ex.`Globo.br`.`GloboNews.br`.","type":"string"}},"required": ⟨3 unchanged words⟩
⟨2 unchanged words⟩ :{"description":"Canal a desfavoritar, ex.`Globo.br`.`GloboNews.br`.","type":"string"}},"required": ⟨3 unchanged words⟩