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
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:
| Chamada | O que retornou |
|---|---|
validate_program | ✅ Program is valid — 2 tracks, 20 steps, 30m makespan. |
analyze_schedule | Resource 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_schedule | um 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

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-mcp | rhylthyme | |
|---|---|---|
| O que é | O servidor MCP: as ferramentas que um assistente de IA chama | Um programa de linha de comando: o comando rhylthyme |
| Quem usa | Claude, ChatGPT, Cursor ou qualquer cliente MCP, em nome de uma pessoa | Uma pessoa em um terminal, um script ou CI |
| Onde roda | Hospedado em mcp.rhylthyme.com; nada para instalar | Na sua máquina: pip install rhylthyme |
| Linguagem | JavaScript (Node 20+) | Python 3.12+ |
| Entrada | Um programa que o assistente constrói em conversa | Um arquivo de programa em disco (JSON ou YAML) |
| Validar um programa | validate_program | rhylthyme validate (funciona offline) |
| Tempo, conflitos, prazos | analyze_schedule | rhylthyme analyze (pergunta ao servidor) |
| Publicar uma linha do tempo ao vivo | visualize_schedule | rhylthyme publish (pergunta ao servidor) |
| Executar uma agenda com temporizadores | não: ele devolve um link para a linha do tempo web | rhylthyme run, um executor interativo de terminal |
| Execuções registradas, calibração | lê execuções salvas em uma conta | registra execuções localmente; rhylthyme runs, rhylthyme calibrate |
| Pesquisa de catálogo, importações, biblioteca da conta | sim | não |
| Também no repositório | o pacote PyPI rhylthyme-mcp (uma ponte stdio para o servidor hospedado), o marketplace de plugins do Claude | a 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
| URL | Nome do servidor | Adiciona |
|---|---|---|
https://mcp.rhylthyme.com/mcp | rhylthyme-mcp | agendador 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, importação 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, 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:
import_textno 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.visualize_schedulepublica 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
| Flag | Significado |
|---|---|
-e, --env | generic (padrão), kitchen, lab, events ou gym. Escolhe o endpoint e o site da linha do tempo. |
--by | Quando tudo deve estar pronto: 19:00, dinner at 7pm. |
--with | Limites de equipamento e pessoas nas suas próprias palavras. |
-f, --file | Lê a solicitação ou o texto-fonte de um arquivo, ou - para stdin. |
-o, --output | Salva o JSON do programa. |
--run | Executa o programa no executor de terminal depois. |
--open | Abre a linha do tempo ao vivo em um navegador. |
--no-publish, --json, -q | Pula 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
| Ferramenta | Anotações | O que faz |
|---|---|---|
validate_program | somente leitura, pura | Verificaçõ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_schedule | somente leitura, pura | Iní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_schedule | publica | Valida (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_timeline | publica um registro de compartilhamento | PNG da linha do tempo apenas, sem prosa. |
search_public_recipes | somente leitura | Pesquisa por palavras-chave no catálogo público; environment seleciona cozinha (padrão), laboratório, evento ou academia. Saída estruturada. |
load_public_recipe | somente leitura | Resumo completo e URL ao vivo para uma entrada do catálogo. |
cook_recipe / run_protocol / plan_event / start_workout | somente leitura | Única chamada em cada vertical: melhor correspondência do catálogo → URL ao vivo. |
whats_for_dinner / random_protocol / random_event_template / surprise_workout | somente leitura | Escolha aleatória do catálogo em cada vertical. |
import_from_source | somente leitura | Spoonacular, 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_environment | pura | Limites 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_program | conta | A biblioteca do próprio usuário; save_program valida primeiro. |
get_renderer_source | somente leitura | Fonte 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, cadeiasinstances: "each"por instância, barreiras"all"emaxInFlight), ramificação por escolharhylthyme://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 conectadarhylthyme://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 nomeiareplicates/instances/maxInFlightem 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 Vercelmcp-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 recursossrc/index.js: executor HTTP autônomomcp-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 deskills/rhylthymeem rhylthymepython/: o pacote PyPIrhylthyme-mcp, uma ponte stdio para o servidor hospedado (cd python && PYTHONPATH=src pytest tests)
Limitações conhecidas
loginentrega 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_recipespesquisa 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.)