Rhylthyme

Planeje trabalhos em tempo real e com múltiplas trilhas (receitas, protocolos de laboratório, eventos, treinos): importe, valide e analise cronogramas com dependências e limites de recursos, e depois compartilhe uma linha do tempo ao vivo. Gratuito, sem autenticação.

Servidor MCP hospedado

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

Instala no Claude Code, Codex, Cursor e outros

Documentação

Servidor MCP Rhylthyme

Claude Connectors Directory Listed on mcpservers.org

Um servidor Model Context Protocol para agendas que uma pessoa executa: cozinhar vários pratos para que fiquem prontos juntos, executar um protocolo de bancada com incubações sobrepostas, organizar um evento, fazer um treino. Um agente descreve o processo, o servidor valida e analisa o programa resultante, e o publica como uma linha do tempo ao vivo em rhylthyme.com que a pessoa acompanha no celular.

Este repositório é a fonte do servidor que roda em mcp.rhylthyme.com. É o mesmo código de mcp-api/ no aplicativo rhylthyme-server, copiado aqui com os recursos estáticos que precisa para que possa ser lido, testado e auto-hospedado.

Experimente: peça um treino

Conecte o servidor (no claude.ai, Claude Desktop ou mobile, adicione Rhylthyme do Diretório de Conectores do Claude; no Claude Code, /plugin marketplace add rhylthyme/rhylthyme-mcp depois /plugin install rhylthyme@rhylthyme; em qualquer outro lugar, adicione https://mcp.rhylthyme.com/gym/mcp como conector), e então diga o que você quer em palavras simples:

Dois de nós em uma academia de garagem: um kettlebell, uma barra de pull-up, uma corda de pular. Trinta minutos, duas rodadas, e ninguém fica parado esperando equipamento. Transforme isso em uma linha do tempo Rhylthyme.

Você não escreve JSON. O assistente escreve, e o servidor garante que esteja correto. Com esse prompt, o Claude fez três chamadas de ferramenta:

ChamadaO que retornou
validate_program✅ Program is valid — 2 tracks, 20 steps, 30m makespan.
analyze_scheduleResource conflicts: none. Cada estação tem capacidade 1, então esta é a prova de que Alex e Sam nunca querem o kettlebell ao mesmo tempo
visualize_scheduleum link, gym.rhylthyme.com?share=4995ef1b88744e80, com temporizadores de descanso e bipes de intervalo, e um gráfico de texto para o chat:
                0                       15m                    30m
Alex           │░Warm-…░▒S…▒░Pu…░▒Ju…▒░░░▒Sw…▒░Pu…░▒Ju…▒░░░▒St…▒│
Sam            │░Warm-…░▒P…▒░Ju…░▒Sw…▒░░░▒Pu…▒░Ju…░▒Sw…▒░░░▒St…▒│

Peça "mostre uma imagem" e preview_timeline retorna uma imagem no chat. Para uma colorida por estação, o que torna a rotação óbvia, salve o programa que o assistente escreveu (o nosso é examples/recipe/garage-circuit.json) e execute:

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

Depois insista: "adicione uma terceira pessoa", "só temos 20 minutos", "troque a corda por burpees". O assistente edita o programa e o servidor o verifica novamente.

Este repositório e o rhylthyme

Dois repositórios fazem coisas relacionadas e são fáceis de confundir. Este é o servidor com o qual um assistente de IA conversa. rhylthyme (anteriormente rhylthyme-cli-runner) é o comando que uma pessoa digita.

rhylthyme-mcprhylthyme
O que éO servidor MCP: as ferramentas que um assistente de IA chamaUm programa de linha de comando: o comando rhylthyme
Quem usaClaude, ChatGPT, Cursor ou qualquer cliente MCP, em nome de uma pessoaUma pessoa em um terminal, um script ou CI
Onde rodaHospedado em mcp.rhylthyme.com; nada para instalarNa sua máquina: pip install rhylthyme
LinguagemJavaScript (Node 20+)Python 3.12+
EntradaUm programa que o assistente constrói em conversaUm arquivo de programa em disco (JSON ou YAML)
Validar um programavalidate_programrhylthyme validate (funciona offline)
Tempo, conflitos, prazosanalyze_schedulerhylthyme analyze (pergunta ao servidor)
Publicar uma linha do tempo ao vivovisualize_schedulerhylthyme publish (pergunta ao servidor)
Executar uma agenda com temporizadoresnão: ele devolve um link para a linha do tempo webrhylthyme run, um executor interativo de terminal
Execuções registradas, calibraçãolê execuções salvas em uma contaregistra execuções localmente; rhylthyme runs, rhylthyme calibrate
Pesquisa de catálogo, importações, biblioteca da contasimnão
Também no repositórioo pacote PyPI rhylthyme-mcp (uma ponte stdio para o servidor hospedado), o marketplace de plugins do Claudea fonte da skill do Claude, o harness de avaliação de prompts e seus resultados, rhylthyme mcp-test

Como eles se encaixam: a ferramenta de linha de comando é um dos clientes deste servidor. rhylthyme analyze, publish, generate e mcp-test são chamadas MCP para mcp.rhylthyme.com; rhylthyme validate, run, runs e calibrate nunca tocam a rede. Cada um tem seu próprio validador para o mesmo esquema de programa (JavaScript aqui, Python lá), então um programa é verificado novamente quando é publicado.

Use este repositório para conectar um assistente, para ler ou auto-hospedar o servidor, ou para alterar uma ferramenta. Use o rhylthyme se você tiver um arquivo de programa e um terminal, quiser temporizadores no terminal ou manter registros de execução.

Dois nomes para manter separados: rhylthyme-mcp no PyPI é a ponte stdio deste servidor (comando rhylthyme-mcp, fonte em python/); rhylthyme no PyPI é a ferramenta de linha de comando (comando rhylthyme; foi publicada como rhylthyme-cli-runner antes de 0.5.0). O formato do programa em si é definido em rhylthyme-spec, com exemplos em rhylthyme-examples.

Endpoints

URLNome do servidorAdiciona
https://mcp.rhylthyme.com/mcprhylthyme-mcpagendador 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, importação 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, sem estado. Não é necessário fazer login para o catálogo público ou as ferramentas puras; ferramentas de conta usam a conta Rhylthyme da pessoa através de OAuth 2.1, ou um token colado da ferramenta login em clientes sem OAuth. O servidor envia instructions descrevendo o fluxo de trabalho em initialize.

Início rápido: linhas do tempo a partir da linha de comando

O CLI rhylthyme pode acionar este servidor diretamente: descreva o que você precisa em linguagem simples e receba de volta uma URL de linha do tempo ao vivo, um arquivo de programa, ou 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 faz seu login pelo navegador e devolve a sessão a um listener de uso único em 127.0.0.1. Ela é armazenada em ~/.config/rhylthyme/credentials.json (modo 0600) e se renova sozinha, então você só faz login uma vez. generate então chama duas ferramentas neste servidor:

  1. import_text no endpoint para -e (/kitchen/mcp, /lab/mcp, …) transforma a solicitação em um programa multi-trilha validado. Ele executa quatro turnos de modelo no lado do servidor, por isso precisa de login; leva de 20 a 60 segundos e tem limite diário.
  2. visualize_schedule publica esse programa e retorna a URL da linha do tempo ao vivo no subdomínio correspondente.

Ele imprime o Gantt ASCII, o itinerário e a URL. Mais exemplos:

# 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
FlagSignificado
-e, --envgeneric (padrão), kitchen, lab, events ou gym. Escolhe o endpoint e o site da linha do tempo.
--byQuando tudo deve estar pronto: 19:00, dinner at 7pm.
--withLimites de equipamento e pessoas nas suas próprias palavras.
-f, --fileLê a solicitação ou o texto-fonte de um arquivo, ou - para stdin.
-o, --outputSalva o JSON do programa.
--runExecuta o programa no executor de terminal depois.
--openAbre a linha do tempo ao vivo em um navegador.
--no-publish, --json, -qPula a publicação; imprime JSON; imprime apenas a URL.

Para verificar um servidor (este, ou sua própria implantação) de ponta a ponta:

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

rhylthyme whoami mostra o login armazenado; rhylthyme logout o esquece. Em uma máquina sem navegador, defina RHYLTHYME_TOKEN para um token de acesso de https://www.rhylthyme.com/mcp/auth (dura cerca de uma hora), ou execute rhylthyme login --token <token>. RHYLTHYME_MCP_URL aponta o CLI para um servidor auto-hospedado.

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: Configurações → Conectores → Adicionar conector personalizado → cole uma das URLs acima. Ferramentas públicas funcionam imediatamente; execute login apenas para salvar na sua própria conta.

Plugin do Claude Code (o servidor hospedado mais uma skill que ensina o Claude a criar, validar e analisar agendas):

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

ChatGPT: Configurações → Apps e Conectores → Configurações avançadas → ative Modo desenvolvedor, depois Crie um conector com uma das URLs acima como URL do servidor MCP. Sem um conector, o ChatGPT não pode chamar essas ferramentas e recorre à navegação no site.

Cursor (.cursor/mcp.json):

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

Claude API (conector MCP, uma solicitação):

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."}],
)

Revisando uma importação. review_program (uma ferramenta de conta) faz um modelo ler um programa importado contra sua fonte e retornar descobertas: durações erradas, etapas omitidas, ordenação ruim, um total que discorda da fonte. Chame-a depois de import_from_source ou import_text, aplique o que ela disser, e valide novamente.

Clientes que só podem iniciar um comando: pip install rhylthyme-mcp fornece um comando rhylthyme-mcp, uma ponte stdio que passa cada solicitação para o servidor hospedado (fonte em python/):

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

Nenhum cliente MCP (um agente com um shell, um script): o servidor é sem estado, então um POST funciona sem handshake e sem conta.

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 chamado da mesma forma retorna a URL da linha do tempo ao vivo em result.structuredContent.url. Ou use o CLI do início rápido acima.

Ferramentas

FerramentaAnotaçõesO que faz
validate_programsomente leitura, puraVerificações estruturais e de agendamento (ids duplicados/ausentes, referências pendentes, ciclos, sobreposições dentro da trilha, tarefas sem restrição de recurso, durações não analisáveis, referências de escolha). Cada descoberta traz uma dica de code, message e fix. Saída estruturada.
analyze_schedulesomente leitura, puraInício/fim resolvido por etapa, makespan, a cadeia de dependências que o determina, janelas de conflito de recurso, folga por trilha, concorrência de pico vs. atores declarados. Passe finishAt ou startAt (ISO 8601) para horários de início em relógio. Saída estruturada.
visualize_schedulepublicaValida (recusa programas inválidos a menos que allowInvalid), cria um registro de compartilhamento, retorna uma prévia em markdown (imagem de capa, equipamento, ingredientes, Gantt ASCII, itinerário, verificação de agenda), um PNG inline da linha do tempo e a URL ao vivo. Saída estruturada.
preview_timelinepublica um registro de compartilhamentoPNG da linha do tempo apenas, sem prosa.
search_public_recipessomente leituraPesquisa por palavras-chave no catálogo público; environment seleciona cozinha (padrão), laboratório, evento ou academia. Saída estruturada.
load_public_recipesomente leituraResumo completo e URL ao vivo para uma entrada do catálogo.
cook_recipe / run_protocol / plan_event / start_workoutsomente leituraÚnica chamada em cada vertical: melhor correspondência do catálogo → URL ao vivo.
whats_for_dinner / random_protocol / random_event_template / surprise_workoutsomente leituraEscolha aleatória do catálogo em cada vertical.
import_from_sourcesomente leituraSpoonacular, TheMealDB, protocols.io, Cooklang, scripts da Opentrons Protocol API, Benchling → JSON de programa validado. search não precisa de token; import e random precisam do token do usuário.
create_environmentpuraLimites de equipamento e tipos de atores → JSON de ambiente.
login—Retorna a URL de login e depois verifica um token colado.
list_my_programs, load_program, save_programcontaA biblioteca do próprio usuário; save_program valida primeiro.
get_renderer_sourcesomente leituraFonte do renderizador de linha do tempo Apache-2.0, para artefatos HTML cujo sandbox bloqueia scripts externos.

Anotações (readOnlyHint, destructiveHint, idempotentHint, openWorldHint) são definidas em cada ferramenta; quatro ferramentas também declaram um outputSchema e retornam structuredContent. Falhas definem isError e dizem o que fazer em seguida.

Recursos e prompt

  • rhylthyme://schema/program: o JSON Schema do programa (0.3.0-alpha)
  • rhylthyme://guide/authoring: regras de autoria em uma página, vocabulário de gatilhos, como fazer faixas terminarem juntas, trabalho repetido (replicates, cadeias instances: "each" por instância, barreiras "all" e maxInFlight), ramificação por escolha
  • rhylthyme://guide/tools: a forma longa de cada descrição de ferramenta. A própria lista de ferramentas é mantida em cerca de 3.600 tokens para que seja barato mantê-la 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 é o exemplo trabalhado por instância / em voo da 0.3.0-alpha)
  • prompt plan_schedule(goal, finishAt?, constraints?): guia o modelo por busca → construção → validação → análise → visualização, e nomeia replicates / instances / maxInFlight em sua etapa de restrições

Como é um 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 }
  ]
}

Etapas em uma faixa são executadas sequencialmente; trabalho paralelo vai em faixas separadas; cada task precisa de uma restrição de recurso; durações e deslocamentos usam segundos ou strings como "5m". Gatilhos: programStart, programStartOffset, afterStep (fim ou event: "start", deslocamento com sinal), afterStepWithBuffer, manual, onAbort ou {logic: all|any, triggers}. Durações: fixed, variable (encerrada antes pelo executor), indefinite (encerrada pelo executor).

Autohospedagem

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 na raiz do repositório; vercel.json reescreve os caminhos dos endpoints para a função.

O que a autohospedagem oferece e não oferece: validação, análise de tempo, o renderizador, recursos e prompts são executados no seu processo. Busca de catálogo, compartilhamento (visualize_schedule), importações e ferramentas de conta chamam a API pública em https://www.rhylthyme.com (API_BASE em mcp-api/index.js), então essas ainda dependem do serviço hospedado. A rota de pré-visualização PNG /api/og/timeline.png adicionalmente precisa de SUPABASE_URL e SUPABASE_ANON_KEY para acesso de leitura a programas compartilhados; nada mais precisa.

Estrutura

  • mcp-api/index.js: registro de ferramentas, recursos e prompts; detecção vertical; rota de imagem OG; handler Vercel
  • mcp-api/schedule.js: validador e analisador (puro)
  • static/js/timeline-render.js: motor de tempo e Gantt SVG (também publicado como @rhylthyme/timeline)
  • static/schema/, static/examples/: os recursos
  • src/index.js: executor HTTP autônomo
  • mcp-api/server.json: manifesto do registro MCP
  • .claude-plugin/marketplace.json, plugins/rhylthyme/: o marketplace e o plugin do Claude (claude plugin validate .); a skill nele é uma cópia verificada de skills/rhylthyme em rhylthyme
  • python/: o pacote PyPI rhylthyme-mcp, uma ponte stdio para o servidor hospedado (cd python && PYTHONPATH=src pytest tests)

Limitações conhecidas

  • login entrega ao usuário uma URL e espera um token de acesso colado e de curta duração que depois viaja como argumento de ferramenta; está fora do fluxo OAuth 2.1 do MCP. Hosts que exigem OAuth para servidores autenticados ainda podem usar todas as ferramentas públicas.
  • search_public_recipes pesquisa um ambiente por vez; o endpoint genérico usa kitchen por padrão.
  • As anotações de ferramentas são dicas autodeclaradas; os hosts podem ignorá-las.

Licença

Apache-2.0, como o resto do Rhylthyme. (Este repositório foi MIT até setembro de 2026.)