NegativeEV bet checker

Evalúa cualquier apuesta frente a miles de simulaciones jugada por jugada: probabilidad real de victoria, probabilidades implícitas y ventaja para cada selección.

Documentación

NegativeEV auth.md

NegativeEV (https://negativeev.com) es un verificador de apuestas. Los visitantes anónimos obtienen 10 comprobaciones gratuitas al día; al iniciar sesión, las comprobaciones son ilimitadas (limitadas por un tope por hora). No hay una API de agente separada: los agentes usan los mismos endpoints HTTP que la aplicación web, bajo las mismas cuotas y límites de velocidad. El servidor MCP es la única excepción: se mide con su propio contador, de forma más generosa (ver más abajo).

Cómo funciona la autenticación

Qué admite el servidor de autorización

Leído del propio documento de descubrimiento de Supabase, que es la autoridad; esta lista es una conveniencia, no una segunda fuente de verdad.

  • Concesiones: authorization_code y refresh_token. No existe la concesión client_credentials — consulte la siguiente sección para saber qué significa eso.
  • PKCE es compatible con S256. Úselo: un agente que maneja un navegador no tiene dónde guardar un secreto de cliente.
  • Ámbitos: openid, profile, email, phone, offline_access. Este origen solo necesita openid profile email para identificar al llamante detrás de una comprobación; solicite offline_access solo si realmente necesita actualizar sin supervisión.
  • Los tokens son JWT RS256/HS256/ES256, enviados a este origen como Authorization: Bearer. Un endpoint protegido rechaza uno inválido o caducado con 401 y un encabezado WWW-Authenticate: Bearer que nombra los metadatos del recurso anteriores — vuelva a autenticarse en lugar de reintentar de forma anónima.

Qué significa esto para los agentes

  • Un agente actúa EN NOMBRE DE un usuario con sesión iniciada, siempre. No existe la concesión client_credentials: nada aquí emite un token a un programa que actúa como sí mismo. La única credencial que un programa puede tener es una clave de agente que un miembro acuñó para él (sección siguiente), y esa clave lleva las propias habilitaciones del miembro, no una identidad separada.
  • El registro dinámico de clientes (RFC 7591) es compatible, por lo que un host MCP puede registrarse sin que nadie cree un cliente manualmente. El registro por sí solo no otorga nada — cada autorización la decide el usuario con sesión iniciada en https://negativeev.com/oauth/consent, que nombra al cliente y los ámbitos que solicitó. El registration_endpoint está en los metadatos del servidor de autorización enlazados arriba.
  • La ruta más simple también funciona y no requiere registro: envíe el token de acceso de Supabase de un usuario con sesión iniciada como Authorization: Bearer en las solicitudes (incluidas las llamadas a herramientas MCP), o maneje el sitio en la sesión del navegador del usuario.
  • El acceso anónimo también funciona; la cuota diaria gratuita se mide por dispositivo.

Claves de agente (opcional, solo miembros)

Un miembro con sesión iniciada puede acuñar una clave que lleva las mismas habilitaciones que su sesión web — la misma asignación por hora, el mismo acceso al explorador de simulaciones — para que un agente, un script o un cliente MCP pueda actuar como él sin tener una sesión de Supabase. El acceso anónimo sigue sin clave; una clave nunca es obligatoria.

  • Acuñar: POST https://negativeev.com/keys con un token de acceso de Supabase como Authorization: Bearer y el cuerpo {"name": "<a label>"}. Responde {"id", "name", "prefix", "key", "created_at"}. El key (nev_ seguido de 43 caracteres) se muestra exactamente una vez; solo se almacena su SHA-256.
  • Usar: envíela como Authorization: Bearer nev_… en cualquier solicitud que cubre este documento, incluidas las llamadas a herramientas MCP. Una vez revocada, no autentica nada: las rutas medidas tratan la llamada como anónima, el endpoint MCP la rechaza con 401, y las rutas solo para miembros responden 401.
  • Listar: GET https://negativeev.com/keys — ids, nombres, prefijos y fechas, nunca un texto plano o un hash.
  • Revocar: POST https://negativeev.com/keys/revoke con {"id": "<key id>"}.
  • Una clave no puede acuñar, listar ni revocar claves: esas tres rutas solo aceptan un token de acceso de Supabase, y responden 403 a una clave.

Servidor MCP

Un servidor MCP sin estado (transporte HTTP Streamable) está disponible en POST https://negativeev.com/mcp — tarjeta del servidor en https://negativeev.com/.well-known/mcp/server-card.json

Herramientas: check_bet (calificar una apuesta desde texto — gasta una de las comprobaciones del llamante cuando la califica por completo), get_slate (¿hay una cartelera comprobable ahora mismo — gratis), get_usage (comprobaciones restantes — gratis). Las llamadas a herramientas anónimas obtienen su propia asignación por dispositivo de 100 comprobaciones al día — un contador separado de las 10 de la aplicación web, por lo que el tráfico de agentes nunca consume las comprobaciones gratuitas de un navegador. Envíe un token de acceso de Supabase como Authorization: Bearer en el POST para comprobaciones ilimitadas (limitadas a 1000 por hora).

Ejemplos de indicaciones

Indicaciones que un usuario puede dar a cualquier asistente conectado a MCP para ejercitar las herramientas:

  • "¿Es Shohei Ohtani por más de 1.5 bases totales a -120 una buena apuesta esta noche?" — check_bet la califica contra miles de juegos simulados y devuelve la probabilidad verdadera, la probabilidad implícita del precio y la ventaja.
  • "¿Hay una cartelera de MLB comprobable esta noche?" — get_slate responde por deporte en vivo, gratis, antes de gastar cualquier comprobación.
  • "¿Cuántas comprobaciones de apuestas me quedan hoy?" — get_usage informa la cuota restante y cuándo se libera la siguiente comprobación.
  • "Aquí está mi combinada: Ohtani por más de 0.5 jonrones +280 y la línea de dinero de los Dodgers -150. ¿Vale la pena?" — check_bet valora cada pata y la combinada completa.

Endpoints que los agentes pueden llamar

JSON del mismo origen, con cuota y límite de velocidad, aún no documentado como una API pública estable (las formas pueden cambiar sin aviso):

  • GET /slate — ¿hay una cartelera comprobable ahora mismo?
  • POST /extract — analizar una apuesta desde texto: {"text": "<bet text>"}
  • POST /check — calificar las patas analizadas (envíe los campos /extract devueltos)
  • GET /usage — comprobaciones restantes para el llamante

Una solicitud rechazada (cuota, límite de velocidad, juego iniciado) devuelve un error JSON explicativo. Descubrimiento: /.well-known/api-catalog, /sitemap.xml, y el índice de habilidades de agentes en /.well-known/agent-skills/index.json