MCP-Server

Rhylthyme

com.rhylthyme/rhylthyme
Produktivität Öffentlich und erreichbar MCP 2025-11-25

Was dieses MCP kann

Creates, validates, analyzes, calibrates, and publishes multi-track schedules for recipes, lab protocols, events, and workouts.

analyze_schedule
Analyze schedule timing
Put a program on the clock: each step's start and end, total length, the critical path and what gates it, resource conflicts, slack per track. Pass finishAt to answer 'when do I start X so everything is ready at 6pm?'. Pure computation. With `history` (run records) or `program_id` it also predicts durations from recorded runs.
Nur Lesen Idempotent
Eingabeschema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['program'], 'properties': {'token': {'type': 'string', 'description': 'Access token from the login tool. Omit when the account is connected.'}, 'history': {'type': 'array', 'items': {'type': 'object', 'properties': {}, 'additionalProperties': {}}, 'description': 'Recorded runs of this program (from load_run); adds predicted durations.'}, 'program': {'type': 'object', 'properties': {}, 'description': 'Program JSON; shape under validate_program.', 'additionalProperties': {}}, 'startAt': {'type': 'string', 'description': 'ISO 8601 start datetime. Ignored with finishAt.'}, 'finishAt': {'type': 'string', 'description': "ISO 8601 datetime everything must END at, e.g. '2026-11-26T18:00:00-05:00'. Start times are worked backwards from it."}, 'program_id': {'type': 'string', 'description': "Saved program UUID: loads the user's own recorded runs as the history."}, 'useDurations': {'enum': ['planned', 'predicted'], 'type': 'string', 'default': 'planned', 'description': 'planned (default): analyse the program as authored. predicted: as the history says it will run.'}, 'predictionContext': {'type': 'object', 'properties': {}, 'description': 'Optional: environmentId, userTags (variance factors), userId, programVersion, minIdentical, minModel, corrThreshold, verdicts. See rhylthyme://guide/tools.', 'additionalProperties': {}}}}
Ausgabeschema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['programId', 'name', 'makespanSeconds', 'makespan', 'tracks', 'steps', 'criticalPath', 'resourceConflicts', 'actorPeak', 'wallClock'], 'properties': {'name': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'steps': {'type': 'array', 'items': {'type': 'object', 'properties': {}, 'additionalProperties': {}}}, 'tracks': {'type': 'array', 'items': {'type': 'object', 'properties': {}, 'additionalProperties': {}}}, 'inFlight': {'type': 'array', 'items': {'type': 'object', 'properties': {}, 'additionalProperties': {}}}, 'makespan': {'type': 'string'}, 'actorPeak': {'type': 'object', 'properties': {}, 'additionalProperties': {}}, 'programId': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'wallClock': {'anyOf': [{'type': 'object', 'properties': {}, 'additionalProperties': {}}, {'type': 'null'}]}, 'validation': {'type': 'object', 'properties': {}, 'additionalProperties': {}}, 'criticalPath': {'type': 'array', 'items': {'type': 'string'}}, 'durationsUsed': {'type': 'string'}, 'makespanSeconds': {'type': 'number'}, 'plannedMakespan': {'type': 'string'}, 'predictedMakespan': {'type': 'string'}, 'resourceConflicts': {'type': 'array', 'items': {'type': 'object', 'properties': {}, 'additionalProperties': {}}}, 'bindingConstraints': {'type': 'array', 'items': {'type': 'object', 'properties': {}, 'additionalProperties': {}}}, 'predictedCriticalPath': {'type': 'array', 'items': {'type': 'string'}}, 'plannedMakespanSeconds': {'type': 'number'}, 'predictedMakespanSeconds': {'type': 'number'}}, 'additionalProperties': False}
calibrate_program
Propose durations from recorded runs
Propose durations for a saved program from its recorded runs: median as the default, P10 to P90 as the range, at least as wide as the author's, with the evidence per step and the effect on total length. Saves nothing; with `accept` it returns the calibrated program. Needs the user's Rhylthyme account.
Nur Lesen Externer Zugriff Idempotent
Eingabeschema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'k': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 1, 'description': 'Measurements a step needs for a proposal (default 5).'}, 'since': {'type': 'string', 'description': 'Only runs started on or after this date (YYYY-MM-DD or ISO).'}, 'token': {'type': 'string', 'description': 'Access token from the login tool. Omit when the account is connected.'}, 'accept': {'anyOf': [{'type': 'string', 'const': 'all'}, {'type': 'array', 'items': {'type': 'string'}}], 'description': 'Step ids to accept, or "all": also returns the calibrated program. Nothing is saved either way.'}, 'history': {'type': 'array', 'items': {'type': 'object', 'properties': {}, 'additionalProperties': {}}, 'description': 'Run records to use instead of the stored ones.'}, 'program': {'type': 'object', 'properties': {}, 'description': "Program JSON to calibrate; omit to use program_id's saved JSON.", 'additionalProperties': {}}, 'program_id': {'type': 'string', 'description': 'Saved program UUID whose recorded runs are the evidence.'}}}
create_environment
Define equipment limits
Describe a workspace's equipment limits (one oven, two centrifuges, one stage) as resourceConstraints to copy into a program, so steps that share equipment are scheduled around each other.
Nur Lesen Idempotent
Eingabeschema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['name', 'type', 'resourceConstraints'], 'properties': {'name': {'type': 'string'}, 'type': {'enum': ['kitchen', 'laboratory', 'bakery', 'airport', 'restaurant', 'manufacturing', 'hospital', 'workshop', 'event', 'gym', 'general'], 'type': 'string'}, 'actors': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 1, 'description': 'How many people can work at once (default 1).'}, 'description': {'type': 'string'}, 'resourceConstraints': {'type': 'array', 'items': {'type': 'object', 'required': ['task', 'maxConcurrent'], 'properties': {'task': {'type': 'string'}, 'description': {'type': 'string'}, 'maxConcurrent': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 1}}, 'additionalProperties': {}}, 'minItems': 1}}}
get_renderer_source
Get timeline renderer source
Return the open-source timeline renderer's JavaScript (Apache-2.0, about 90 KB, no dependencies) for an HTML page or artifact that cannot load external scripts; it defines Rhylthyme.renderTimeline(container, program).
Nur Lesen Externer Zugriff Idempotent
Eingabeschema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {}}
import_from_source
Import from an external source
Import a recipe or protocol from a URL or service into a program. source: spoonacular, themealdb (recipes); protocolsio, opentrons, benchling (lab); cooklang (.cook URL). action: search (no account needed), import (query = URL or id), random. import, random and benchling need the user's Rhylthyme account. `enrich: true` splits an import into parallel tracks. Returns the program.
Nur Lesen Externer Zugriff Idempotent
Eingabeschema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['source', 'action'], 'properties': {'text': {'type': 'string', 'description': 'Pasted source (an Opentrons .py) instead of a URL.'}, 'query': {'type': 'string', 'description': 'Keywords (search), or the URL or id (import).'}, 'token': {'type': 'string', 'description': 'Access token from the login tool. Omit when the account is connected.'}, 'action': {'enum': ['search', 'import', 'random'], 'type': 'string'}, 'enrich': {'type': 'boolean', 'description': "With action='import': split the import into parallel tracks with cross-track triggers. One model call, capped per day."}, 'source': {'enum': ['themealdb', 'protocolsio', 'spoonacular', 'cooklang', 'opentrons', 'benchling', 'llm-text'], 'type': 'string'}}}
import_text
Import pasted text
Turn pasted text (a recipe, protocol, run sheet or training plan) into a validated multi-track program on the server, in four model turns, with a table of the source span each step came from. Capped per day. Needs the user's Rhylthyme account.
Nur Lesen Externer Zugriff Idempotent
Eingabeschema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['text', 'environmentType'], 'properties': {'text': {'type': 'string', 'description': 'The source text, all of it, as the user wrote or pasted it.'}, 'hints': {'type': 'string', 'description': "Equipment and people limits in the user's words, e.g. 'one oven, two burners, one cook'."}, 'token': {'type': 'string', 'description': 'Access token from the login tool. Omit when the account is connected.'}, 'deadline': {'type': 'string', 'description': "When everything must be finished, if the user said: '18:00', 'dinner at six', an ISO datetime."}, 'environmentType': {'type': 'string', 'description': 'kitchen, lab, events, gym or generic.'}}}
list_my_programs
List my saved programs
List the user's saved programs. Needs the user's Rhylthyme account.
Nur Lesen Externer Zugriff Idempotent
Eingabeschema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'token': {'type': 'string', 'description': 'Access token from the login tool. Omit when the account is connected.'}}}
list_public_runs
List contributed runs
List anonymous runs other people contributed for one exact program version: actual against planned length, and their conditions. For 'how long does this really take?'. No account needed. Takes `program` or `program_hash`.
Nur Lesen Externer Zugriff Idempotent
Eingabeschema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'limit': {'type': 'integer', 'maximum': 200, 'minimum': 1, 'description': 'Runs to return, newest first (default 50).'}, 'program': {'type': 'object', 'properties': {}, 'description': 'Program JSON to look up instead; hashed here.', 'additionalProperties': {}}, 'program_hash': {'type': 'string', 'description': "Program hash, 'sha256:' + 64 hex (a run record's programVersion)."}}}
list_runs
List recorded runs
List recorded runs of a saved program: when, how it ended, actual against planned length. For 'how long did this take last time?'. Needs the user's Rhylthyme account.
Nur Lesen Externer Zugriff Idempotent
Eingabeschema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['program_id'], 'properties': {'token': {'type': 'string', 'description': 'Access token from the login tool. Omit when the account is connected.'}, 'program_id': {'type': 'string', 'description': 'Program UUID from list_my_programs.'}}}
load_program
Open a saved program
Open one of the user's saved programs by id: summary plus live-timeline URL. Needs the user's Rhylthyme account.
Nur Lesen Externer Zugriff Idempotent
Eingabeschema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['program_id'], 'properties': {'token': {'type': 'string', 'description': 'Access token from the login tool. Omit when the account is connected.'}, 'program_id': {'type': 'string', 'description': 'Program UUID from list_my_programs.'}}}
load_public_recipe
Open a public program
Open a public catalog entry by id: summary plus live-timeline URL.
Nur Lesen Externer Zugriff Idempotent
Eingabeschema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['program_id'], 'properties': {'program_id': {'type': 'string', 'description': 'Program UUID (from search_public_recipes)'}}}
load_run
Open a recorded run
Open one recorded run: planned against actual timing per step, what ended each step, pauses. Shows where a plan drifts. Needs the user's Rhylthyme account.
Nur Lesen Externer Zugriff Idempotent
Eingabeschema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['run_id'], 'properties': {'token': {'type': 'string', 'description': 'Access token from the login tool. Omit when the account is connected.'}, 'run_id': {'type': 'string', 'description': 'Run UUID from list_runs.'}}}
login
Connect Rhylthyme account
For apps that cannot connect the Rhylthyme account directly: returns a sign-in URL, then accepts the pasted token. Only the user's own saved programs, runs and imports need it; everything public works without. Tokens last about an hour.
Nur Lesen Externer Zugriff Idempotent
Eingabeschema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'token': {'type': 'string', 'description': 'The token from the login page. Leave empty on the first call to get the sign-in URL.'}}}
preview_timeline
Preview timeline image
Return a static Gantt image of a program with a caption, for 'show me a preview' or 'a picture of the timeline'. The image is served from a public share link. Planned versus actual: with `run` (a run record) it draws the actual bars over the plan.
Destruktiv Externer Zugriff
Eingabeschema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['program'], 'properties': {'run': {'type': 'object', 'properties': {}, 'description': 'A recorded run of the same program (the `run` object from load_run): draws planned versus actual.', 'additionalProperties': {}}, 'program': {'type': 'object', 'properties': {}, 'description': 'Program JSON; shape under validate_program.', 'additionalProperties': {}}}}
review_program
Review an imported program
A model reads an imported program against its source and reports what looks wrong: a default duration on "simmer for an hour", a step the importer dropped, steps chained that could overlap, a total that disagrees with the source. Changes nothing; returns findings to show the user. Needs the user's Rhylthyme account.
Nur Lesen Externer Zugriff Idempotent
Eingabeschema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['program'], 'properties': {'token': {'type': 'string', 'description': 'Access token from the login tool. Omit when the account is connected.'}, 'program': {'type': 'object', 'properties': {}, 'description': 'Program JSON; shape under validate_program.', 'additionalProperties': {}}, 'source_url': {'type': 'string', 'description': 'Its URL, when the text is not to hand.'}, 'source_text': {'type': 'string', 'description': 'The source text (recipe, protocol), if you have it.'}}}
save_program
Save to my account
Save a program to the user's account ('save this for later'); the same programId updates it. Needs the user's Rhylthyme account.
Destruktiv Externer Zugriff Idempotent
Eingabeschema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['program'], 'properties': {'token': {'type': 'string', 'description': 'Access token from the login tool. Omit when the account is connected.'}, 'program': {'type': 'object', 'properties': {}, 'description': 'Program JSON; shape under validate_program.', 'additionalProperties': {}}}}
search_public_recipes
Search the public catalog
Search the public catalog of recipes, lab protocols, event templates and workouts by name or keyword. Returns ids, names, descriptions and URLs; no account needed.
Nur Lesen Externer Zugriff Idempotent
Eingabeschema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'limit': {'type': 'integer', 'default': 20, 'maximum': 50, 'minimum': 1}, 'query': {'type': 'string', 'default': '', 'description': 'Keyword; matches name and description. Empty returns the newest entries.'}, 'environment': {'enum': ['kitchen', 'laboratory', 'gym', 'event', 'events'], 'type': 'string', 'default': 'kitchen', 'description': 'Which catalog: kitchen (default), laboratory, event or gym.'}}}
Ausgabeschema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['query', 'environment', 'count', 'results'], 'properties': {'count': {'type': 'number'}, 'query': {'type': 'string'}, 'results': {'type': 'array', 'items': {'type': 'object', 'required': ['id', 'name', 'description', 'url'], 'properties': {'id': {'type': 'string'}, 'url': {'type': 'string'}, 'name': {'type': 'string'}, 'description': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}}, 'additionalProperties': {}}}, 'environment': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}}, 'additionalProperties': False}
validate_program
Validate a program
Check a program before publishing or saving it: ids, dangling or cyclic triggers, steps overlapping in a track, tasks with no resourceConstraint, durations, replicates/instances misuse. Every finding has a code, a message and a suggested fix. Pure computation.
Nur Lesen Idempotent
Eingabeschema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['program'], 'properties': {'program': {'type': 'object', 'properties': {}, 'description': "Program JSON: {programId, name, environmentType?, actors?, tracks: [{trackId, name, steps: [{stepId (unique program-wide), name, task?, duration, startTrigger, replicates?, choice?}]}], resourceConstraints: [{task, maxConcurrent}], metadata?}. duration: {type:'fixed', seconds} | {type:'variable', minSeconds, maxSeconds, defaultSeconds} | {type:'indefinite', defaultSeconds}; seconds are numbers or strings like '5m', '1h30m'. startTrigger: {type:'programStart'} | {type:'programStartOffset', offsetSeconds} | {type:'afterStep', stepId, offsetSeconds?, event?:'start', instances?:'each'|'all'} | {type:'afterStepWithBuffer', stepId, bufferSeconds} | {type:'manual'}. Steps in one track never overlap; every task needs a resourceConstraint. Rules and examples: rhylthyme://guide/authoring; full schema: rhylthyme://schema/program.", 'additionalProperties': {}}}}
Ausgabeschema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['valid', 'errors', 'warnings', 'stats'], 'properties': {'info': {'type': 'array', 'items': {'type': 'object', 'properties': {}, 'additionalProperties': {}}}, 'stats': {'anyOf': [{'type': 'object', 'properties': {}, 'additionalProperties': {}}, {'type': 'null'}]}, 'valid': {'type': 'boolean'}, 'errors': {'type': 'array', 'items': {'type': 'object', 'properties': {}, 'additionalProperties': {}}}, 'warnings': {'type': 'array', 'items': {'type': 'object', 'properties': {}, 'additionalProperties': {}}}}, 'additionalProperties': False}
visualize_schedule
Publish a live timeline
Publish a program as a live, shareable timeline (a public share link) and return its URL, with an ASCII Gantt and an itinerary. For a schedule the user wants to follow or share ('plan this so it all finishes at 6', 'when do I start each thing'). Validates first and refuses an invalid program with fix hints.
Destruktiv Externer Zugriff
Eingabeschema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['program'], 'properties': {'program': {'type': 'object', 'properties': {}, 'description': 'Program JSON; shape under validate_program.', 'additionalProperties': {}}, 'allowInvalid': {'type': 'boolean', 'default': False, 'description': 'Publish despite validation errors. Only when the user explicitly wants an imperfect draft shared.'}}}
Ausgabeschema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['url', 'shareId', 'imageUrl', 'makespanSeconds', 'warnings'], 'properties': {'url': {'type': 'string'}, 'shareId': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'imageUrl': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'warnings': {'type': 'array', 'items': {'type': 'object', 'properties': {}, 'additionalProperties': {}}}, 'makespanSeconds': {'type': 'number'}}, 'additionalProperties': False}
Geändert
get_renderer_source
30. September 2026 02:41
Geändert
preview_timeline
30. September 2026 02:41
Geändert
load_public_recipe
30. September 2026 02:41
Geändert
search_public_recipes
30. September 2026 02:41
Geändert
list_public_runs
30. September 2026 02:41
Geändert
calibrate_program
30. September 2026 02:41
Geändert
import_text
30. September 2026 02:41
Geändert
import_from_source
30. September 2026 02:41
Geändert
analyze_schedule
30. September 2026 02:41
Geändert
get_renderer_source
28. September 2026 02:41
Geändert
preview_timeline
28. September 2026 02:41
Geändert
save_program
28. September 2026 02:41
Geändert
load_public_recipe
28. September 2026 02:41
Geändert
search_public_recipes
28. September 2026 02:41
Geändert
list_public_runs
28. September 2026 02:41
Geändert
calibrate_program
28. September 2026 02:41
Geändert
load_run
28. September 2026 02:41
Geändert
review_program
28. September 2026 02:41
Geändert
list_runs
28. September 2026 02:41
Geändert
load_program
28. September 2026 02:41
Geändert
list_my_programs
28. September 2026 02:41
Geändert
login
28. September 2026 02:41
Geändert
create_environment
28. September 2026 02:41
Geändert
import_text
28. September 2026 02:41
Geändert
import_from_source
28. September 2026 02:41
Geändert
visualize_schedule
28. September 2026 02:41
Geändert
analyze_schedule
28. September 2026 02:41
Geändert
validate_program
28. September 2026 02:41
Hinzugefügt
review_program
24. September 2026 02:40
Geändert
analyze_schedule
24. September 2026 02:40