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
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:
| Llamada | Lo que devolvió |
|---|---|
validate_program | ✅ Program is valid — 2 tracks, 20 steps, 30m makespan. |
analyze_schedule | Resource 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_schedule | un 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

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-mcp | rhylthyme | |
|---|---|---|
| Qué es | El servidor MCP: las herramientas que llama un asistente de IA | Un programa de línea de comandos: el comando rhylthyme |
| Quién lo usa | Claude, ChatGPT, Cursor o cualquier cliente MCP, en nombre de una persona | Una persona en una terminal, un script o CI |
| Dónde se ejecuta | Alojado en mcp.rhylthyme.com; nada que instalar | En tu máquina: pip install rhylthyme |
| Lenguaje | JavaScript (Node 20+) | Python 3.12+ |
| Entrada | Un programa que el asistente construye en la conversación | Un archivo de programa en disco (JSON o YAML) |
| Validar un programa | validate_program | rhylthyme validate (funciona sin conexión) |
| Tiempos, conflictos, plazos | analyze_schedule | rhylthyme analyze (consulta al servidor) |
| Publicar una línea de tiempo en vivo | visualize_schedule | rhylthyme publish (consulta al servidor) |
| Ejecutar un horario con temporizadores | no: devuelve un enlace a la línea de tiempo web | rhylthyme run, un ejecutor de terminal interactivo |
| Ejecuciones registradas, calibración | lee ejecuciones guardadas en una cuenta | registra ejecuciones localmente; rhylthyme runs, rhylthyme calibrate |
| Búsqueda en catálogo, importaciones, biblioteca de cuenta | sí | no |
| También en el repositorio | el paquete PyPI rhylthyme-mcp (un puente stdio al servidor alojado), el marketplace de plugins de Claude | la 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
| URL | Nombre del servidor | Añade |
|---|---|---|
https://mcp.rhylthyme.com/mcp | rhylthyme-mcp | planificador genérico |
https://mcp.rhylthyme.com/kitchen/mcp | rhylthyme-kitchen-mcp | cook_recipe, whats_for_dinner |
https://mcp.rhylthyme.com/lab/mcp | rhylthyme-lab-mcp | run_protocol, random_protocol, importación de Benchling |
https://mcp.rhylthyme.com/events/mcp | rhylthyme-events-mcp | plan_event, random_event_template |
https://mcp.rhylthyme.com/gym/mcp | rhylthyme-gym-mcp | start_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:
import_texten 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.visualize_schedulepublica 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
| Indicador | Significado |
|---|---|
-e, --env | generic (predeterminado), kitchen, lab, events o gym. Elige el endpoint y el sitio de la línea de tiempo. |
--by | Cuando todo debe estar terminado: 19:00, dinner at 7pm. |
--with | Límites de equipo y personas en tus propias palabras. |
-f, --file | Lee la solicitud o el texto fuente desde un archivo, o - para stdin. |
-o, --output | Guarda el JSON del programa. |
--run | Ejecuta el programa en el ejecutor de terminal después. |
--open | Abre la línea de tiempo en vivo en un navegador. |
--no-publish, --json, -q | Omite 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
| Herramienta | Anotaciones | Qué hace |
|---|---|---|
validate_program | solo lectura, pura | Verificaciones 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_schedule | solo lectura, pura | Inicio/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_schedule | publica | Valida (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_timeline | publica un registro de uso compartido | PNG de la línea de tiempo solo, sin prosa. |
search_public_recipes | solo lectura | Búsqueda por palabras clave en el catálogo público; environment selecciona cocina (predeterminado), laboratorio, evento o gimnasio. Salida estructurada. |
load_public_recipe | solo lectura | Resumen completo y URL en vivo para una entrada del catálogo. |
cook_recipe / run_protocol / plan_event / start_workout | solo lectura | Una sola llamada en cada vertical: mejor coincidencia del catálogo → URL en vivo. |
whats_for_dinner / random_protocol / random_event_template / surprise_workout | solo lectura | Selección aleatoria del catálogo en cada vertical. |
import_from_source | solo lectura | Spoonacular, 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_environment | pura | Lí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_program | cuenta | La biblioteca propia del usuario; save_program valida primero. |
get_renderer_source | solo lectura | Fuente 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 deinstances: "each"por instancia, barreras de"all"ymaxInFlight), ramificación por elecciónrhylthyme://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 conectadarhylthyme://examples/{breakfast_schedule, lab_experiment, stir_fry_with_choice, hiit_cardio_workout, corporate_presentation, cookies_three_trays}: programas válidos completos (cookies_three_trayses 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 nombrareplicates/instances/maxInFlighten 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 Vercelmcp-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 recursossrc/index.js: ejecutor HTTP independientemcp-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 deskills/rhylthymeen rhylthymepython/: el paquete PyPIrhylthyme-mcp, un puente stdio al servidor alojado (cd python && PYTHONPATH=src pytest tests)
Limitaciones conocidas
loginentrega 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_recipesbusca 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.)