Rhylthyme

Planifica trabajo en tiempo real y multipista (recetas, protocolos de laboratorio, eventos, entrenamientos): importa, valida y analiza horarios con dependencias y límites de recursos, luego comparte una línea de tiempo en vivo. Gratis, sin autenticación.

Servidor MCP alojado

npx add-mcp 'https://mcp.rhylthyme.com/mcp'

Se instala en Claude Code, Codex, Cursor y más

Documentación

Servidor MCP de Rhylthyme

Claude Connectors Directory Listed on mcpservers.org

Un servidor de Model Context Protocol para horarios que una persona ejecuta: cocinar varios platos para que terminen juntos, ejecutar un protocolo de laboratorio con incubaciones superpuestas, organizar un evento, realizar un entrenamiento. Un agente describe el proceso, el servidor valida y analiza el programa resultante, y lo publica como una línea de tiempo en vivo en rhylthyme.com que la persona sigue desde su teléfono.

Este repositorio es la fuente del servidor que se ejecuta en mcp.rhylthyme.com. Es el mismo código que mcp-api/ en la aplicación rhylthyme-server, copiado aquí con los recursos estáticos que necesita para que pueda leerse, probarse y alojarse de forma independiente.

Pruébalo: pide un entrenamiento

Conecta el servidor (en claude.ai, Claude Desktop o móvil, añade Rhylthyme desde el Directorio de Conectores de Claude; en Claude Code, /plugin marketplace add rhylthyme/rhylthyme-mcp luego /plugin install rhylthyme@rhylthyme; en cualquier otro lugar, añade https://mcp.rhylthyme.com/gym/mcp como conector), y luego di lo que quieras en palabras sencillas:

Dos personas en un gimnasio de garaje: una pesa rusa, una barra de dominadas, una cuerda para saltar. Treinta minutos, dos rondas, y que nadie se quede esperando por el equipo. Conviértelo en una línea de tiempo de Rhylthyme.

No escribes JSON. El asistente lo hace, y el servidor lo mantiene honesto. Con esa indicación, Claude hizo tres llamadas a herramientas:

LlamadaLo que devolvió
validate_program✅ Program is valid — 2 tracks, 20 steps, 30m makespan.
analyze_scheduleResource conflicts: none. Cada estación tiene capacidad 1, así que esta es la prueba de que Alex y Sam nunca quieren la pesa rusa al mismo tiempo
visualize_scheduleun enlace, gym.rhylthyme.com?share=4995ef1b88744e80, con temporizadores de descanso y pitidos de intervalos, y un gráfico de texto para el chat:
                0                       15m                    30m
Alex           │░Warm-…░▒S…▒░Pu…░▒Ju…▒░░░▒Sw…▒░Pu…░▒Ju…▒░░░▒St…▒│
Sam            │░Warm-…░▒P…▒░Ju…░▒Sw…▒░░░▒Pu…▒░Ju…░▒Sw…▒░░░▒St…▒│

Pide "muéstrame una imagen" y preview_timeline devuelve una imagen en el chat. Para una coloreada por estación, que hace evidente la rotación, guarda el programa que escribió el asistente (el nuestro es examples/recipe/garage-circuit.json) y ejecuta:

npx -y github:rhylthyme/rhylthyme-timeline garage-circuit.json -o garage-circuit.png \
  --style web --palette tableau --color-by task

Garage circuit for two, coloured by station: the kettlebell, the bar and the rope are never double-booked

Luego insiste: "añade una tercera persona", "solo tenemos 20 minutos", "cambia la cuerda por burpees". El asistente edita el programa y el servidor lo verifica de nuevo.

Este repositorio y rhylthyme

Dos repositorios hacen cosas relacionadas y son fáciles de confundir. Este es el servidor con el que habla un asistente de IA. rhylthyme (antes rhylthyme-cli-runner) es el comando que escribe una persona.

rhylthyme-mcprhylthyme
Qué esEl servidor MCP: las herramientas que llama un asistente de IAUn programa de línea de comandos: el comando rhylthyme
Quién lo usaClaude, ChatGPT, Cursor o cualquier cliente MCP, en nombre de una personaUna persona en una terminal, un script o CI
Dónde se ejecutaAlojado en mcp.rhylthyme.com; nada que instalarEn tu máquina: pip install rhylthyme
LenguajeJavaScript (Node 20+)Python 3.12+
EntradaUn programa que el asistente construye en la conversaciónUn archivo de programa en disco (JSON o YAML)
Validar un programavalidate_programrhylthyme validate (funciona sin conexión)
Tiempos, conflictos, plazosanalyze_schedulerhylthyme analyze (consulta al servidor)
Publicar una línea de tiempo en vivovisualize_schedulerhylthyme publish (consulta al servidor)
Ejecutar un horario con temporizadoresno: devuelve un enlace a la línea de tiempo webrhylthyme run, un ejecutor de terminal interactivo
Ejecuciones registradas, calibraciónlee ejecuciones guardadas en una cuentaregistra ejecuciones localmente; rhylthyme runs, rhylthyme calibrate
Búsqueda en catálogo, importaciones, biblioteca de cuentasíno
También en el repositorioel paquete PyPI rhylthyme-mcp (un puente stdio al servidor alojado), el marketplace de plugins de Claudela fuente de la habilidad de Claude, el entorno de evaluación de indicaciones y sus resultados, rhylthyme mcp-test

Cómo encajan: la herramienta de línea de comandos es uno de los clientes de este servidor. rhylthyme analyze, publish, generate y mcp-test son llamadas MCP a mcp.rhylthyme.com; rhylthyme validate, run, runs y calibrate nunca tocan la red. Cada uno tiene su propio validador para el mismo esquema de programa (JavaScript aquí, Python allá), así que un programa se verifica de nuevo cuando se publica.

Usa este repositorio para conectar un asistente, para leer o alojar el servidor, o para cambiar una herramienta. Usa rhylthyme si tienes un archivo de programa y una terminal, quieres temporizadores en la terminal o guardas registros de ejecuciones.

Dos nombres para mantener separados: rhylthyme-mcp en PyPI es el puente stdio de este servidor (comando rhylthyme-mcp, fuente en python/); rhylthyme en PyPI es la herramienta de línea de comandos (comando rhylthyme; se publicó como rhylthyme-cli-runner antes de 0.5.0). El formato del programa en sí está definido en rhylthyme-spec, con ejemplos en rhylthyme-examples.

Endpoints

URLNombre del servidorAñade
https://mcp.rhylthyme.com/mcprhylthyme-mcpplanificador genérico
https://mcp.rhylthyme.com/kitchen/mcprhylthyme-kitchen-mcpcook_recipe, whats_for_dinner
https://mcp.rhylthyme.com/lab/mcprhylthyme-lab-mcprun_protocol, random_protocol, importación de Benchling
https://mcp.rhylthyme.com/events/mcprhylthyme-events-mcpplan_event, random_event_template
https://mcp.rhylthyme.com/gym/mcprhylthyme-gym-mcpstart_workout, surprise_workout

Transporte: HTTP Streamable, sin estado. No se necesita iniciar sesión para el catálogo público ni para las herramientas puras; las herramientas de cuenta usan la cuenta Rhylthyme de la persona mediante OAuth 2.1, o un token pegado desde la herramienta login en clientes sin OAuth. Las instrucciones del servidor instructions que describen el flujo de trabajo se envían en initialize.

Inicio rápido: líneas de tiempo desde la línea de comandos

La CLI rhylthyme puede manejar este servidor directamente: describe lo que necesitas en lenguaje sencillo y obtén una URL de línea de tiempo en vivo, un archivo de programa, o ambos.

pip install rhylthyme                        # Python 3.12+
rhylthyme login                              # opens rhylthyme.com in your browser
rhylthyme generate "roast chicken, potatoes and green beans for 6" \
    -e kitchen --by 19:00 --with "one oven, four burners, one cook"

login te inicia sesión a través del navegador y entrega la sesión a un listener de una sola vez en 127.0.0.1. Se almacena en ~/.config/rhylthyme/credentials.json (modo 0600) y se renueva solo, así que solo inicias sesión una vez. generate luego llama a dos herramientas en este servidor:

  1. import_text en el endpoint para -e (/kitchen/mcp, /lab/mcp, …) convierte la solicitud en un programa multitrack validado. Ejecuta cuatro turnos de modelo en el servidor, por eso necesita iniciar sesión; tarda 20–60 segundos y tiene un límite diario.
  2. visualize_schedule publica ese programa y devuelve la URL de la línea de tiempo en vivo en el subdominio correspondiente.

Imprime el Gantt ASCII, el itinerario y la URL. Más ejemplos:

# A lab protocol from a file; save the program and run it in the terminal
rhylthyme generate -e lab -f western_blot.txt -o blot.json --run

# Pipe a run sheet in; print only the URL
pbpaste | rhylthyme generate -e events --by "doors at 18:30" -q

# Program JSON only, no published timeline; machine-readable output
rhylthyme generate -e gym "45 minute upper-body circuit, two people, one bench" --no-publish --json
IndicadorSignificado
-e, --envgeneric (predeterminado), kitchen, lab, events o gym. Elige el endpoint y el sitio de la línea de tiempo.
--byCuando todo debe estar terminado: 19:00, dinner at 7pm.
--withLímites de equipo y personas en tus propias palabras.
-f, --fileLee la solicitud o el texto fuente desde un archivo, o - para stdin.
-o, --outputGuarda el JSON del programa.
--runEjecuta el programa en el ejecutor de terminal después.
--openAbre la línea de tiempo en vivo en un navegador.
--no-publish, --json, -qOmite la publicación; imprime JSON; imprime solo la URL.

Para verificar un servidor (este, o tu propio despliegue) de extremo a extremo:

rhylthyme mcp-test                                   # all five hosted endpoints, read-only
rhylthyme mcp-test --url http://localhost:3000/mcp -e generic --publish

rhylthyme whoami muestra el inicio de sesión guardado; rhylthyme logout lo olvida. En una máquina sin navegador, establece RHYLTHYME_TOKEN a un token de acceso de https://www.rhylthyme.com/mcp/auth (dura aproximadamente una hora), o ejecuta rhylthyme login --token <token>. RHYLTHYME_MCP_URL apunta la CLI a un servidor autoalojado.

Conectar

Claude Code

claude mcp add --transport http rhylthyme https://mcp.rhylthyme.com/mcp
claude mcp add --transport http rhylthyme-kitchen https://mcp.rhylthyme.com/kitchen/mcp

Claude Desktop / claude.ai: Configuración → Conectores → Añadir conector personalizado → pega una de las URLs anteriores. Las herramientas públicas funcionan de inmediato; ejecuta login solo para guardar en tu propia cuenta.

Plugin de Claude Code (el servidor alojado más una habilidad que enseña a Claude a crear, validar y analizar horarios):

/plugin marketplace add rhylthyme/rhylthyme-mcp
/plugin install rhylthyme@rhylthyme

ChatGPT: Configuración → Apps y Conectores → Configuración avanzada → activa Modo desarrollador, luego Crea un conector con una de las URLs anteriores como URL del servidor MCP. Sin un conector, ChatGPT no puede llamar estas herramientas y vuelve a navegar por el sitio web.

Cursor (.cursor/mcp.json):

{ "mcpServers": { "rhylthyme": { "url": "https://mcp.rhylthyme.com/kitchen/mcp" } } }

Claude API (conector MCP, una solicitud):

import anthropic
client = anthropic.Anthropic()
resp = client.beta.messages.create(
    model="claude-opus-5", max_tokens=16000,
    betas=["mcp-client-2025-11-20"],
    mcp_servers=[{"type": "url", "url": "https://mcp.rhylthyme.com/kitchen/mcp", "name": "rhylthyme"}],
    tools=[{"type": "mcp_toolset", "mcp_server_name": "rhylthyme"}],
    messages=[{"role": "user", "content": "Plan Thanksgiving for 8 with one oven, dinner at 6pm."}],
)

Revisar una importación. review_program (una herramienta de cuenta) hace que un modelo lea un programa importado contra su fuente y devuelva hallazgos: duraciones incorrectas, pasos omitidos, mal orden, un total que no coincide con la fuente. Llámala después de import_from_source o import_text, aplica lo que diga y valida de nuevo.

Clientes que solo pueden lanzar un comando: pip install rhylthyme-mcp da un comando rhylthyme-mcp, un puente stdio que pasa cada solicitud al servidor alojado (fuente en python/):

{ "mcpServers": { "rhylthyme": { "command": "rhylthyme-mcp", "args": ["kitchen"] } } }

Sin cliente MCP en absoluto (un agente con un shell, un script): el servidor es sin estado, así que un POST funciona sin protocolo de inicio y sin cuenta.

curl -s https://mcp.rhylthyme.com/mcp \
  -H 'Content-Type: application/json' -H 'Accept: application/json' \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/call",
       "params":{"name":"validate_program","arguments":{"program":{"programId":"x","name":"x","tracks":[]}}}}'

visualize_schedule llamado de la misma manera devuelve la URL de la línea de tiempo en vivo en result.structuredContent.url. O usa la CLI del inicio rápido anterior.

Herramientas

HerramientaAnotacionesQué hace
validate_programsolo lectura, puraVerificaciones estructurales y de programación (ids duplicados/faltantes, referencias colgantes, ciclos, solapamientos dentro de la pista, tareas sin restricción de recurso, duraciones no analizables, referencias de elección). Cada hallazgo lleva una pista code, message y fix. Salida estructurada.
analyze_schedulesolo lectura, puraInicio/fin resuelto por paso, makespan, la cadena de dependencias que lo determina, ventanas de conflicto de recursos, holgura por pista, concurrencia máxima vs. actores declarados. Pasa finishAt o startAt (ISO 8601) para tiempos de inicio en reloj. Salida estructurada.
visualize_schedulepublicaValida (rechaza programas inválidos a menos que allowInvalid), crea un registro de uso compartido, devuelve una vista previa en markdown (imagen de portada, equipo, ingredientes, Gantt ASCII, itinerario, verificación de horario), un PNG en línea de la línea de tiempo y la URL en vivo. Salida estructurada.
preview_timelinepublica un registro de uso compartidoPNG de la línea de tiempo solo, sin prosa.
search_public_recipessolo lecturaBúsqueda por palabras clave en el catálogo público; environment selecciona cocina (predeterminado), laboratorio, evento o gimnasio. Salida estructurada.
load_public_recipesolo lecturaResumen completo y URL en vivo para una entrada del catálogo.
cook_recipe / run_protocol / plan_event / start_workoutsolo lecturaUna sola llamada en cada vertical: mejor coincidencia del catálogo → URL en vivo.
whats_for_dinner / random_protocol / random_event_template / surprise_workoutsolo lecturaSelección aleatoria del catálogo en cada vertical.
import_from_sourcesolo lecturaSpoonacular, TheMealDB, protocols.io, Cooklang, scripts de Opentrons Protocol API, Benchling → JSON de programa validado. search no necesita token; import y random necesitan el token del usuario.
create_environmentpuraLímites de equipo y tipos de actores → JSON de entorno.
login—Devuelve la URL de inicio de sesión, luego verifica un token pegado.
list_my_programs, load_program, save_programcuentaLa biblioteca propia del usuario; save_program valida primero.
get_renderer_sourcesolo lecturaFuente del renderizador de líneas de tiempo Apache-2.0, para artefactos HTML cuyo sandbox bloquea scripts externos.

Anotaciones (readOnlyHint, destructiveHint, idempotentHint, openWorldHint) se establecen en cada herramienta; cuatro herramientas también declaran un outputSchema y devuelven structuredContent. Los fallos establecen isError y dicen qué hacer a continuación.

Recursos e indicación

  • rhylthyme://schema/program: el JSON Schema del programa (0.3.0-alpha)
  • rhylthyme://guide/authoring: reglas de autoría en una página, vocabulario de disparadores, cómo hacer que las pistas terminen juntas, trabajo repetido (replicates, cadenas de instances: "each" por instancia, barreras de "all" y maxInFlight), ramificación por elección
  • rhylthyme://guide/tools: la forma larga de cada descripción de herramienta. La lista de herramientas en sí se mantiene en unas 3,600 fichas para que sea barato mantenerla conectada
  • rhylthyme://examples/{breakfast_schedule, lab_experiment, stir_fry_with_choice, hiit_cardio_workout, corporate_presentation, cookies_three_trays}: programas válidos completos (cookies_three_trays es el ejemplo trabajado por instancia / en vuelo de 0.3.0-alpha)
  • prompt plan_schedule(goal, finishAt?, constraints?): guía al modelo a través de búsqueda → construcción → validación → análisis → visualización, y nombra replicates / instances / maxInFlight en su paso de restricciones

Cómo se ve un programa

{
  "schemaVersion": "0.1.0",
  "programId": "eggs-and-toast",
  "name": "Eggs and toast",
  "tracks": [
    { "trackId": "eggs", "name": "Eggs", "steps": [
      { "stepId": "whisk", "name": "Whisk", "task": "prep",
        "duration": { "type": "fixed", "seconds": 60 },
        "startTrigger": { "type": "programStart" } },
      { "stepId": "cook", "name": "Cook", "task": "stove",
        "duration": { "type": "variable", "minSeconds": 120, "maxSeconds": 240, "defaultSeconds": 180 },
        "startTrigger": { "type": "afterStep", "stepId": "whisk" } } ] },
    { "trackId": "toast", "name": "Toast", "steps": [
      { "stepId": "toast", "name": "Toast", "task": "toaster",
        "duration": { "type": "fixed", "seconds": 180 },
        "startTrigger": { "type": "afterStep", "stepId": "cook", "event": "start", "offsetSeconds": 60 } } ] }
  ],
  "resourceConstraints": [
    { "task": "prep", "maxConcurrent": 1 },
    { "task": "stove", "maxConcurrent": 2 },
    { "task": "toaster", "maxConcurrent": 1 }
  ]
}

Los pasos en una pista se ejecutan secuencialmente; el trabajo paralelo va en pistas separadas; cada task necesita una restricción de recurso; las duraciones y los desplazamientos toman segundos o cadenas como "5m". Disparadores: programStart, programStartOffset, afterStep (fin o event: "start", desplazamiento con signo), afterStepWithBuffer, manual, onAbort, o {logic: all|any, triggers}. Duraciones: fixed, variable (terminado antes por el ejecutor), indefinite (terminado por el ejecutor).

Autoalojamiento

git clone https://github.com/rhylthyme/rhylthyme-mcp
cd rhylthyme-mcp
npm install            # Node 20 or newer
npm test                 # SDK in-memory + HTTP entry-point tests, no network
PORT=3000 npm start      # http://localhost:3000/mcp and the four vertical paths

Docker: docker build -t rhylthyme-mcp . && docker run -p 3000:3000 rhylthyme-mcp. Vercel: vercel en la raíz del repositorio; vercel.json reescribe las rutas de los endpoints a la función.

Lo que el autoalojamiento te da y no te da: validación, análisis de tiempos, el renderizador, los recursos y los prompts se ejecutan en tu proceso. Búsqueda de catálogo, compartir (visualize_schedule), importaciones y herramientas de cuenta llaman a la API pública en https://www.rhylthyme.com (API_BASE en mcp-api/index.js), por lo que esos aún dependen del servicio alojado. La ruta de vista previa PNG /api/og/timeline.png además necesita SUPABASE_URL y SUPABASE_ANON_KEY para acceso de lectura a programas compartidos; nada más lo necesita.

Diseño

  • mcp-api/index.js: registro de herramientas, recursos y prompts; detección vertical; ruta de imagen OG; manejador de Vercel
  • mcp-api/schedule.js: validador y analizador (puro)
  • static/js/timeline-render.js: motor de tiempos y Gantt SVG (también publicado como @rhylthyme/timeline)
  • static/schema/, static/examples/: los recursos
  • src/index.js: ejecutor HTTP independiente
  • mcp-api/server.json: manifiesto de registro MCP
  • .claude-plugin/marketplace.json, plugins/rhylthyme/: el marketplace y el plugin de Claude (claude plugin validate .); la habilidad en él es una copia verificada de skills/rhylthyme en rhylthyme
  • python/: el paquete PyPI rhylthyme-mcp, un puente stdio al servidor alojado (cd python && PYTHONPATH=src pytest tests)

Limitaciones conocidas

  • login entrega al usuario una URL y espera un token de acceso de corta duración pegado que luego viaja como argumento de herramienta; está fuera del flujo OAuth 2.1 de MCP. Los hosts que requieren OAuth para servidores autenticados aún pueden usar cada herramienta pública.
  • search_public_recipes busca un entorno a la vez; el endpoint genérico se establece por defecto en cocina.
  • Las anotaciones de herramientas son sugerencias autodeclaradas; los hosts pueden ignorarlas.

Licencia

Apache-2.0, como el resto de Rhylthyme. (Este repositorio fue MIT hasta septiembre de 2026.)