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:
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.
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.
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:
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:
{
"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:
{
"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 cuentaTu cuenta y tu saldo. Confirmar un pronóstico cobra sus columnas del saldo, así que conviene mirarlo antes.
list_communitiesMis peñasLas 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_roundsJornadasLas 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). Conplayed: falsesalen también las que no se jugaron.communitystring, opcional — El slug de la peña (bar-manolo, delist_communities). Sin él, lo que juegas por tu cuenta, sin peña.seasoninteger, opcional — Solo las de esta temporada, por el año en que empieza.playedboolean, opcionalpageinteger, opcional
get_roundUna jornadaUna 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.
seasoninteger — La temporada, por el año en que empieza: 2026 es la 2026/2027.roundinteger — El número de la jornada de la quiniela en esa temporada.
get_round_statusUna jornada en una peñaLo 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.
communitystring, opcional — El slug de la peña (bar-manolo, delist_communities). Sin él, lo que juegas por tu cuenta, sin peña.seasoninteger — La temporada, por el año en que empieza: 2026 es la 2026/2027.roundinteger — El número de la jornada de la quiniela en esa temporada.
get_forecastsMis pronósticosTus 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.
communitystring, opcional — El slug de la peña (bar-manolo, delist_communities). Sin él, lo que juegas por tu cuenta, sin peña.seasoninteger — La temporada, por el año en que empieza: 2026 es la 2026/2027.roundinteger — El número de la jornada de la quiniela en esa temporada.
save_forecastGuardar un pronósticoescribeGuarda 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). Conconfirm: trueademás lo confirma, lo que COBRA sus columnas del saldo.communitystring, opcional — El slug de la peña (bar-manolo, delist_communities). Sin él, lo que juegas por tu cuenta, sin peña.seasoninteger — La temporada, por el año en que empieza: 2026 es la 2026/2027.roundinteger — El número de la jornada de la quiniela en esa temporada.numberinteger, opcional — Cuál de tus pronósticos de la jornada, desde 1. Donde solo se admite uno, es el 1.columnsstring[] — Las columnas: 14 signos cada una, 1, X o 2. Un - deja ese partido sin marcar.match15object, opcional — El pleno al 15. Hace falta para confirmar.confirmboolean, opcional — Si se confirma, que cobra del saldo.
confirm_forecastConfirmar un pronósticoescribeConfirma un pronóstico tal como está guardado. COBRA sus columnas del saldo. Mientras el plazo siga abierto se puede deshacer con
unconfirm_forecast.communitystring, opcional — El slug de la peña (bar-manolo, delist_communities). Sin él, lo que juegas por tu cuenta, sin peña.seasoninteger — La temporada, por el año en que empieza: 2026 es la 2026/2027.roundinteger — El número de la jornada de la quiniela en esa temporada.numberinteger, opcional — Cuál de tus pronósticos de la jornada, desde 1. Donde solo se admite uno, es el 1.
unconfirm_forecastDeshacer la confirmaciónescribeDeja un pronóstico sin confirmar mientras el plazo siga abierto, y devuelve al saldo lo que se cobró.
communitystring, opcional — El slug de la peña (bar-manolo, delist_communities). Sin él, lo que juegas por tu cuenta, sin peña.seasoninteger — La temporada, por el año en que empieza: 2026 es la 2026/2027.roundinteger — El número de la jornada de la quiniela en esa temporada.numberinteger, opcional — Cuál de tus pronósticos de la jornada, desde 1. Donde solo se admite uno, es el 1.
delete_forecastQuitar un pronósticoborraQuita 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.
communitystring, opcional — El slug de la peña (bar-manolo, delist_communities). Sin él, lo que juegas por tu cuenta, sin peña.seasoninteger — La temporada, por el año en que empieza: 2026 es la 2026/2027.roundinteger — El número de la jornada de la quiniela en esa temporada.numberinteger, 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 plantillaLo 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 consave_forecast.communitystring, opcional — El slug de la peña (bar-manolo, delist_communities). Sin él, lo que juegas por tu cuenta, sin peña.seasoninteger — La temporada, por el año en que empieza: 2026 es la 2026/2027.roundinteger — El número de la jornada de la quiniela en esa temporada.numberinteger, opcional — Cuál de tus pronósticos de la jornada, desde 1. Donde solo se admite uno, es el 1.templateIdstring — El id de la plantilla, delist_templates.kindstring — El tipo de la plantilla, que decide qué propone.columninteger, opcional — Con una de 1X2: qué columna se sustituye.
list_templatesMis plantillasTus plantillas: reglas con nombre que proponen columnas (1X2), plenos (pleno) o pronósticos enteros (quiniela), con su id y su tipo.
get_templateUna plantillaUna 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.
kindstring — El tipo de plantilla:1x2(columnas),match15(pleno al 15) oquiniela(pronósticos enteros).idstring — El id de la plantilla, delist_templates.
save_1x2_templateGuardar una plantilla de 1X2escribeCrea una plantilla de 1X2, que decide el signo de cada partido de una columna, o con
idsustituye 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.otherwisedecide 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}}.idstring, opcional — Para sustituir una existente. Sin él, se crea una nueva.namestring — Su nombre.rulesobject[] — Las reglas, en orden.otherwiseobject — Lo que se marca en los partidos que no decide ninguna regla.
save_match15_templateGuardar una plantilla de plenoescribeCrea una plantilla de pleno al 15, que decide los goles de cada equipo (0, 1, 2 o M), o con
idsustituye 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.otherwisedecide 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"}.idstring, opcional — Para sustituir una existente. Sin él, se crea una nueva.namestring — Su nombre.rulesobject[] — Las reglas, en orden.otherwiseobject — El pleno cuando no decide ninguna regla.
save_quiniela_templateGuardar una plantilla de quinielaescribeCrea una plantilla de quiniela —la que se asigna al juego automático— o con
idsustituye 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.idstring, opcional — Para sustituir una existente. Sin él, se crea una nueva.namestring — Su nombre.forecastsobject[] — Sus pronósticos. Donde la peña admite uno por socio, uno.
get_template_usageDónde se usa una plantillaEn qué plantillas de quiniela está y en qué peñas juega en automático. Conviene mirarlo antes de borrarla.
kindstring — El tipo de plantilla:1x2(columnas),match15(pleno al 15) oquiniela(pronósticos enteros).idstring — El id de la plantilla, delist_templates.
delete_templateBorrar una plantillaborraBorra 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.
kindstring — El tipo de plantilla:1x2(columnas),match15(pleno al 15) oquiniela(pronósticos enteros).idstring — El id de la plantilla, delist_templates.
get_auto_playJuego automáticoLa plantilla de quiniela que juega por ti en una peña, o por tu cuenta, cada jornada. Nada si no hay ninguna asignada.
communitystring, opcional — El slug de la peña (bar-manolo, delist_communities). Sin él, lo que juegas por tu cuenta, sin peña.
set_auto_playActivar el juego automáticoescribeAsigna 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.
communitystring, opcional — El slug de la peña (bar-manolo, delist_communities). Sin él, lo que juegas por tu cuenta, sin peña.templateIdstring — El id de una plantilla de quiniela.
clear_auto_playDesactivar el juego automáticoborraDeja de jugar automáticamente. Lo ya confirmado no se toca.
communitystring, opcional — El slug de la peña (bar-manolo, delist_communities). Sin él, lo que juegas por tu cuenta, sin peña.
get_played_columnsLo que se juegaLas 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.
communitystring, opcional — El slug de la peña (bar-manolo, delist_communities). Sin él, lo que juegas por tu cuenta, sin peña.seasoninteger — La temporada, por el año en que empieza: 2026 es la 2026/2027.roundinteger — El número de la jornada de la quiniela en esa temporada.
get_distributionLo que juega EspañaQué parte de las quinielas va a cada signo en cada partido de una jornada, en toda España y en todo Tutiplay, en porcentaje.
seasoninteger — La temporada, por el año en que empieza: 2026 es la 2026/2027.roundinteger — El número de la jornada de la quiniela en esa temporada.
search_teamsBuscar equiposBusca equipos por su nombre (dos letras como mínimo). El id de cada uno es el que usan las reglas de las plantillas.
qstring — Lo que se busca.
list_competitionsCompeticionesLas 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 temporadaLos equipos que juegan una competición en una temporada y sus jornadas. Cuenta para los límites de uso de datos de fútbol.
competitionstring — El id de la competición:laliga-ea-sports.seasoninteger — La temporada, por el año en que empieza: 2026 es la 2026/2027.
get_competition_roundUna jornada de una competiciónUna 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
competitiondice qué competición y qué jornada pedir. Cuenta para los límites de uso de datos de fútbol.competitionstring — El id de la competición:laliga-ea-sports.seasoninteger — La temporada, por el año en que empieza: 2026 es la 2026/2027.roundinteger — La jornada de la competición.