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
- El servidor de autorización es Supabase, no este origen. Sus metadatos de descubrimiento OIDC se encuentran en https://bnmlyacvflqcwslhcxua.supabase.co/auth/v1/.well-known/openid-configuration y se reflejan en este origen para descubrimiento: https://negativeev.com/.well-known/openid-configuration y https://negativeev.com/.well-known/oauth-authorization-server
- negativeev.com es el recurso protegido: verifica los JWT emitidos por Supabase
enviados como
Authorization: Bearer <access token>. Metadatos de recurso legibles por máquina (RFC 9728): https://negativeev.com/.well-known/oauth-protected-resource - Los humanos inician sesión con un código de un solo uso por correo electrónico en https://negativeev.com/
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_codeyrefresh_token. No existe la concesiónclient_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 necesitaopenid profile emailpara identificar al llamante detrás de una comprobación; soliciteoffline_accesssolo 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 encabezadoWWW-Authenticate: Bearerque 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_endpointestá 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: Beareren 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/keyscon un token de acceso de Supabase comoAuthorization: Bearery el cuerpo{"name": "<a label>"}. Responde{"id", "name", "prefix", "key", "created_at"}. Elkey(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/revokecon{"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_betla 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_slateresponde por deporte en vivo, gratis, antes de gastar cualquier comprobación. - "¿Cuántas comprobaciones de apuestas me quedan hoy?" —
get_usageinforma 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_betvalora 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/extractdevueltos)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