NegativeEV bet checker

Avalie qualquer aposta contra milhares de simulações de jogo jogada a jogada — probabilidade real de vitória, odds implícitas e vantagem para cada perna.

Documentação

NegativeEV auth.md

NegativeEV (https://negativeev.com) é um verificador de apostas. Visitantes anônimos recebem 10 verificações gratuitas por dia; ao fazer login, as verificações se tornam ilimitadas (limitadas por um teto por hora). Não há uma API de agente separada — agentes usam os mesmos endpoints HTTP do aplicativo web, sob as mesmas cotas e limites de taxa. O servidor MCP é a única exceção: ele é medido em seu próprio contador, de forma mais generosa (veja abaixo).

Como a autenticação funciona

O que o servidor de autorização suporta

Leia o documento de descoberta do próprio Supabase, que é a autoridade; esta lista é uma conveniência, não uma segunda fonte de verdade.

  • Concessões: authorization_code e refresh_token. Não há concessão client_credentials — veja a próxima seção para entender o que isso significa.
  • PKCE é suportado com S256. Use-o: um agente controlando um navegador não tem onde guardar um segredo de cliente.
  • Escopos: openid, profile, email, phone, offline_access. Esta origem precisa apenas de openid profile email para identificar quem está por trás de uma verificação; peça offline_access somente se você realmente precisar atualizar sem supervisão.
  • Tokens são JWTs RS256/HS256/ES256, enviados a esta origem como Authorization: Bearer. Um endpoint protegido recusa um token inválido ou expirado com 401 e um cabeçalho WWW-Authenticate: Bearer nomeando os metadados de recurso acima — reautentique em vez de tentar novamente anonimamente.

O que isso significa para agentes

  • Um agente age EM NOME DE um usuário conectado, sempre. Não há concessão client_credentials: nada aqui emite um token para um programa agindo como ele mesmo. A única credencial que um programa pode ter é uma chave de agente que um membro criou para ele (próxima seção), e essa chave carrega as próprias permissões do membro, não uma identidade separada.
  • O registro dinâmico de cliente (RFC 7591) é suportado, então um host MCP pode se registrar sem que ninguém crie um cliente manualmente. O registro sozinho não concede nada — toda autorização é decidida pelo usuário conectado em https://negativeev.com/oauth/consent,, que nomeia o cliente e os escopos que ele solicitou. O registration_endpoint está nos metadados do servidor de autorização vinculados acima.
  • O caminho mais simples ainda funciona e não requer registro: envie o token de acesso Supabase de um usuário conectado como Authorization: Bearer nas requisições (incluindo chamadas de ferramentas MCP), ou use o site na sessão do navegador do usuário.
  • O acesso anônimo também funciona; a cota diária gratuita é medida por dispositivo.

Chaves de agente (opcional, somente para membros)

Um membro conectado pode criar uma chave que carrega as mesmas permissões que sua sessão web — a mesma cota por hora, o mesmo acesso ao simulador — para que um agente, um script ou um cliente MCP possa agir como ele sem manter uma sessão Supabase. O acesso anônimo permanece sem chave; uma chave nunca é obrigatória.

  • Criar: POST https://negativeev.com/keys com um token de acesso Supabase como Authorization: Bearer e o corpo {"name": "<a label>"}. Responde {"id", "name", "prefix", "key", "created_at"}. O key (nev_ seguido por 43 caracteres) é mostrado apenas uma vez; apenas seu SHA-256 é armazenado.
  • Usar: envie-o como Authorization: Bearer nev_… em qualquer requisição coberta por este documento, incluindo chamadas de ferramentas MCP. Uma vez revogada, ela não autentica nada: as rotas medidas tratam a chamada como anônima, o endpoint MCP a recusa com 401, e as rotas exclusivas para membros respondem 401.
  • Listar: GET https://negativeev.com/keys — ids, nomes, prefixos e datas, nunca um texto simples ou um hash.
  • Revogar: POST https://negativeev.com/keys/revoke com {"id": "<key id>"}.
  • Uma chave não pode criar, listar ou revogar chaves: essas três rotas aceitam apenas um token de acesso Supabase e respondem 403 a uma chave.

Servidor MCP

Um servidor MCP sem estado (transporte HTTP Streamable) está disponível em POST https://negativeev.com/mcp — cartão do servidor em https://negativeev.com/.well-known/mcp/server-card.json

Ferramentas: check_bet (avaliar uma aposta a partir de texto — gasta uma das verificações de quem chama quando avalia completamente), get_slate (existe um quadro verificável agora — gratuita), get_usage (verificações restantes — gratuita). Chamadas de ferramentas anônimas têm sua própria cota por dispositivo de 100 verificações por dia — um contador separado dos 10 do aplicativo web, então o tráfego de agentes nunca consome as verificações gratuitas de um navegador. Envie um token de acesso Supabase como Authorization: Bearer no POST para verificações ilimitadas (limitadas a 1000 por hora).

Exemplos de prompts

Prompts que um usuário pode dar a qualquer assistente conectado a MCP para exercitar as ferramentas:

  • "Shohei Ohtani acima de 1,5 bases totais a -120 é uma boa aposta hoje à noite?" — check_bet avalia contra milhares de jogos simulados e retorna a probabilidade real, a probabilidade implícita do preço e a vantagem.
  • "Existe um quadro verificável de MLB hoje à noite?" — get_slate responde por esporte ao vivo, gratuitamente, antes de qualquer verificação ser gasta.
  • "Quantas verificações de apostas me restam hoje?" — get_usage informa a cota restante e quando a próxima verificação será liberada.
  • "Aqui está minha aposta múltipla: Ohtani acima de 0,5 home runs +280 e moneyline dos Dodgers -150. Vale a pena?" — check_bet precifica cada perna e a múltipla combinada.

Endpoints que agentes podem chamar

JSON de mesma origem, com cota e limite de taxa, ainda não documentado como uma API pública estável (formatos podem mudar sem aviso):

  • GET /slate — existe um quadro verificável agora?
  • POST /extract — analisar uma aposta a partir de texto: {"text": "<bet text>"}
  • POST /check — avaliar as pernas analisadas (envie os campos /extract retornados)
  • GET /usage — verificações restantes para quem chama

Uma requisição recusada (cota, limite de taxa, jogo iniciado) retorna um erro JSON explicativo. Descoberta: /.well-known/api-catalog, /sitemap.xml, e o índice de habilidades de agente em /.well-known/agent-skills/index.json