{"$schema":"https://wellknown.network/schemas/agent-record-v1.json","schemaVersion":"1","id":"ag_teud5vpk7ujv","handle":"grade","url":"https://wellknown.network/agents/grade","links":{"self":"https://wellknown.network/agents/grade/record.json","html":"https://wellknown.network/agents/grade","markdown":"https://wellknown.network/agents/grade/record.md","api":"https://wellknown.network/api/v1/agents/grade","status":"https://wellknown.network/api/v1/agents/grade/status","claim":"https://wellknown.network/agents/grade/claim","claimApi":"https://wellknown.network/api/v1/claims","claimDescriptor":"https://wellknown.network/agents/grade/claim.json","badge":"https://wellknown.network/agents/grade/badge.svg","openapi":"https://wellknown.network/openapi.json","history":"https://wellknown.network/api/v1/agents/grade/history","tools":"https://wellknown.network/api/v1/agents/grade/tools"},"ard":{"identifier":"urn:air:gradetv.net:server:grade","type":"application/mcp-server-card+json"},"kind":"mcp_server","declared":{"name":"grade","summary":"Public TV and radio catalogue with measured stream health, folders and M3U feeds for VLC.","description":"Public TV and radio catalogue with measured stream health, folders and M3U feeds for VLC.","publisher":{"name":"net.gradetv","url":null},"homepage":"https://gradetv.net","repository":null,"version":"1.0.0","license":null,"protocols":["mcp"],"tags":[],"pricing":null,"endpoints":[{"url":"https://gradetv.net/mcp","type":"mcp_streamable_http","auth":null,"probeable":true}],"skills":null,"tools":null,"extra":{"updatedAt":"2026-09-05T01:52:50.918651Z","publishedAt":"2026-09-05T01:52:50.918651Z","registryName":"net.gradetv/grade"},"attribution":{"kind":"mcp_registry","name":"mcp_registry","summary":"mcp_registry","version":"mcp_registry","description":"mcp_registry","homepageUrl":"mcp_registry","publisherName":"mcp_registry"}},"derived":{"capabilities":[{"slug":"communication.chat","name":"Team Chat","confidence":0.977,"provenance":"derived"},{"slug":"data.news","name":"News & Feeds","confidence":0.833,"provenance":"derived"},{"slug":"commerce.payments","name":"Payments","confidence":0.51,"provenance":"derived"},{"slug":"commerce.pricing","name":"Pricing & Quotes","confidence":0.51,"provenance":"derived"}],"categories":["commerce","communication","data"],"language":"en"},"observed":{"status":"live","statusReason":"Responded 3h ago.","lastOkAt":"2026-10-11T13:23:56.971Z","lastProbedAt":"2026-10-11T13:23:56.971Z","statusComputedAt":"2026-10-11T13:25:59.500Z","reliability30d":{"probes":112,"successRate":1,"p50Ms":185,"basis":"service","measures":{"availability":"availability","latency":"response time","tools":"tool surface observed","summary":"Checks reached the service itself."},"checks":{"total":109,"ok":109,"authBoundaryOk":0,"serviceOk":109,"note":"Counted from the observation rows for the window, checks of the server only (HTTP, A2A card, MCP initialize). ok = authBoundaryOk + serviceOk. `probes` is the sum of daily rollups and includes registry checks, so it can differ from `total`."}},"latestObservations":[{"at":"2026-10-11T13:23:56.971Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":212,"error":null,"detail":{"tools":[{"name":"list_programacao","description":"Canais com programação coletada, até 48 por página."},{"name":"get_programacao","description":"Última programação disponível do canal e até 20 datas do histórico."},{"name":"get_programacao_dia","description":"Programação preservada de um canal em um dia específico."},{"name":"api_index","description":"Índice auto-descrito da API inteira, com os idiomas e as páginas HTML de cada um."},{"name":"health","description":"Liveness e o commit publicado agora — é como o smoke espera o próprio deploy."},{"name":"geo","description":"País e idioma sugeridos para quem está chamando. Sem país detectado pela borda, sugere BR com `source: \"fallback\"`; `detected` diz o que a borda viu."},{"name":"list_countries","description":"Países do catálogo com contagem playable e URL da bandeira (kind=radio conta estações)."},{"name":"list_tags","description":"Tags das estações de rádio tocáveis, com contagem; opcionalmente por país."},{"name":"search_channels","description":"Busca canais públicos (filtros: q, country, category, language, network, quality, playable; kind=radio para estações de rádio, tag para tag de rádio; sort=score"},{"name":"list_languages","description":"Idiomas que têm canal tocável, com a contagem de cada um."},{"name":"list_networks","description":"Redes e emissoras que têm canal tocável, com a contagem."},{"name":"list_qualities","description":"Qualidades distintas encontradas nos streams do catálogo (em rádio, codec e bitrate)."},{"name":"list_subdivisions","description":"Estados e províncias que têm canal tocável."},{"name":"list_cities","description":"Cidades que têm canal tocável, filtráveis por país e por estado."},{"name":"get_channel","description":"Ficha completa de um canal, com os streams já apontando para o nosso hop."},{"name":"get_channel_guide","description":"Programação de hoje do canal (grabada por nós): agora, a seguir e a lista. Disponível nos canais com guia (`guide=1`), com validade de até dois dias. Confira a "},{"name":"create_guest","description":"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/"},{"name":"get_library","description":"A galeria inteira do dono: pastas, sub-abas, canais e as URLs de feed de cada nível."},{"name":"create_category","description":"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."},{"name":"create_group","description":"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` depoi"},{"name":"add_item","description":"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"},{"name":"get_history","description":"Histórico de canais assistidos pelo dono. Exibe somente canais disponíveis no catálogo."},{"name":"record_watch","description":"Registra um canal assistido no histórico do dono."},{"name":"forget_watch","description":"Tira um canal do histórico do dono."},{"name":"clear_history","description":"Limpa o histórico inteiro do dono, de uma vez."},{"name":"tv_state","description":"Consulta a ativação da rede da TV pelo código de seis dígitos."},{"name":"tv_pass","description":"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"},{"name":"legacy_stream","description":"Metadados públicos: site oficial do canal, URL da transmissão para copiar em outro player e player legado HTTP. O botão legacy_url abre http://legacy.gradetv.ne"},{"name":"producer_services","description":"Oferta de transmissão autorizada sob consulta: informações e contatos para produtores. Não ativa streams. Somente informações e captação de interesse. Não provi"},{"name":"report_play","description":"Relata se um canal tocou (ok=true) ou não (ok=false + code). Navegador, SO e país saem do pedido, não do corpo. O primeiro relato desse resultado no dia devolve"},{"name":"play_reports","description":"Relatos crus de um canal, com endereço — só operador (METRICS_TOKEN). Use para investigar um canal específico. Nos relatos atuais, o campo `ip` contém um identi"},{"name":"channel_health","description":"Saúde comunitária do canal: taxa de sucesso, motivos de falha e ambientes afetados. É o que separa 'o canal está fora do ar' de 'o canal está bloqueado no seu p"},{"name":"list_favorites","description":"Favoritos do dono. Exibe somente canais disponíveis no catálogo."},{"name":"add_favorite","description":"Favorita um canal. Repetir não soma: o contador público conta pessoas, não cliques."},{"name":"remove_favorite","description":"Desfavorita o canal e devolve o ponto ao contador público."},{"name":"list_comments","description":"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 apaga"},{"name":"post_comment","description":"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 men"},{"name":"delete_comment","description":"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."},{"name":"chat_history","description":"Últimas mensagens da sala de um canal (sem WebSocket)."},{"name":"chat_send","description":"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 "},{"name":"chat_pass","description":"Passe mensal do chat ($0.10 / 30 dias) do convidado que fala no chat. Sem pagamento → 402. Passe já válido devolve 200 sem cobrar de novo — dá para chamar antes"},{"name":"me","description":"Conta da sessão (cookie repassado pelo cliente MCP): e-mail e tamanho da biblioteca da conta. A conta é a da biblioteca de conta; `user.id` é o id da conta, e é"},{"name":"billing","description":"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 cha"},{"name":"contact","description":"Fale com quem faz o produto: dúvida, ou proposta de patrocínio/parceria/anúncio. Grátis, sem captcha nem pagamento; uma mensagem a cada 10 s por rede (a que che"},{"name":"pricing","description":"Current public prices and free allowances; no charge."}],"toolCount":45,"toolsHash":"f973b4f57147a1fcc9e1e706f62cceec20c9a3ab4ff5026ebe5e178d5b593c6d","serverName":"Grade","capabilities":["tools"],"serverVersion":"d61617b3","protocolVersion":"2025-06-18"}},{"at":"2026-10-11T06:22:21.083Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":214,"error":null,"detail":{"tools":[{"name":"list_programacao","description":"Canais com programação coletada, até 48 por página."},{"name":"get_programacao","description":"Última programação disponível do canal e até 20 datas do histórico."},{"name":"get_programacao_dia","description":"Programação preservada de um canal em um dia específico."},{"name":"api_index","description":"Índice auto-descrito da API inteira, com os idiomas e as páginas HTML de cada um."},{"name":"health","description":"Liveness e o commit publicado agora — é como o smoke espera o próprio deploy."},{"name":"geo","description":"País e idioma sugeridos para quem está chamando. Sem país detectado pela borda, sugere BR com `source: \"fallback\"`; `detected` diz o que a borda viu."},{"name":"list_countries","description":"Países do catálogo com contagem playable e URL da bandeira (kind=radio conta estações)."},{"name":"list_tags","description":"Tags das estações de rádio tocáveis, com contagem; opcionalmente por país."},{"name":"search_channels","description":"Busca canais públicos (filtros: q, country, category, language, network, quality, playable; kind=radio para estações de rádio, tag para tag de rádio; sort=score"},{"name":"list_languages","description":"Idiomas que têm canal tocável, com a contagem de cada um."},{"name":"list_networks","description":"Redes e emissoras que têm canal tocável, com a contagem."},{"name":"list_qualities","description":"Qualidades distintas encontradas nos streams do catálogo (em rádio, codec e bitrate)."},{"name":"list_subdivisions","description":"Estados e províncias que têm canal tocável."},{"name":"list_cities","description":"Cidades que têm canal tocável, filtráveis por país e por estado."},{"name":"get_channel","description":"Ficha completa de um canal, com os streams já apontando para o nosso hop."},{"name":"get_channel_guide","description":"Programação de hoje do canal (grabada por nós): agora, a seguir e a lista. Disponível nos canais com guia (`guide=1`), com validade de até dois dias. Confira a "},{"name":"create_guest","description":"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/"},{"name":"get_library","description":"A galeria inteira do dono: pastas, sub-abas, canais e as URLs de feed de cada nível."},{"name":"create_category","description":"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."},{"name":"create_group","description":"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` depoi"},{"name":"add_item","description":"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"},{"name":"get_history","description":"Histórico de canais assistidos pelo dono. Exibe somente canais disponíveis no catálogo."},{"name":"record_watch","description":"Registra um canal assistido no histórico do dono."},{"name":"forget_watch","description":"Tira um canal do histórico do dono."},{"name":"clear_history","description":"Limpa o histórico inteiro do dono, de uma vez."},{"name":"tv_state","description":"Consulta a ativação da rede da TV pelo código de seis dígitos."},{"name":"tv_pass","description":"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"},{"name":"legacy_stream","description":"Metadados públicos: site oficial do canal, URL da transmissão para copiar em outro player e player legado HTTP. O botão legacy_url abre http://legacy.gradetv.ne"},{"name":"producer_services","description":"Oferta de transmissão autorizada sob consulta: informações e contatos para produtores. Não ativa streams. Somente informações e captação de interesse. Não provi"},{"name":"report_play","description":"Relata se um canal tocou (ok=true) ou não (ok=false + code). Navegador, SO e país saem do pedido, não do corpo. O primeiro relato desse resultado no dia devolve"},{"name":"play_reports","description":"Relatos crus de um canal, com endereço — só operador (METRICS_TOKEN). Use para investigar um canal específico. Nos relatos atuais, o campo `ip` contém um identi"},{"name":"channel_health","description":"Saúde comunitária do canal: taxa de sucesso, motivos de falha e ambientes afetados. É o que separa 'o canal está fora do ar' de 'o canal está bloqueado no seu p"},{"name":"list_favorites","description":"Favoritos do dono. Exibe somente canais disponíveis no catálogo."},{"name":"add_favorite","description":"Favorita um canal. Repetir não soma: o contador público conta pessoas, não cliques."},{"name":"remove_favorite","description":"Desfavorita o canal e devolve o ponto ao contador público."},{"name":"list_comments","description":"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 apaga"},{"name":"post_comment","description":"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 men"},{"name":"delete_comment","description":"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."},{"name":"chat_history","description":"Últimas mensagens da sala de um canal (sem WebSocket)."},{"name":"chat_send","description":"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 "},{"name":"chat_pass","description":"Passe mensal do chat ($0.10 / 30 dias) do convidado que fala no chat. Sem pagamento → 402. Passe já válido devolve 200 sem cobrar de novo — dá para chamar antes"},{"name":"me","description":"Conta da sessão (cookie repassado pelo cliente MCP): e-mail e tamanho da biblioteca da conta. A conta é a da biblioteca de conta; `user.id` é o id da conta, e é"},{"name":"billing","description":"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 cha"},{"name":"contact","description":"Fale com quem faz o produto: dúvida, ou proposta de patrocínio/parceria/anúncio. Grátis, sem captcha nem pagamento; uma mensagem a cada 10 s por rede (a que che"},{"name":"pricing","description":"Current public prices and free allowances; no charge."}],"toolCount":45,"toolsHash":"f973b4f57147a1fcc9e1e706f62cceec20c9a3ab4ff5026ebe5e178d5b593c6d","serverName":"Grade","capabilities":["tools"],"serverVersion":"2f0d118a","protocolVersion":"2025-06-18"}},{"at":"2026-10-10T23:21:21.031Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":205,"error":null,"detail":{"tools":[{"name":"list_programacao","description":"Canais com programação coletada, até 48 por página."},{"name":"get_programacao","description":"Última programação disponível do canal e até 20 datas do histórico."},{"name":"get_programacao_dia","description":"Programação preservada de um canal em um dia específico."},{"name":"api_index","description":"Índice auto-descrito da API inteira, com os idiomas e as páginas HTML de cada um."},{"name":"health","description":"Liveness e o commit publicado agora — é como o smoke espera o próprio deploy."},{"name":"geo","description":"País e idioma sugeridos para quem está chamando. Sem país detectado pela borda, sugere BR com `source: \"fallback\"`; `detected` diz o que a borda viu."},{"name":"list_countries","description":"Países do catálogo com contagem playable e URL da bandeira (kind=radio conta estações)."},{"name":"list_tags","description":"Tags das estações de rádio tocáveis, com contagem; opcionalmente por país."},{"name":"search_channels","description":"Busca canais públicos (filtros: q, country, category, language, network, quality, playable; kind=radio para estações de rádio, tag para tag de rádio; sort=score"},{"name":"list_languages","description":"Idiomas que têm canal tocável, com a contagem de cada um."},{"name":"list_networks","description":"Redes e emissoras que têm canal tocável, com a contagem."},{"name":"list_qualities","description":"Qualidades distintas encontradas nos streams do catálogo (em rádio, codec e bitrate)."},{"name":"list_subdivisions","description":"Estados e províncias que têm canal tocável."},{"name":"list_cities","description":"Cidades que têm canal tocável, filtráveis por país e por estado."},{"name":"get_channel","description":"Ficha completa de um canal, com os streams já apontando para o nosso hop."},{"name":"get_channel_guide","description":"Programação de hoje do canal (grabada por nós): agora, a seguir e a lista. Disponível nos canais com guia (`guide=1`), com validade de até dois dias. Confira a "},{"name":"create_guest","description":"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/"},{"name":"get_library","description":"A galeria inteira do dono: pastas, sub-abas, canais e as URLs de feed de cada nível."},{"name":"create_category","description":"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."},{"name":"create_group","description":"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` depoi"},{"name":"add_item","description":"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"},{"name":"get_history","description":"Histórico de canais assistidos pelo dono. Exibe somente canais disponíveis no catálogo."},{"name":"record_watch","description":"Registra um canal assistido no histórico do dono."},{"name":"forget_watch","description":"Tira um canal do histórico do dono."},{"name":"clear_history","description":"Limpa o histórico inteiro do dono, de uma vez."},{"name":"tv_state","description":"Consulta a ativação da rede da TV pelo código de seis dígitos."},{"name":"tv_pass","description":"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"},{"name":"legacy_stream","description":"Metadados públicos: site oficial do canal, URL da transmissão para copiar em outro player e player legado HTTP. O botão legacy_url abre http://legacy.gradetv.ne"},{"name":"producer_services","description":"Oferta de transmissão autorizada sob consulta: informações e contatos para produtores. Não ativa streams. Somente informações e captação de interesse. Não provi"},{"name":"report_play","description":"Relata se um canal tocou (ok=true) ou não (ok=false + code). Navegador, SO e país saem do pedido, não do corpo. O primeiro relato desse resultado no dia devolve"},{"name":"play_reports","description":"Relatos crus de um canal, com endereço — só operador (METRICS_TOKEN). Use para investigar um canal específico. Nos relatos atuais, o campo `ip` contém um identi"},{"name":"channel_health","description":"Saúde comunitária do canal: taxa de sucesso, motivos de falha e ambientes afetados. É o que separa 'o canal está fora do ar' de 'o canal está bloqueado no seu p"},{"name":"list_favorites","description":"Favoritos do dono. Exibe somente canais disponíveis no catálogo."},{"name":"add_favorite","description":"Favorita um canal. Repetir não soma: o contador público conta pessoas, não cliques."},{"name":"remove_favorite","description":"Desfavorita o canal e devolve o ponto ao contador público."},{"name":"list_comments","description":"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 apaga"},{"name":"post_comment","description":"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 men"},{"name":"delete_comment","description":"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."},{"name":"chat_history","description":"Últimas mensagens da sala de um canal (sem WebSocket)."},{"name":"chat_send","description":"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 "},{"name":"chat_pass","description":"Passe mensal do chat ($0.10 / 30 dias) do convidado que fala no chat. Sem pagamento → 402. Passe já válido devolve 200 sem cobrar de novo — dá para chamar antes"},{"name":"me","description":"Conta da sessão (cookie repassado pelo cliente MCP): e-mail e tamanho da biblioteca da conta. A conta é a da biblioteca de conta; `user.id` é o id da conta, e é"},{"name":"billing","description":"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 cha"},{"name":"contact","description":"Fale com quem faz o produto: dúvida, ou proposta de patrocínio/parceria/anúncio. Grátis, sem captcha nem pagamento; uma mensagem a cada 10 s por rede (a que che"},{"name":"pricing","description":"Current public prices and free allowances; no charge."}],"toolCount":45,"toolsHash":"f973b4f57147a1fcc9e1e706f62cceec20c9a3ab4ff5026ebe5e178d5b593c6d","serverName":"Grade","capabilities":["tools"],"serverVersion":"b85f77ec","protocolVersion":"2025-06-18"}},{"at":"2026-10-10T16:32:48.359Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":630,"error":null,"detail":{"tools":[{"name":"list_programacao","description":"Canais com programação coletada, até 48 por página."},{"name":"get_programacao","description":"Última programação disponível do canal e até 20 datas do histórico."},{"name":"get_programacao_dia","description":"Programação preservada de um canal em um dia específico."},{"name":"api_index","description":"Índice auto-descrito da API inteira, com os idiomas e as páginas HTML de cada um."},{"name":"health","description":"Liveness e o commit publicado agora — é como o smoke espera o próprio deploy."},{"name":"geo","description":"País e idioma sugeridos para quem está chamando. Sem país detectado pela borda, sugere BR com `source: \"fallback\"`; `detected` diz o que a borda viu."},{"name":"list_countries","description":"Países do catálogo com contagem playable e URL da bandeira (kind=radio conta estações)."},{"name":"list_tags","description":"Tags das estações de rádio tocáveis, com contagem; opcionalmente por país."},{"name":"search_channels","description":"Busca canais públicos (filtros: q, country, category, language, network, quality, playable; kind=radio para estações de rádio, tag para tag de rádio; sort=score"},{"name":"list_languages","description":"Idiomas que têm canal tocável, com a contagem de cada um."},{"name":"list_networks","description":"Redes e emissoras que têm canal tocável, com a contagem."},{"name":"list_qualities","description":"Qualidades distintas encontradas nos streams do catálogo (em rádio, codec e bitrate)."},{"name":"list_subdivisions","description":"Estados e províncias que têm canal tocável."},{"name":"list_cities","description":"Cidades que têm canal tocável, filtráveis por país e por estado."},{"name":"get_channel","description":"Ficha completa de um canal, com os streams já apontando para o nosso hop."},{"name":"get_channel_guide","description":"Programação de hoje do canal (grabada por nós): agora, a seguir e a lista. Disponível nos canais com guia (`guide=1`), com validade de até dois dias. Confira a "},{"name":"create_guest","description":"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/"},{"name":"get_library","description":"A galeria inteira do dono: pastas, sub-abas, canais e as URLs de feed de cada nível."},{"name":"create_category","description":"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."},{"name":"create_group","description":"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` depoi"},{"name":"add_item","description":"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"},{"name":"get_history","description":"Histórico de canais assistidos pelo dono. Exibe somente canais disponíveis no catálogo."},{"name":"record_watch","description":"Registra um canal assistido no histórico do dono."},{"name":"forget_watch","description":"Tira um canal do histórico do dono."},{"name":"clear_history","description":"Limpa o histórico inteiro do dono, de uma vez."},{"name":"tv_state","description":"Consulta a ativação da rede da TV pelo código de seis dígitos."},{"name":"tv_pass","description":"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"},{"name":"legacy_stream","description":"Metadados públicos: site oficial do canal, URL da transmissão para copiar em outro player e player legado HTTP. O botão legacy_url abre http://legacy.gradetv.ne"},{"name":"producer_services","description":"Oferta de transmissão autorizada sob consulta: informações e contatos para produtores. Não ativa streams. Somente informações e captação de interesse. Não provi"},{"name":"report_play","description":"Relata se um canal tocou (ok=true) ou não (ok=false + code). Navegador, SO e país saem do pedido, não do corpo. O primeiro relato desse resultado no dia devolve"},{"name":"play_reports","description":"Relatos crus de um canal, com endereço — só operador (METRICS_TOKEN). Use para investigar um canal específico. Nos relatos atuais, o campo `ip` contém um identi"},{"name":"channel_health","description":"Saúde comunitária do canal: taxa de sucesso, motivos de falha e ambientes afetados. É o que separa 'o canal está fora do ar' de 'o canal está bloqueado no seu p"},{"name":"list_favorites","description":"Favoritos do dono. Exibe somente canais disponíveis no catálogo."},{"name":"add_favorite","description":"Favorita um canal. Repetir não soma: o contador público conta pessoas, não cliques."},{"name":"remove_favorite","description":"Desfavorita o canal e devolve o ponto ao contador público."},{"name":"list_comments","description":"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 apaga"},{"name":"post_comment","description":"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 men"},{"name":"delete_comment","description":"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."},{"name":"chat_history","description":"Últimas mensagens da sala de um canal (sem WebSocket)."},{"name":"chat_send","description":"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 "},{"name":"chat_pass","description":"Passe mensal do chat ($0.10 / 30 dias) do convidado que fala no chat. Sem pagamento → 402. Passe já válido devolve 200 sem cobrar de novo — dá para chamar antes"},{"name":"me","description":"Conta da sessão (cookie repassado pelo cliente MCP): e-mail e tamanho da biblioteca da conta. A conta é a da biblioteca de conta; `user.id` é o id da conta, e é"},{"name":"billing","description":"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 cha"},{"name":"contact","description":"Fale com quem faz o produto: dúvida, ou proposta de patrocínio/parceria/anúncio. Grátis, sem captcha nem pagamento; uma mensagem a cada 10 s por rede (a que che"},{"name":"pricing","description":"Current public prices and free allowances; no charge."}],"toolCount":45,"toolsHash":"f973b4f57147a1fcc9e1e706f62cceec20c9a3ab4ff5026ebe5e178d5b593c6d","serverName":"Grade","capabilities":["tools"],"serverVersion":"b6e04a8f","protocolVersion":"2025-06-18"}},{"at":"2026-10-10T10:27:56.574Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":212,"error":null,"detail":{"tools":[{"name":"list_programacao","description":"Canais com programação coletada, até 48 por página."},{"name":"get_programacao","description":"Última programação disponível do canal e até 20 datas do histórico."},{"name":"get_programacao_dia","description":"Programação preservada de um canal em um dia específico."},{"name":"api_index","description":"Índice auto-descrito da API inteira, com os idiomas e as páginas HTML de cada um."},{"name":"health","description":"Liveness e o commit publicado agora — é como o smoke espera o próprio deploy."},{"name":"geo","description":"País e idioma sugeridos para quem está chamando. Sem país detectado pela borda, sugere BR com `source: \"fallback\"`; `detected` diz o que a borda viu."},{"name":"list_countries","description":"Países do catálogo com contagem playable e URL da bandeira (kind=radio conta estações)."},{"name":"list_tags","description":"Tags das estações de rádio tocáveis, com contagem; opcionalmente por país."},{"name":"search_channels","description":"Busca canais públicos (filtros: q, country, category, language, network, quality, playable; kind=radio para estações de rádio, tag para tag de rádio; sort=score"},{"name":"list_languages","description":"Idiomas que têm canal tocável, com a contagem de cada um."},{"name":"list_networks","description":"Redes e emissoras que têm canal tocável, com a contagem."},{"name":"list_qualities","description":"Qualidades distintas encontradas nos streams do catálogo (em rádio, codec e bitrate)."},{"name":"list_subdivisions","description":"Estados e províncias que têm canal tocável."},{"name":"list_cities","description":"Cidades que têm canal tocável, filtráveis por país e por estado."},{"name":"get_channel","description":"Ficha completa de um canal, com os streams já apontando para o nosso hop."},{"name":"get_channel_guide","description":"Programação de hoje do canal (grabada por nós): agora, a seguir e a lista. Disponível nos canais com guia (`guide=1`), com validade de até dois dias. Confira a "},{"name":"create_guest","description":"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/"},{"name":"get_library","description":"A galeria inteira do dono: pastas, sub-abas, canais e as URLs de feed de cada nível."},{"name":"create_category","description":"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."},{"name":"create_group","description":"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` depoi"},{"name":"add_item","description":"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"},{"name":"get_history","description":"Histórico de canais assistidos pelo dono. Exibe somente canais disponíveis no catálogo."},{"name":"record_watch","description":"Registra um canal assistido no histórico do dono."},{"name":"forget_watch","description":"Tira um canal do histórico do dono."},{"name":"clear_history","description":"Limpa o histórico inteiro do dono, de uma vez."},{"name":"tv_state","description":"Consulta a ativação da rede da TV pelo código de seis dígitos."},{"name":"tv_pass","description":"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"},{"name":"legacy_stream","description":"Metadados públicos: site oficial do canal, URL da transmissão para copiar em outro player e player legado HTTP. O botão legacy_url abre http://legacy.gradetv.ne"},{"name":"producer_services","description":"Oferta de transmissão autorizada sob consulta: informações e contatos para produtores. Não ativa streams. Somente informações e captação de interesse. Não provi"},{"name":"report_play","description":"Relata se um canal tocou (ok=true) ou não (ok=false + code). Navegador, SO e país saem do pedido, não do corpo. O primeiro relato desse resultado no dia devolve"},{"name":"play_reports","description":"Relatos crus de um canal, com endereço — só operador (METRICS_TOKEN). Use para investigar um canal específico. Nos relatos atuais, o campo `ip` contém um identi"},{"name":"channel_health","description":"Saúde comunitária do canal: taxa de sucesso, motivos de falha e ambientes afetados. É o que separa 'o canal está fora do ar' de 'o canal está bloqueado no seu p"},{"name":"list_favorites","description":"Favoritos do dono. Exibe somente canais disponíveis no catálogo."},{"name":"add_favorite","description":"Favorita um canal. Repetir não soma: o contador público conta pessoas, não cliques."},{"name":"remove_favorite","description":"Desfavorita o canal e devolve o ponto ao contador público."},{"name":"list_comments","description":"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 apaga"},{"name":"post_comment","description":"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 men"},{"name":"delete_comment","description":"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."},{"name":"chat_history","description":"Últimas mensagens da sala de um canal (sem WebSocket)."},{"name":"chat_send","description":"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 "},{"name":"chat_pass","description":"Passe mensal do chat ($0.10 / 30 dias) do convidado que fala no chat. Sem pagamento → 402. Passe já válido devolve 200 sem cobrar de novo — dá para chamar antes"},{"name":"me","description":"Conta da sessão (cookie repassado pelo cliente MCP): e-mail e tamanho da biblioteca da conta. A conta é a da biblioteca de conta; `user.id` é o id da conta, e é"},{"name":"billing","description":"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 cha"},{"name":"contact","description":"Fale com quem faz o produto: dúvida, ou proposta de patrocínio/parceria/anúncio. Grátis, sem captcha nem pagamento; uma mensagem a cada 10 s por rede (a que che"},{"name":"pricing","description":"Current public prices and free allowances; no charge."}],"toolCount":45,"toolsHash":"69c0d13bc8be179ba10c255e62b68856539d215e4f786b005c04848d9bc5d9a8","serverName":"Grade","capabilities":["tools"],"serverVersion":"73acb116","protocolVersion":"2025-06-18"}},{"at":"2026-10-10T03:25:40.851Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":606,"error":null,"detail":{"tools":[{"name":"list_programacao","description":"Canais com programação coletada, até 48 por página."},{"name":"get_programacao","description":"Última programação disponível do canal e até 20 datas do histórico."},{"name":"get_programacao_dia","description":"Programação preservada de um canal em um dia específico."},{"name":"api_index","description":"Índice auto-descrito da API inteira, com os idiomas e as páginas HTML de cada um."},{"name":"health","description":"Liveness e o commit publicado agora — é como o smoke espera o próprio deploy."},{"name":"geo","description":"País e idioma sugeridos para quem está chamando. Sem país detectado pela borda, sugere BR com `source: \"fallback\"`; `detected` diz o que a borda viu."},{"name":"list_countries","description":"Países do catálogo com contagem playable e URL da bandeira (kind=radio conta estações)."},{"name":"list_tags","description":"Tags das estações de rádio tocáveis, com contagem; opcionalmente por país."},{"name":"search_channels","description":"Busca canais públicos (filtros: q, country, category, language, network, quality, playable; kind=radio para estações de rádio, tag para tag de rádio; sort=score"},{"name":"list_languages","description":"Idiomas que têm canal tocável, com a contagem de cada um."},{"name":"list_networks","description":"Redes e emissoras que têm canal tocável, com a contagem."},{"name":"list_qualities","description":"Qualidades distintas encontradas nos streams do catálogo (em rádio, codec e bitrate)."},{"name":"list_subdivisions","description":"Estados e províncias que têm canal tocável."},{"name":"list_cities","description":"Cidades que têm canal tocável, filtráveis por país e por estado."},{"name":"get_channel","description":"Ficha completa de um canal, com os streams já apontando para o nosso hop."},{"name":"get_channel_guide","description":"Programação de hoje do canal (grabada por nós): agora, a seguir e a lista. Disponível nos canais com guia (`guide=1`), com validade de até dois dias. Confira a "},{"name":"create_guest","description":"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/"},{"name":"get_library","description":"A galeria inteira do dono: pastas, sub-abas, canais e as URLs de feed de cada nível."},{"name":"create_category","description":"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."},{"name":"create_group","description":"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` depoi"},{"name":"add_item","description":"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"},{"name":"get_history","description":"Histórico de canais assistidos pelo dono. Exibe somente canais disponíveis no catálogo."},{"name":"record_watch","description":"Registra um canal assistido no histórico do dono."},{"name":"forget_watch","description":"Tira um canal do histórico do dono."},{"name":"clear_history","description":"Limpa o histórico inteiro do dono, de uma vez."},{"name":"tv_state","description":"Consulta a ativação da rede da TV pelo código de seis dígitos."},{"name":"tv_pass","description":"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"},{"name":"legacy_stream","description":"Metadados públicos: site oficial do canal, URL da transmissão para copiar em outro player e player legado HTTP. O botão legacy_url abre http://legacy.gradetv.ne"},{"name":"producer_services","description":"Oferta de transmissão autorizada sob consulta: informações e contatos para produtores. Não ativa streams. Somente informações e captação de interesse. Não provi"},{"name":"report_play","description":"Relata se um canal tocou (ok=true) ou não (ok=false + code). Navegador, SO e país saem do pedido, não do corpo. O primeiro relato desse resultado no dia devolve"},{"name":"play_reports","description":"Relatos crus de um canal, com endereço — só operador (METRICS_TOKEN). Use para investigar um canal específico. Nos relatos atuais, o campo `ip` contém um identi"},{"name":"channel_health","description":"Saúde comunitária do canal: taxa de sucesso, motivos de falha e ambientes afetados. É o que separa 'o canal está fora do ar' de 'o canal está bloqueado no seu p"},{"name":"list_favorites","description":"Favoritos do dono. Exibe somente canais disponíveis no catálogo."},{"name":"add_favorite","description":"Favorita um canal. Repetir não soma: o contador público conta pessoas, não cliques."},{"name":"remove_favorite","description":"Desfavorita o canal e devolve o ponto ao contador público."},{"name":"list_comments","description":"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 apaga"},{"name":"post_comment","description":"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 men"},{"name":"delete_comment","description":"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."},{"name":"chat_history","description":"Últimas mensagens da sala de um canal (sem WebSocket)."},{"name":"chat_send","description":"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 "},{"name":"chat_pass","description":"Passe mensal do chat ($0.10 / 30 dias) do convidado que fala no chat. Sem pagamento → 402. Passe já válido devolve 200 sem cobrar de novo — dá para chamar antes"},{"name":"me","description":"Conta da sessão (cookie repassado pelo cliente MCP): e-mail e tamanho da biblioteca da conta. A conta é a da biblioteca de conta; `user.id` é o id da conta, e é"},{"name":"billing","description":"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 cha"},{"name":"contact","description":"Fale com quem faz o produto: dúvida, ou proposta de patrocínio/parceria/anúncio. Grátis, sem captcha nem pagamento; uma mensagem a cada 10 s por rede (a que che"},{"name":"pricing","description":"Current public prices and free allowances; no charge."}],"toolCount":45,"toolsHash":"69c0d13bc8be179ba10c255e62b68856539d215e4f786b005c04848d9bc5d9a8","serverName":"Grade","capabilities":["tools"],"serverVersion":"73acb116","protocolVersion":"2025-06-18"}},{"at":"2026-10-09T20:29:36.851Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":214,"error":null,"detail":{"tools":[{"name":"list_programacao","description":"Canais com programação coletada, até 48 por página."},{"name":"get_programacao","description":"Última programação disponível do canal e até 20 datas do histórico."},{"name":"get_programacao_dia","description":"Programação preservada de um canal em um dia específico."},{"name":"api_index","description":"Índice auto-descrito da API inteira, com os idiomas e as páginas HTML de cada um."},{"name":"health","description":"Liveness e o commit publicado agora — é como o smoke espera o próprio deploy."},{"name":"geo","description":"País e idioma sugeridos para quem está chamando. Sem país detectado pela borda, sugere BR com `source: \"fallback\"`; `detected` diz o que a borda viu."},{"name":"list_countries","description":"Países do catálogo com contagem playable e URL da bandeira (kind=radio conta estações)."},{"name":"list_tags","description":"Tags das estações de rádio tocáveis, com contagem; opcionalmente por país."},{"name":"search_channels","description":"Busca canais públicos (filtros: q, country, category, language, network, quality, playable; kind=radio para estações de rádio, tag para tag de rádio; sort=score"},{"name":"list_languages","description":"Idiomas que têm canal tocável, com a contagem de cada um."},{"name":"list_networks","description":"Redes e emissoras que têm canal tocável, com a contagem."},{"name":"list_qualities","description":"Qualidades distintas encontradas nos streams do catálogo (em rádio, codec e bitrate)."},{"name":"list_subdivisions","description":"Estados e províncias que têm canal tocável."},{"name":"list_cities","description":"Cidades que têm canal tocável, filtráveis por país e por estado."},{"name":"get_channel","description":"Ficha completa de um canal, com os streams já apontando para o nosso hop."},{"name":"get_channel_guide","description":"Programação de hoje do canal (grabada por nós): agora, a seguir e a lista. Disponível nos canais com guia (`guide=1`), com validade de até dois dias. Confira a "},{"name":"create_guest","description":"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/"},{"name":"get_library","description":"A galeria inteira do dono: pastas, sub-abas, canais e as URLs de feed de cada nível."},{"name":"create_category","description":"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."},{"name":"create_group","description":"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` depoi"},{"name":"add_item","description":"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"},{"name":"get_history","description":"Histórico de canais assistidos pelo dono. Exibe somente canais disponíveis no catálogo."},{"name":"record_watch","description":"Registra um canal assistido no histórico do dono."},{"name":"forget_watch","description":"Tira um canal do histórico do dono."},{"name":"clear_history","description":"Limpa o histórico inteiro do dono, de uma vez."},{"name":"tv_state","description":"Consulta a ativação da rede da TV pelo código de seis dígitos."},{"name":"tv_pass","description":"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"},{"name":"legacy_stream","description":"Metadados públicos: site oficial do canal, URL da transmissão para copiar em outro player e player legado HTTP. O botão legacy_url abre http://legacy.gradetv.ne"},{"name":"producer_services","description":"Oferta de transmissão autorizada sob consulta: informações e contatos para produtores. Não ativa streams. Somente informações e captação de interesse. Não provi"},{"name":"report_play","description":"Relata se um canal tocou (ok=true) ou não (ok=false + code). Navegador, SO e país saem do pedido, não do corpo. O primeiro relato desse resultado no dia devolve"},{"name":"play_reports","description":"Relatos crus de um canal, com endereço — só operador (METRICS_TOKEN). Use para investigar um canal específico. Nos relatos atuais, o campo `ip` contém um identi"},{"name":"channel_health","description":"Saúde comunitária do canal: taxa de sucesso, motivos de falha e ambientes afetados. É o que separa 'o canal está fora do ar' de 'o canal está bloqueado no seu p"},{"name":"list_favorites","description":"Favoritos do dono. Exibe somente canais disponíveis no catálogo."},{"name":"add_favorite","description":"Favorita um canal. Repetir não soma: o contador público conta pessoas, não cliques."},{"name":"remove_favorite","description":"Desfavorita o canal e devolve o ponto ao contador público."},{"name":"list_comments","description":"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 apaga"},{"name":"post_comment","description":"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 men"},{"name":"delete_comment","description":"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."},{"name":"chat_history","description":"Últimas mensagens da sala de um canal (sem WebSocket)."},{"name":"chat_send","description":"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 "},{"name":"chat_pass","description":"Passe mensal do chat ($0.10 / 30 dias) do convidado que fala no chat. Sem pagamento → 402. Passe já válido devolve 200 sem cobrar de novo — dá para chamar antes"},{"name":"me","description":"Conta da sessão (cookie repassado pelo cliente MCP): e-mail e tamanho da biblioteca da conta. A conta é a da biblioteca de conta; `user.id` é o id da conta, e é"},{"name":"billing","description":"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 cha"},{"name":"contact","description":"Fale com quem faz o produto: dúvida, ou proposta de patrocínio/parceria/anúncio. Grátis, sem captcha nem pagamento; uma mensagem a cada 10 s por rede (a que che"},{"name":"pricing","description":"Current public prices and free allowances; no charge."}],"toolCount":45,"toolsHash":"69c0d13bc8be179ba10c255e62b68856539d215e4f786b005c04848d9bc5d9a8","serverName":"Grade","capabilities":["tools"],"serverVersion":"76c3edbb","protocolVersion":"2025-06-18"}},{"at":"2026-10-09T13:31:45.060Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":204,"error":null,"detail":{"tools":[{"name":"list_programacao","description":"Canais com programação coletada, até 48 por página."},{"name":"get_programacao","description":"Última programação disponível do canal e até 20 datas do histórico."},{"name":"get_programacao_dia","description":"Programação preservada de um canal em um dia específico."},{"name":"api_index","description":"Índice auto-descrito da API inteira, com os idiomas e as páginas HTML de cada um."},{"name":"health","description":"Liveness e o commit publicado agora — é como o smoke espera o próprio deploy."},{"name":"geo","description":"País e idioma sugeridos para quem está chamando. Sem país detectado pela borda, sugere BR com `source: \"fallback\"`; `detected` diz o que a borda viu."},{"name":"list_countries","description":"Países do catálogo com contagem playable e URL da bandeira (kind=radio conta estações)."},{"name":"list_tags","description":"Tags das estações de rádio tocáveis, com contagem; opcionalmente por país."},{"name":"search_channels","description":"Busca canais públicos (filtros: q, country, category, language, network, quality, playable; kind=radio para estações de rádio, tag para tag de rádio; sort=score"},{"name":"list_languages","description":"Idiomas que têm canal tocável, com a contagem de cada um."},{"name":"list_networks","description":"Redes e emissoras que têm canal tocável, com a contagem."},{"name":"list_qualities","description":"Qualidades distintas encontradas nos streams do catálogo (em rádio, codec e bitrate)."},{"name":"list_subdivisions","description":"Estados e províncias que têm canal tocável."},{"name":"list_cities","description":"Cidades que têm canal tocável, filtráveis por país e por estado."},{"name":"get_channel","description":"Ficha completa de um canal, com os streams já apontando para o nosso hop."},{"name":"get_channel_guide","description":"Programação de hoje do canal (grabada por nós): agora, a seguir e a lista. Disponível nos canais com guia (`guide=1`), com validade de até dois dias. Confira a "},{"name":"create_guest","description":"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/"},{"name":"get_library","description":"A galeria inteira do dono: pastas, sub-abas, canais e as URLs de feed de cada nível."},{"name":"create_category","description":"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."},{"name":"create_group","description":"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` depoi"},{"name":"add_item","description":"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"},{"name":"get_history","description":"Histórico de canais assistidos pelo dono. Exibe somente canais disponíveis no catálogo."},{"name":"record_watch","description":"Registra um canal assistido no histórico do dono."},{"name":"forget_watch","description":"Tira um canal do histórico do dono."},{"name":"clear_history","description":"Limpa o histórico inteiro do dono, de uma vez."},{"name":"tv_state","description":"Consulta a ativação da rede da TV pelo código de seis dígitos."},{"name":"tv_pass","description":"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"},{"name":"legacy_stream","description":"Metadados públicos: site oficial do canal, URL da transmissão para copiar em outro player e player legado HTTP. O botão legacy_url abre http://legacy.gradetv.ne"},{"name":"producer_services","description":"Oferta de transmissão autorizada sob consulta: informações e contatos para produtores. Não ativa streams. Somente informações e captação de interesse. Não provi"},{"name":"report_play","description":"Relata se um canal tocou (ok=true) ou não (ok=false + code). Navegador, SO e país saem do pedido, não do corpo. O primeiro relato desse resultado no dia devolve"},{"name":"play_reports","description":"Relatos crus de um canal, com endereço — só operador (METRICS_TOKEN). Use para investigar um canal específico. Nos relatos atuais, o campo `ip` contém um identi"},{"name":"channel_health","description":"Saúde comunitária do canal: taxa de sucesso, motivos de falha e ambientes afetados. É o que separa 'o canal está fora do ar' de 'o canal está bloqueado no seu p"},{"name":"list_favorites","description":"Favoritos do dono. Exibe somente canais disponíveis no catálogo."},{"name":"add_favorite","description":"Favorita um canal. Repetir não soma: o contador público conta pessoas, não cliques."},{"name":"remove_favorite","description":"Desfavorita o canal e devolve o ponto ao contador público."},{"name":"list_comments","description":"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 apaga"},{"name":"post_comment","description":"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 men"},{"name":"delete_comment","description":"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."},{"name":"chat_history","description":"Últimas mensagens da sala de um canal (sem WebSocket)."},{"name":"chat_send","description":"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 "},{"name":"chat_pass","description":"Passe mensal do chat ($0.10 / 30 dias) do convidado que fala no chat. Sem pagamento → 402. Passe já válido devolve 200 sem cobrar de novo — dá para chamar antes"},{"name":"me","description":"Conta da sessão (cookie repassado pelo cliente MCP): e-mail e tamanho da biblioteca da conta. A conta é a da biblioteca de conta; `user.id` é o id da conta, e é"},{"name":"billing","description":"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 cha"},{"name":"contact","description":"Fale com quem faz o produto: dúvida, ou proposta de patrocínio/parceria/anúncio. Grátis, sem captcha nem pagamento; uma mensagem a cada 10 s por rede (a que che"},{"name":"pricing","description":"Current public prices and free allowances; no charge."}],"toolCount":45,"toolsHash":"69c0d13bc8be179ba10c255e62b68856539d215e4f786b005c04848d9bc5d9a8","serverName":"Grade","capabilities":["tools"],"serverVersion":"af2bd5ec","protocolVersion":"2025-06-18"}},{"at":"2026-10-09T07:24:48.865Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":214,"error":null,"detail":{"tools":[{"name":"list_programacao","description":"Canais com programação coletada, até 48 por página."},{"name":"get_programacao","description":"Última programação disponível do canal e até 20 datas do histórico."},{"name":"get_programacao_dia","description":"Programação preservada de um canal em um dia específico."},{"name":"api_index","description":"Índice auto-descrito da API inteira, com os idiomas e as páginas HTML de cada um."},{"name":"health","description":"Liveness e o commit publicado agora — é como o smoke espera o próprio deploy."},{"name":"geo","description":"País e idioma sugeridos para quem está chamando. Sem país detectado pela borda, sugere BR com `source: \"fallback\"`; `detected` diz o que a borda viu."},{"name":"list_countries","description":"Países do catálogo com contagem playable e URL da bandeira (kind=radio conta estações)."},{"name":"list_tags","description":"Tags das estações de rádio tocáveis, com contagem; opcionalmente por país."},{"name":"search_channels","description":"Busca canais públicos (filtros: q, country, category, language, network, quality, playable; kind=radio para estações de rádio, tag para tag de rádio; sort=score"},{"name":"list_languages","description":"Idiomas que têm canal tocável, com a contagem de cada um."},{"name":"list_networks","description":"Redes e emissoras que têm canal tocável, com a contagem."},{"name":"list_qualities","description":"Qualidades distintas encontradas nos streams do catálogo (em rádio, codec e bitrate)."},{"name":"list_subdivisions","description":"Estados e províncias que têm canal tocável."},{"name":"list_cities","description":"Cidades que têm canal tocável, filtráveis por país e por estado."},{"name":"get_channel","description":"Ficha completa de um canal, com os streams já apontando para o nosso hop."},{"name":"get_channel_guide","description":"Programação de hoje do canal (grabada por nós): agora, a seguir e a lista. Disponível nos canais com guia (`guide=1`), com validade de até dois dias. Confira a "},{"name":"create_guest","description":"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/"},{"name":"get_library","description":"A galeria inteira do dono: pastas, sub-abas, canais e as URLs de feed de cada nível."},{"name":"create_category","description":"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."},{"name":"create_group","description":"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` depoi"},{"name":"add_item","description":"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"},{"name":"get_history","description":"Histórico de canais assistidos pelo dono. Exibe somente canais disponíveis no catálogo."},{"name":"record_watch","description":"Registra um canal assistido no histórico do dono."},{"name":"forget_watch","description":"Tira um canal do histórico do dono."},{"name":"clear_history","description":"Limpa o histórico inteiro do dono, de uma vez."},{"name":"tv_state","description":"Consulta a ativação da rede da TV pelo código de seis dígitos."},{"name":"tv_pass","description":"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"},{"name":"legacy_stream","description":"Metadados públicos: site oficial do canal, URL da transmissão para copiar em outro player e player legado HTTP. O botão legacy_url abre http://legacy.gradetv.ne"},{"name":"producer_services","description":"Oferta de transmissão autorizada sob consulta: informações e contatos para produtores. Não ativa streams. Somente informações e captação de interesse. Não provi"},{"name":"report_play","description":"Relata se um canal tocou (ok=true) ou não (ok=false + code). Navegador, SO e país saem do pedido, não do corpo. O primeiro relato desse resultado no dia devolve"},{"name":"play_reports","description":"Relatos crus de um canal, com endereço — só operador (METRICS_TOKEN). Use para investigar um canal específico. Nos relatos atuais, o campo `ip` contém um identi"},{"name":"channel_health","description":"Saúde comunitária do canal: taxa de sucesso, motivos de falha e ambientes afetados. É o que separa 'o canal está fora do ar' de 'o canal está bloqueado no seu p"},{"name":"list_favorites","description":"Favoritos do dono. Exibe somente canais disponíveis no catálogo."},{"name":"add_favorite","description":"Favorita um canal. Repetir não soma: o contador público conta pessoas, não cliques."},{"name":"remove_favorite","description":"Desfavorita o canal e devolve o ponto ao contador público."},{"name":"list_comments","description":"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 apaga"},{"name":"post_comment","description":"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 men"},{"name":"delete_comment","description":"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."},{"name":"chat_history","description":"Últimas mensagens da sala de um canal (sem WebSocket)."},{"name":"chat_send","description":"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 "},{"name":"chat_pass","description":"Passe mensal do chat ($0.10 / 30 dias) do convidado que fala no chat. Sem pagamento → 402. Passe já válido devolve 200 sem cobrar de novo — dá para chamar antes"},{"name":"me","description":"Conta da sessão (cookie repassado pelo cliente MCP): e-mail e tamanho da biblioteca da conta. A conta é a da biblioteca de conta; `user.id` é o id da conta, e é"},{"name":"billing","description":"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 cha"},{"name":"contact","description":"Fale com quem faz o produto: dúvida, ou proposta de patrocínio/parceria/anúncio. Grátis, sem captcha nem pagamento; uma mensagem a cada 10 s por rede (a que che"},{"name":"pricing","description":"Current public prices and free allowances; no charge."}],"toolCount":45,"toolsHash":"69c0d13bc8be179ba10c255e62b68856539d215e4f786b005c04848d9bc5d9a8","serverName":"Grade","capabilities":["tools"],"serverVersion":"dd928462","protocolVersion":"2025-06-18"}},{"at":"2026-10-09T00:24:45.512Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":204,"error":null,"detail":{"tools":[{"name":"list_programacao","description":"Canais com programação coletada, até 48 por página."},{"name":"get_programacao","description":"Última programação disponível do canal e até 20 datas do histórico."},{"name":"get_programacao_dia","description":"Programação preservada de um canal em um dia específico."},{"name":"api_index","description":"Índice auto-descrito da API inteira, com os idiomas e as páginas HTML de cada um."},{"name":"health","description":"Liveness e o commit publicado agora — é como o smoke espera o próprio deploy."},{"name":"geo","description":"País e idioma sugeridos para quem está chamando. Sem país detectado pela borda, sugere BR com `source: \"fallback\"`; `detected` diz o que a borda viu."},{"name":"list_countries","description":"Países do catálogo com contagem playable e URL da bandeira (kind=radio conta estações)."},{"name":"list_tags","description":"Tags das estações de rádio tocáveis, com contagem; opcionalmente por país."},{"name":"search_channels","description":"Busca canais públicos (filtros: q, country, category, language, network, quality, playable; kind=radio para estações de rádio, tag para tag de rádio; sort=score"},{"name":"list_languages","description":"Idiomas que têm canal tocável, com a contagem de cada um."},{"name":"list_networks","description":"Redes e emissoras que têm canal tocável, com a contagem."},{"name":"list_qualities","description":"Qualidades distintas encontradas nos streams do catálogo (em rádio, codec e bitrate)."},{"name":"list_subdivisions","description":"Estados e províncias que têm canal tocável."},{"name":"list_cities","description":"Cidades que têm canal tocável, filtráveis por país e por estado."},{"name":"get_channel","description":"Ficha completa de um canal, com os streams já apontando para o nosso hop."},{"name":"get_channel_guide","description":"Programação de hoje do canal (grabada por nós): agora, a seguir e a lista. Disponível nos canais com guia (`guide=1`), com validade de até dois dias. Confira a "},{"name":"create_guest","description":"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/"},{"name":"get_library","description":"A galeria inteira do dono: pastas, sub-abas, canais e as URLs de feed de cada nível."},{"name":"create_category","description":"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."},{"name":"create_group","description":"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` depoi"},{"name":"add_item","description":"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"},{"name":"get_history","description":"Histórico de canais assistidos pelo dono. Exibe somente canais disponíveis no catálogo."},{"name":"record_watch","description":"Registra um canal assistido no histórico do dono."},{"name":"forget_watch","description":"Tira um canal do histórico do dono."},{"name":"clear_history","description":"Limpa o histórico inteiro do dono, de uma vez."},{"name":"tv_state","description":"Consulta a ativação da rede da TV pelo código de seis dígitos."},{"name":"tv_pass","description":"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"},{"name":"legacy_stream","description":"Metadados públicos: site oficial do canal, URL da transmissão para copiar em outro player e player legado HTTP. O botão legacy_url abre http://legacy.gradetv.ne"},{"name":"producer_services","description":"Oferta de transmissão autorizada sob consulta: informações e contatos para produtores. Não ativa streams. Somente informações e captação de interesse. Não provi"},{"name":"report_play","description":"Relata se um canal tocou (ok=true) ou não (ok=false + code). Navegador, SO e país saem do pedido, não do corpo. O primeiro relato desse resultado no dia devolve"},{"name":"play_reports","description":"Relatos crus de um canal, com endereço — só operador (METRICS_TOKEN). Use para investigar um canal específico. Nos relatos atuais, o campo `ip` contém um identi"},{"name":"channel_health","description":"Saúde comunitária do canal: taxa de sucesso, motivos de falha e ambientes afetados. É o que separa 'o canal está fora do ar' de 'o canal está bloqueado no seu p"},{"name":"list_favorites","description":"Favoritos do dono. Exibe somente canais disponíveis no catálogo."},{"name":"add_favorite","description":"Favorita um canal. Repetir não soma: o contador público conta pessoas, não cliques."},{"name":"remove_favorite","description":"Desfavorita o canal e devolve o ponto ao contador público."},{"name":"list_comments","description":"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 apaga"},{"name":"post_comment","description":"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 men"},{"name":"delete_comment","description":"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."},{"name":"chat_history","description":"Últimas mensagens da sala de um canal (sem WebSocket)."},{"name":"chat_send","description":"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 "},{"name":"chat_pass","description":"Passe mensal do chat ($0.10 / 30 dias) do convidado que fala no chat. Sem pagamento → 402. Passe já válido devolve 200 sem cobrar de novo — dá para chamar antes"},{"name":"me","description":"Conta da sessão (cookie repassado pelo cliente MCP): e-mail e tamanho da biblioteca da conta. A conta é a da biblioteca de conta; `user.id` é o id da conta, e é"},{"name":"billing","description":"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 cha"},{"name":"contact","description":"Fale com quem faz o produto: dúvida, ou proposta de patrocínio/parceria/anúncio. Grátis, sem captcha nem pagamento; uma mensagem a cada 10 s por rede (a que che"},{"name":"pricing","description":"Current public prices and free allowances; no charge."}],"toolCount":45,"toolsHash":"69c0d13bc8be179ba10c255e62b68856539d215e4f786b005c04848d9bc5d9a8","serverName":"Grade","capabilities":["tools"],"serverVersion":"c1fd080b","protocolVersion":"2025-06-18"}}],"tools":[{"name":"list_programacao","description":"Canais com programação coletada, até 48 por página."},{"name":"get_programacao","description":"Última programação disponível do canal e até 20 datas do histórico."},{"name":"get_programacao_dia","description":"Programação preservada de um canal em um dia específico."},{"name":"api_index","description":"Índice auto-descrito da API inteira, com os idiomas e as páginas HTML de cada um."},{"name":"health","description":"Liveness e o commit publicado agora — é como o smoke espera o próprio deploy."},{"name":"geo","description":"País e idioma sugeridos para quem está chamando. Sem país detectado pela borda, sugere BR com `source: \"fallback\"`; `detected` diz o que a borda viu."},{"name":"list_countries","description":"Países do catálogo com contagem playable e URL da bandeira (kind=radio conta estações)."},{"name":"list_tags","description":"Tags das estações de rádio tocáveis, com contagem; opcionalmente por país."},{"name":"search_channels","description":"Busca canais públicos (filtros: q, country, category, language, network, quality, playable; kind=radio para estações de rádio, tag para tag de rádio; sort=score"},{"name":"list_languages","description":"Idiomas que têm canal tocável, com a contagem de cada um."},{"name":"list_networks","description":"Redes e emissoras que têm canal tocável, com a contagem."},{"name":"list_qualities","description":"Qualidades distintas encontradas nos streams do catálogo (em rádio, codec e bitrate)."},{"name":"list_subdivisions","description":"Estados e províncias que têm canal tocável."},{"name":"list_cities","description":"Cidades que têm canal tocável, filtráveis por país e por estado."},{"name":"get_channel","description":"Ficha completa de um canal, com os streams já apontando para o nosso hop."},{"name":"get_channel_guide","description":"Programação de hoje do canal (grabada por nós): agora, a seguir e a lista. Disponível nos canais com guia (`guide=1`), com validade de até dois dias. Confira a "},{"name":"create_guest","description":"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/"},{"name":"get_library","description":"A galeria inteira do dono: pastas, sub-abas, canais e as URLs de feed de cada nível."},{"name":"create_category","description":"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."},{"name":"create_group","description":"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` depoi"},{"name":"add_item","description":"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"},{"name":"get_history","description":"Histórico de canais assistidos pelo dono. Exibe somente canais disponíveis no catálogo."},{"name":"record_watch","description":"Registra um canal assistido no histórico do dono."},{"name":"forget_watch","description":"Tira um canal do histórico do dono."},{"name":"clear_history","description":"Limpa o histórico inteiro do dono, de uma vez."},{"name":"tv_state","description":"Consulta a ativação da rede da TV pelo código de seis dígitos."},{"name":"tv_pass","description":"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"},{"name":"legacy_stream","description":"Metadados públicos: site oficial do canal, URL da transmissão para copiar em outro player e player legado HTTP. O botão legacy_url abre http://legacy.gradetv.ne"},{"name":"producer_services","description":"Oferta de transmissão autorizada sob consulta: informações e contatos para produtores. Não ativa streams. Somente informações e captação de interesse. Não provi"},{"name":"report_play","description":"Relata se um canal tocou (ok=true) ou não (ok=false + code). Navegador, SO e país saem do pedido, não do corpo. O primeiro relato desse resultado no dia devolve"},{"name":"play_reports","description":"Relatos crus de um canal, com endereço — só operador (METRICS_TOKEN). Use para investigar um canal específico. Nos relatos atuais, o campo `ip` contém um identi"},{"name":"channel_health","description":"Saúde comunitária do canal: taxa de sucesso, motivos de falha e ambientes afetados. É o que separa 'o canal está fora do ar' de 'o canal está bloqueado no seu p"},{"name":"list_favorites","description":"Favoritos do dono. Exibe somente canais disponíveis no catálogo."},{"name":"add_favorite","description":"Favorita um canal. Repetir não soma: o contador público conta pessoas, não cliques."},{"name":"remove_favorite","description":"Desfavorita o canal e devolve o ponto ao contador público."},{"name":"list_comments","description":"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 apaga"},{"name":"post_comment","description":"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 men"},{"name":"delete_comment","description":"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."},{"name":"chat_history","description":"Últimas mensagens da sala de um canal (sem WebSocket)."},{"name":"chat_send","description":"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 "},{"name":"chat_pass","description":"Passe mensal do chat ($0.10 / 30 dias) do convidado que fala no chat. Sem pagamento → 402. Passe já válido devolve 200 sem cobrar de novo — dá para chamar antes"},{"name":"me","description":"Conta da sessão (cookie repassado pelo cliente MCP): e-mail e tamanho da biblioteca da conta. A conta é a da biblioteca de conta; `user.id` é o id da conta, e é"},{"name":"billing","description":"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 cha"},{"name":"contact","description":"Fale com quem faz o produto: dúvida, ou proposta de patrocínio/parceria/anúncio. Grátis, sem captcha nem pagamento; uma mensagem a cada 10 s por rede (a que che"},{"name":"pricing","description":"Current public prices and free allowances; no charge."}],"package":null,"toolSurface":{"id":"ts_zr7pfu3muuhb","endpointId":"ep_g2sazdkuxe8g","hash":"f973b4f57147a1fcc9e1e706f62cceec20c9a3ab4ff5026ebe5e178d5b593c6d","toolCount":45,"serverName":"Grade","serverVersion":"b6e04a8f","protocolVersion":"2025-06-18","firstSeenAt":"2026-10-10T16:32:48.362Z","lastSeenAt":"2026-10-11T13:23:56.968Z","observations":4,"toolNames":["list_programacao","get_programacao","get_programacao_dia","api_index","health","geo","list_countries","list_tags","search_channels","list_languages","list_networks","list_qualities","list_subdivisions","list_cities","get_channel","get_channel_guide","create_guest","get_library","create_category","create_group","add_item","get_history","record_watch","forget_watch","clear_history","tv_state","tv_pass","legacy_stream","producer_services","report_play","play_reports","channel_health","list_favorites","add_favorite","remove_favorite","list_comments","post_comment","delete_comment","chat_history","chat_send","chat_pass","me","billing","contact","pricing"],"distinctSurfaces":16},"endpointFacts":[{"id":"ep_g2sazdkuxe8g","url":"https://gradetv.net/mcp","type":"mcp_streamable_http","factsCheckedAt":"2026-10-10T23:21:21.043Z","auth":{"observedAt":"2026-10-10T23:21:21.251Z","authRequired":false,"scheme":null,"resourceMetadata":null,"authorizationServer":null,"conformance":{"dpop":false,"rfc8414":false,"rfc9728":false,"pkceS256":false,"clientIdMetadataDocument":false,"dynamicClientRegistration":false}},"tls":{"observedAt":"2026-10-10T23:21:21.655Z","protocol":"TLSv1.3","chainValid":true,"chainError":null,"hostMatches":true,"subject":"gradetv.net","issuer":{"commonName":"YE2","organization":"Let's Encrypt"},"validFrom":"2026-09-23T02:04:46.000Z","validTo":"2026-12-22T02:04:45.000Z","daysToExpiry":71,"sanCount":3,"fingerprint256":"D4:FB:D7:9F:F5:EC:D0:2E:2F:0C:2C:E3:D4:D9:75:62:A4:E0:80:68:EE:3A:6A:72:6F:D1:83:C0:F1:82:65:70"}}]},"verification":{"claimed":false,"claimedAt":null,"proofs":[]},"provenance":{"sources":[{"source":"mcp_registry","key":"net.gradetv/grade","url":"https://registry.modelcontextprotocol.io/v0/servers/net.gradetv%2Fgrade","firstSeenAt":"2026-09-07T08:19:20.556Z","fetchedAt":"2026-10-11T14:22:26.010Z","normalizedAt":"2026-10-11T14:22:26.010Z"}]},"firstSeenAt":"2026-09-07T08:19:20.556Z","updatedAt":"2026-10-11T13:26:47.709Z"}