La API de Tutiplay

MCP

La API de Tutiplay como herramientas para un asistente: Claude, Cursor o cualquier agente que hable Model Context Protocol puede consultar tus jornadas, rellenar y confirmar pronósticos con la misma API key.

Qué es

Un servidor MCP es la forma estándar de dar herramientas a un asistente de IA. En vez de que el modelo construya peticiones HTTP, ve herramientas con nombre, descripción y parámetros —save_forecast, confirm_forecast…— y las usa por ti.

Por debajo llama a la misma API REST con tu API key, así que no puede hacer nada que la key no permita: los permisos, los límites de uso y los errores son exactamente los de la API. Revocar la key en Tutiplay corta al asistente al instante.

Dirección y autenticación

El servidor está en https://api.tutiplay.com/mcp y habla el transporte HTTP de MCP (Streamable HTTP). La autenticación es la misma API key, en la misma cabecera:

http
POST https://api.tutiplay.com/mcp
Authorization: Bearer tp_…

La key se guarda en la configuración del asistente, no en la conversación: el modelo no llega a verla. Si falta o no es válida, el servidor contesta 401 al conectarse, antes de que empiece ninguna conversación.

Con el permiso PLAY el asistente puede confirmar pronósticos, y confirmar consume saldo de tu cuenta. Empieza con una key de READ, súbela cuando hayas comprobado que hace lo esperado, y usa una key distinta para cada asistente.

Configurarlo en tu asistente

El de Claude abre en claude.ai (y Claude Desktop) el diálogo de «Añadir conector personalizado» con el nombre y la dirección ya rellenos. En Autenticación elige «Sin inicio de sesión» —este servidor usa API key, no OAuth, aunque claude.ai detecte un flujo de inicio de sesión y lo marque por defecto— y en Request headers añade Authorization con el valor Bearer tp_… (con el prefijo Bearer y un espacio delante de la key). Los de Cursor y VS Code (Copilot) instalan el servidor con esa cabecera preparada, con un tp_TU_API_KEY donde va la key. Ningún botón de esta página lleva una key dentro — aquí no hay ninguna—; al crear una, la pantalla de «Mi cuenta › API Keys» ofrece estos mismos botones con ella ya puesta, que es el camino corto.

Si claude.ai dice Connection issue · Couldn’t connect to the server, es que quedó seleccionado un inicio de sesión: vuelve a Autenticación, elige «Sin inicio de sesión» y comprueba que la cabecera Authorization empieza por Bearer.

Claude Code:

bash
claude mcp add --transport http tutiplay https://api.tutiplay.com/mcp \
  --header "Authorization: Bearer $TUTIPLAY_API_KEY"

Cursor y otros clientes que aceptan servidores remotos con cabeceras, en su fichero de configuración de MCP:

json
{
  "mcpServers": {
    "tutiplay": {
      "url": "https://api.tutiplay.com/mcp",
      "headers": { "Authorization": "Bearer tp_…" }
    }
  }
}

Clientes que solo arrancan servidores locales, a través del puente mcp-remote:

json
{
  "mcpServers": {
    "tutiplay": {
      "command": "npx",
      "args": ["mcp-remote", "https://api.tutiplay.com/mcp",
               "--header", "Authorization: Bearer ${TUTIPLAY_API_KEY}"],
      "env": { "TUTIPLAY_API_KEY": "tp_…" }
    }
  }
}

Herramientas · 27

Están pensadas para jugar la quiniela, no son una por endpoint. Las de una peña aceptan community, el slug de la peña; sin él, se juega por tu cuenta. Las de datos de fútbol cuentan para los límites de uso; el resto, no.

Esta lista es la que sirve el servidor, y la que tu asistente ve sin que tú tengas que leerla: está aquí para saber qué se le puede pedir. Cada una se abre con lo que hace y sus parámetros.

  • get_accountMi cuenta

    Tu cuenta y tu saldo. Confirmar un pronóstico cobra sus columnas del saldo, así que conviene mirarlo antes.

  • list_communitiesMis peñas

    Las peñas en las que juegas, con su slug y sus reglas. Para jugar por tu cuenta, sin peña, no hace falta ninguna: se omite community.

  • list_roundsJornadas

    Las jornadas de una peña, o las tuyas por tu cuenta, de la más reciente a la más antigua: en qué fase está cada una y si todavía se puede pronosticar (openForForecast). Con played: false salen también las que no se jugaron.

    • community string, opcional — El slug de la peña (bar-manolo, de list_communities). Sin él, lo que juegas por tu cuenta, sin peña.
    • season integer, opcional — Solo las de esta temporada, por el año en que empieza.
    • played boolean, opcional
    • page integer, opcional
  • get_roundUna jornada

    Una jornada de la quiniela, igual para todos: sus fechas, los catorce partidos con el equipo de casa y el de fuera, el signo de cada uno cuando lo hay, el pleno al 15 y el escrutinio. Cada partido dice de qué competición y jornada es. No trae marcadores.

    • season integer — La temporada, por el año en que empieza: 2026 es la 2026/2027.
    • round integer — El número de la jornada de la quiniela en esa temporada.
  • get_round_statusUna jornada en una peña

    Lo que una jornada es para una peña, o para ti por tu cuenta: si se juega, en qué fase está, si todavía se puede pronosticar, el mínimo de columnas de cada pronóstico y las reglas de reparto.

    • community string, opcional — El slug de la peña (bar-manolo, de list_communities). Sin él, lo que juegas por tu cuenta, sin peña.
    • season integer — La temporada, por el año en que empieza: 2026 es la 2026/2027.
    • round integer — El número de la jornada de la quiniela en esa temporada.
  • get_forecastsMis pronósticos

    Tus pronósticos de una jornada en una peña, o por tu cuenta: sus columnas, su pleno al 15, si están confirmados y sus aciertos.

    • community string, opcional — El slug de la peña (bar-manolo, de list_communities). Sin él, lo que juegas por tu cuenta, sin peña.
    • season integer — La temporada, por el año en que empieza: 2026 es la 2026/2027.
    • round integer — El número de la jornada de la quiniela en esa temporada.
  • save_forecastGuardar un pronósticoescribe

    Guarda un pronóstico entero, creándolo si no existía y sustituyendo lo que hubiera. Cada columna son 14 signos en el orden del boleto, cada uno 1, X o 2 (por ejemplo 1X2111X2X1121X). Con confirm: true además lo confirma, lo que COBRA sus columnas del saldo.

    • community string, opcional — El slug de la peña (bar-manolo, de list_communities). Sin él, lo que juegas por tu cuenta, sin peña.
    • season integer — La temporada, por el año en que empieza: 2026 es la 2026/2027.
    • round integer — El número de la jornada de la quiniela en esa temporada.
    • number integer, opcional — Cuál de tus pronósticos de la jornada, desde 1. Donde solo se admite uno, es el 1.
    • columns string[] — Las columnas: 14 signos cada una, 1, X o 2. Un - deja ese partido sin marcar.
    • match15 object, opcional — El pleno al 15. Hace falta para confirmar.
    • confirm boolean, opcional — Si se confirma, que cobra del saldo.
  • confirm_forecastConfirmar un pronósticoescribe

    Confirma un pronóstico tal como está guardado. COBRA sus columnas del saldo. Mientras el plazo siga abierto se puede deshacer con unconfirm_forecast.

    • community string, opcional — El slug de la peña (bar-manolo, de list_communities). Sin él, lo que juegas por tu cuenta, sin peña.
    • season integer — La temporada, por el año en que empieza: 2026 es la 2026/2027.
    • round integer — El número de la jornada de la quiniela en esa temporada.
    • number integer, opcional — Cuál de tus pronósticos de la jornada, desde 1. Donde solo se admite uno, es el 1.
  • unconfirm_forecastDeshacer la confirmaciónescribe

    Deja un pronóstico sin confirmar mientras el plazo siga abierto, y devuelve al saldo lo que se cobró.

    • community string, opcional — El slug de la peña (bar-manolo, de list_communities). Sin él, lo que juegas por tu cuenta, sin peña.
    • season integer — La temporada, por el año en que empieza: 2026 es la 2026/2027.
    • round integer — El número de la jornada de la quiniela en esa temporada.
    • number integer, opcional — Cuál de tus pronósticos de la jornada, desde 1. Donde solo se admite uno, es el 1.
  • delete_forecastQuitar un pronósticoborra

    Quita uno de tus pronósticos de la jornada, siempre que quede otro. Si estaba confirmado devuelve lo cobrado, y los que quedan se renumeran desde 1.

    • community string, opcional — El slug de la peña (bar-manolo, de list_communities). Sin él, lo que juegas por tu cuenta, sin peña.
    • season integer — La temporada, por el año en que empieza: 2026 es la 2026/2027.
    • round integer — El número de la jornada de la quiniela en esa temporada.
    • number integer, opcional — Cuál de tus pronósticos de la jornada, desde 1. Donde solo se admite uno, es el 1.
  • propose_with_templateProponer con una plantilla

    Lo que una de tus plantillas propondría, SIN guardar nada: con una de quiniela, el pronóstico entero; con una de 1X2, una columna (column); con una de pleno, el pleno al 15. Para jugarlo, guárdalo después con save_forecast.

    • community string, opcional — El slug de la peña (bar-manolo, de list_communities). Sin él, lo que juegas por tu cuenta, sin peña.
    • season integer — La temporada, por el año en que empieza: 2026 es la 2026/2027.
    • round integer — El número de la jornada de la quiniela en esa temporada.
    • number integer, opcional — Cuál de tus pronósticos de la jornada, desde 1. Donde solo se admite uno, es el 1.
    • templateId string — El id de la plantilla, de list_templates.
    • kind string — El tipo de la plantilla, que decide qué propone.
    • column integer, opcional — Con una de 1X2: qué columna se sustituye.
  • list_templatesMis plantillas

    Tus plantillas: reglas con nombre que proponen columnas (1X2), plenos (pleno) o pronósticos enteros (quiniela), con su id y su tipo.

  • get_templateUna plantilla

    Una de tus plantillas entera: sus reglas en orden y su cajón final, o, si es de quiniela, sus pronósticos con la plantilla de cada columna y la del pleno.

    • kind string — El tipo de plantilla: 1x2 (columnas), match15 (pleno al 15) o quiniela (pronósticos enteros).
    • id string — El id de la plantilla, de list_templates.
  • save_1x2_templateGuardar una plantilla de 1X2escribe

    Crea una plantilla de 1X2, que decide el signo de cada partido de una columna, o con id sustituye entera una existente. Las reglas se leen en orden y gana la primera que se cumple; si dos se contradicen, manda la de arriba. Una regla que no se puede contestar (sin tabla, sin opinión de la peña todavía) no se cumple y pasa a la siguiente. otherwise decide lo que no decide ninguna, y es obligatorio. Ejemplo: «el Betis gana en casa» es {team: "betis", where: "HOME", outcome: "SUBJECT_WINS"}; «el resto al azar con más unos», otherwise: {outcome: "RANDOM", chance: {one: 50, x: 25, two: 25}}.

    • id string, opcional — Para sustituir una existente. Sin él, se crea una nueva.
    • name string — Su nombre.
    • rules object[] — Las reglas, en orden.
    • otherwise object — Lo que se marca en los partidos que no decide ninguna regla.
  • save_match15_templateGuardar una plantilla de plenoescribe

    Crea una plantilla de pleno al 15, que decide los goles de cada equipo (0, 1, 2 o M), o con id sustituye entera una existente. Las reglas se leen en orden y gana la primera que se cumple; si dos se contradicen, manda la de arriba. Una regla que no se puede contestar (sin tabla, sin opinión de la peña todavía) no se cumple y pasa a la siguiente. otherwise decide lo que no decide ninguna, y es obligatorio. Ejemplo: «si juega el Betis en casa, 2-0» es {team: "betis", where: "HOME", source: "FIXED", local: "TWO", visitor: "ZERO"}.

    • id string, opcional — Para sustituir una existente. Sin él, se crea una nueva.
    • name string — Su nombre.
    • rules object[] — Las reglas, en orden.
    • otherwise object — El pleno cuando no decide ninguna regla.
  • save_quiniela_templateGuardar una plantilla de quinielaescribe

    Crea una plantilla de quiniela —la que se asigna al juego automático— o con id sustituye entera una existente. Se hace con las otras dos: cada pronóstico lleva una plantilla de 1X2 por columna y una de pleno. Una plantilla de 1X2 sin nada al azar daría siempre la misma columna, así que no se puede repetir dentro de un pronóstico.

    • id string, opcional — Para sustituir una existente. Sin él, se crea una nueva.
    • name string — Su nombre.
    • forecasts object[] — Sus pronósticos. Donde la peña admite uno por socio, uno.
  • get_template_usageDónde se usa una plantilla

    En qué plantillas de quiniela está y en qué peñas juega en automático. Conviene mirarlo antes de borrarla.

    • kind string — El tipo de plantilla: 1x2 (columnas), match15 (pleno al 15) o quiniela (pronósticos enteros).
    • id string — El id de la plantilla, de list_templates.
  • delete_templateBorrar una plantillaborra

    Borra una plantilla. Las de quiniela que usaban una de 1X2 o de pleno se quedan con ese hueco vacío y no se juegan hasta completarlas. Una de quiniela que una peña juega en automático no se puede borrar: hay que quitarla de allí antes.

    • kind string — El tipo de plantilla: 1x2 (columnas), match15 (pleno al 15) o quiniela (pronósticos enteros).
    • id string — El id de la plantilla, de list_templates.
  • get_auto_playJuego automático

    La plantilla de quiniela que juega por ti en una peña, o por tu cuenta, cada jornada. Nada si no hay ninguna asignada.

    • community string, opcional — El slug de la peña (bar-manolo, de list_communities). Sin él, lo que juegas por tu cuenta, sin peña.
  • set_auto_playActivar el juego automáticoescribe

    Asigna una plantilla de quiniela para que juegue por ti cada jornada en una peña, o por tu cuenta: rellena y CONFIRMA tus pronósticos, lo que cobra del saldo cada semana.

    • community string, opcional — El slug de la peña (bar-manolo, de list_communities). Sin él, lo que juegas por tu cuenta, sin peña.
    • templateId string — El id de una plantilla de quiniela.
  • clear_auto_playDesactivar el juego automáticoborra

    Deja de jugar automáticamente. Lo ya confirmado no se toca.

    • community string, opcional — El slug de la peña (bar-manolo, de list_communities). Sin él, lo que juegas por tu cuenta, sin peña.
  • get_played_columnsLo que se juega

    Las columnas que una peña, o tú por tu cuenta, juega de verdad en una jornada una vez cerrado el plazo, con sus aciertos cuando se puntúa.

    • community string, opcional — El slug de la peña (bar-manolo, de list_communities). Sin él, lo que juegas por tu cuenta, sin peña.
    • season integer — La temporada, por el año en que empieza: 2026 es la 2026/2027.
    • round integer — El número de la jornada de la quiniela en esa temporada.
  • get_distributionLo que juega España

    Qué parte de las quinielas va a cada signo en cada partido de una jornada, en toda España y en todo Tutiplay, en porcentaje.

    • season integer — La temporada, por el año en que empieza: 2026 es la 2026/2027.
    • round integer — El número de la jornada de la quiniela en esa temporada.
  • search_teamsBuscar equipos

    Busca equipos por su nombre (dos letras como mínimo). El id de cada uno es el que usan las reglas de las plantillas.

    • q string — Lo que se busca.
  • list_competitionsCompeticiones

    Las competiciones de las que hay datos de fútbol, con su id. Cuenta para los límites de uso de datos de fútbol.

  • get_competition_seasonUna competición en una temporada

    Los equipos que juegan una competición en una temporada y sus jornadas. Cuenta para los límites de uso de datos de fútbol.

    • competition string — El id de la competición: laliga-ea-sports.
    • season integer — La temporada, por el año en que empieza: 2026 es la 2026/2027.
  • get_competition_roundUna jornada de una competición

    Una jornada de una competición —la suya, no la de la quiniela—: sus partidos con el marcador y la clasificación tras ella. Es donde está el marcador de un partido de la quiniela: su competition dice qué competición y qué jornada pedir. Cuenta para los límites de uso de datos de fútbol.

    • competition string — El id de la competición: laliga-ea-sports.
    • season integer — La temporada, por el año en que empieza: 2026 es la 2026/2027.
    • round integer — La jornada de la competición.