Server definition
- Hash
- sha256:79be0cc9c298a13ad7f55a8c0f3116db55dc4db9acd47a3421e9cc26af05a6e5
- What it is
- What a remote MCP server returned when asked what it offers: 19 tools
The blob, as servednamed by its sha256
{
"instructions": "Rhylthyme schedules any real-time, multi-track process — cooking, lab protocols, event run-of-shows, workouts, manufacturing, turnarounds. A \"program\" is JSON: parallel **tracks** of sequential **steps**, each with a duration and a startTrigger (programStart / afterStep / programStartOffset / afterStepWithBuffer / manual), plus **resourceConstraints** (e.g. one oven) that the live runner enforces.\nWorkflow:\n- Existing content: **search_public_recipes** → **load_public_recipe** (or the one-shot tool). The result already includes the live URL.\n- New content: build the program → **validate_program** (fix every error it reports) → optionally **analyze_schedule** (makespan, critical path, conflicts, wall clock when you pass finishAt/startAt) → **visualize_schedule** for the shareable live timeline. visualize_schedule validates too and refuses invalid programs.\n- visualize_schedule returns the live timeline URL together with an ASCII Gantt and an itinerary.\n- **login** is only needed for the private library (list_my_programs, load_program, save_program) and for imports. Public catalog tools need no token.\nAuthoring rules: stepIds unique across the whole program; steps in one track never overlap (chain with afterStep); every `task` used by a step has a matching resourceConstraint; durations in seconds (numbers) or time strings (\"5m\", \"1h30m\"); repeated work is `replicates` on ONE step with `instances: \"each\"`/`\"all\"` and `maxInFlight`, never copied steps; to make everything finish together, delay short tracks with programStartOffset or afterStep, and pass finishAt to analyze_schedule for wall-clock start times.\nAuthoring from a goal or a source text: run the **plan_schedule** prompt — four turns (read the source back → confirm the program model → extract the steps with the words they came from → assign tracks and triggers). The same four turns are documented in `rhylthyme://guide/extraction` for clients without multi-message prompt support. `rhylthyme://guide/authoring` is the cheat-sheet, `rhylthyme://guide/tools` the long form of each tool, `rhylthyme://schema/program` the full JSON schema, `rhylthyme://examples/*` complete valid programs.",
"tools": [
{
"description": "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.",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"finishAt": {
"description": "ISO 8601 datetime everything must END at, e.g. '2026-11-26T18:00:00-05:00'. Start times are worked backwards from it.",
"type": "string"
},
"history": {
"description": "Recorded runs of this program (from load_run); adds predicted durations.",
"items": {
"additionalProperties": {},
"properties": {},
"type": "object"
},
"type": "array"
},
"predictionContext": {
"additionalProperties": {},
"description": "Optional: environmentId, userTags (variance factors), userId, programVersion, minIdentical, minModel, corrThreshold, verdicts. See rhylthyme://guide/tools.",
"properties": {},
"type": "object"
},
"program": {
"additionalProperties": {},
"description": "Program JSON; shape under validate_program.",
"properties": {},
"type": "object"
},
"program_id": {
"description": "Saved program UUID: loads the user's own recorded runs as the history.",
"type": "string"
},
"startAt": {
"description": "ISO 8601 start datetime. Ignored with finishAt.",
"type": "string"
},
"token": {
"description": "Access token from the login tool. Omit when the account is connected.",
"type": "string"
},
"useDurations": {
"default": "planned",
"description": "planned (default): analyse the program as authored. predicted: as the history says it will run.",
"enum": [
"planned",
"predicted"
],
"type": "string"
}
},
"required": [
"program"
],
"type": "object"
},
"name": "analyze_schedule",
"outputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false,
"properties": {
"actorPeak": {
"additionalProperties": {},
"properties": {},
"type": "object"
},
"bindingConstraints": {
"items": {
"additionalProperties": {},
"properties": {},
"type": "object"
},
"type": "array"
},
"criticalPath": {
"items": {
"type": "string"
},
"type": "array"
},
"durationsUsed": {
"type": "string"
},
"inFlight": {
"items": {
"additionalProperties": {},
"properties": {},
"type": "object"
},
"type": "array"
},
"makespan": {
"type": "string"
},
"makespanSeconds": {
"type": "number"
},
"name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"plannedMakespan": {
"type": "string"
},
"plannedMakespanSeconds": {
"type": "number"
},
"predictedCriticalPath": {
"items": {
"type": "string"
},
"type": "array"
},
"predictedMakespan": {
"type": "string"
},
"predictedMakespanSeconds": {
"type": "number"
},
"programId": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"resourceConflicts": {
"items": {
"additionalProperties": {},
"properties": {},
"type": "object"
},
"type": "array"
},
"steps": {
"items": {
"additionalProperties": {},
"properties": {},
"type": "object"
},
"type": "array"
},
"tracks": {
"items": {
"additionalProperties": {},
"properties": {},
"type": "object"
},
"type": "array"
},
"validation": {
"additionalProperties": {},
"properties": {},
"type": "object"
},
"wallClock": {
"anyOf": [
{
"additionalProperties": {},
"properties": {},
"type": "object"
},
{
"type": "null"
}
]
}
},
"required": [
"programId",
"name",
"makespanSeconds",
"makespan",
"tracks",
"steps",
"criticalPath",
"resourceConflicts",
"actorPeak",
"wallClock"
],
"type": "object"
}
},
{
"description": "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.",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"accept": {
"anyOf": [
{
"const": "all",
"type": "string"
},
{
"items": {
"type": "string"
},
"type": "array"
}
],
"description": "Step ids to accept, or \"all\": also returns the calibrated program. Nothing is saved either way."
},
"history": {
"description": "Run records to use instead of the stored ones.",
"items": {
"additionalProperties": {},
"properties": {},
"type": "object"
},
"type": "array"
},
"k": {
"description": "Measurements a step needs for a proposal (default 5).",
"maximum": 9007199254740991,
"minimum": 1,
"type": "integer"
},
"program": {
"additionalProperties": {},
"description": "Program JSON to calibrate; omit to use program_id's saved JSON.",
"properties": {},
"type": "object"
},
"program_id": {
"description": "Saved program UUID whose recorded runs are the evidence.",
"type": "string"
},
"since": {
"description": "Only runs started on or after this date (YYYY-MM-DD or ISO).",
"type": "string"
},
"token": {
"description": "Access token from the login tool. Omit when the account is connected.",
"type": "string"
}
},
"type": "object"
},
"name": "calibrate_program",
"outputSchema": null
},
{
"description": "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.",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"actors": {
"description": "How many people can work at once (default 1).",
"maximum": 9007199254740991,
"minimum": 1,
"type": "integer"
},
"description": {
"type": "string"
},
"name": {
"type": "string"
},
"resourceConstraints": {
"items": {
"additionalProperties": {},
"properties": {
"description": {
"type": "string"
},
"maxConcurrent": {
"maximum": 9007199254740991,
"minimum": 1,
"type": "integer"
},
"task": {
"type": "string"
}
},
"required": [
"task",
"maxConcurrent"
],
"type": "object"
},
"minItems": 1,
"type": "array"
},
"type": {
"enum": [
"kitchen",
"laboratory",
"bakery",
"airport",
"restaurant",
"manufacturing",
"hospital",
"workshop",
"event",
"gym",
"general"
],
"type": "string"
}
},
"required": [
"name",
"type",
"resourceConstraints"
],
"type": "object"
},
"name": "create_environment",
"outputSchema": null
},
{
"description": "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).",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {},
"type": "object"
},
"name": "get_renderer_source",
"outputSchema": null
},
{
"description": "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.",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"action": {
"enum": [
"search",
"import",
"random"
],
"type": "string"
},
"enrich": {
"description": "With action='import': split the import into parallel tracks with cross-track triggers. One model call, capped per day.",
"type": "boolean"
},
"query": {
"description": "Keywords (search), or the URL or id (import).",
"type": "string"
},
"source": {
"enum": [
"themealdb",
"protocolsio",
"spoonacular",
"cooklang",
"opentrons",
"benchling",
"llm-text"
],
"type": "string"
},
"text": {
"description": "Pasted source (an Opentrons .py) instead of a URL.",
"type": "string"
},
"token": {
"description": "Access token from the login tool. Omit when the account is connected.",
"type": "string"
}
},
"required": [
"source",
"action"
],
"type": "object"
},
"name": "import_from_source",
"outputSchema": null
},
{
"description": "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.",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"deadline": {
"description": "When everything must be finished, if the user said: '18:00', 'dinner at six', an ISO datetime.",
"type": "string"
},
"environmentType": {
"description": "kitchen, lab, events, gym or generic.",
"type": "string"
},
"hints": {
"description": "Equipment and people limits in the user's words, e.g. 'one oven, two burners, one cook'.",
"type": "string"
},
"text": {
"description": "The source text, all of it, as the user wrote or pasted it.",
"type": "string"
},
"token": {
"description": "Access token from the login tool. Omit when the account is connected.",
"type": "string"
}
},
"required": [
"text",
"environmentType"
],
"type": "object"
},
"name": "import_text",
"outputSchema": null
},
{
"description": "List the user's saved programs. Needs the user's Rhylthyme account.",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"token": {
"description": "Access token from the login tool. Omit when the account is connected.",
"type": "string"
}
},
"type": "object"
},
"name": "list_my_programs",
"outputSchema": null
},
{
"description": "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`.",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"limit": {
"description": "Runs to return, newest first (default 50).",
"maximum": 200,
"minimum": 1,
"type": "integer"
},
"program": {
"additionalProperties": {},
"description": "Program JSON to look up instead; hashed here.",
"properties": {},
"type": "object"
},
"program_hash": {
"description": "Program hash, 'sha256:' + 64 hex (a run record's programVersion).",
"type": "string"
}
},
"type": "object"
},
"name": "list_public_runs",
"outputSchema": null
},
{
"description": "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.",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"program_id": {
"description": "Program UUID from list_my_programs.",
"type": "string"
},
"token": {
"description": "Access token from the login tool. Omit when the account is connected.",
"type": "string"
}
},
"required": [
"program_id"
],
"type": "object"
},
"name": "list_runs",
"outputSchema": null
},
{
"description": "Open one of the user's saved programs by id: summary plus live-timeline URL. Needs the user's Rhylthyme account.",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"program_id": {
"description": "Program UUID from list_my_programs.",
"type": "string"
},
"token": {
"description": "Access token from the login tool. Omit when the account is connected.",
"type": "string"
}
},
"required": [
"program_id"
],
"type": "object"
},
"name": "load_program",
"outputSchema": null
},
{
"description": "Open a public catalog entry by id: summary plus live-timeline URL.",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"program_id": {
"description": "Program UUID (from search_public_recipes)",
"type": "string"
}
},
"required": [
"program_id"
],
"type": "object"
},
"name": "load_public_recipe",
"outputSchema": null
},
{
"description": "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.",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"run_id": {
"description": "Run UUID from list_runs.",
"type": "string"
},
"token": {
"description": "Access token from the login tool. Omit when the account is connected.",
"type": "string"
}
},
"required": [
"run_id"
],
"type": "object"
},
"name": "load_run",
"outputSchema": null
},
{
"description": "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.",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"token": {
"description": "The token from the login page. Leave empty on the first call to get the sign-in URL.",
"type": "string"
}
},
"type": "object"
},
"name": "login",
"outputSchema": null
},
{
"description": "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.",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"program": {
"additionalProperties": {},
"description": "Program JSON; shape under validate_program.",
"properties": {},
"type": "object"
},
"run": {
"additionalProperties": {},
"description": "A recorded run of the same program (the `run` object from load_run): draws planned versus actual.",
"properties": {},
"type": "object"
}
},
"required": [
"program"
],
"type": "object"
},
"name": "preview_timeline",
"outputSchema": null
},
{
"description": "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.",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"program": {
"additionalProperties": {},
"description": "Program JSON; shape under validate_program.",
"properties": {},
"type": "object"
},
"source_text": {
"description": "The source text (recipe, protocol), if you have it.",
"type": "string"
},
"source_url": {
"description": "Its URL, when the text is not to hand.",
"type": "string"
},
"token": {
"description": "Access token from the login tool. Omit when the account is connected.",
"type": "string"
}
},
"required": [
"program"
],
"type": "object"
},
"name": "review_program",
"outputSchema": null
},
{
"description": "Save a program to the user's account ('save this for later'); the same programId updates it. Needs the user's Rhylthyme account.",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"program": {
"additionalProperties": {},
"description": "Program JSON; shape under validate_program.",
"properties": {},
"type": "object"
},
"token": {
"description": "Access token from the login tool. Omit when the account is connected.",
"type": "string"
}
},
"required": [
"program"
],
"type": "object"
},
"name": "save_program",
"outputSchema": null
},
{
"description": "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.",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"environment": {
"default": "kitchen",
"description": "Which catalog: kitchen (default), laboratory, event or gym.",
"enum": [
"kitchen",
"laboratory",
"gym",
"event",
"events"
],
"type": "string"
},
"limit": {
"default": 20,
"maximum": 50,
"minimum": 1,
"type": "integer"
},
"query": {
"default": "",
"description": "Keyword; matches name and description. Empty returns the newest entries.",
"type": "string"
}
},
"type": "object"
},
"name": "search_public_recipes",
"outputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false,
"properties": {
"count": {
"type": "number"
},
"environment": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"query": {
"type": "string"
},
"results": {
"items": {
"additionalProperties": {},
"properties": {
"description": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"id": {
"type": "string"
},
"name": {
"type": "string"
},
"url": {
"type": "string"
}
},
"required": [
"id",
"name",
"description",
"url"
],
"type": "object"
},
"type": "array"
}
},
"required": [
"query",
"environment",
"count",
"results"
],
"type": "object"
}
},
{
"description": "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.",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"program": {
"additionalProperties": {},
"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.",
"properties": {},
"type": "object"
}
},
"required": [
"program"
],
"type": "object"
},
"name": "validate_program",
"outputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false,
"properties": {
"errors": {
"items": {
"additionalProperties": {},
"properties": {},
"type": "object"
},
"type": "array"
},
"info": {
"items": {
"additionalProperties": {},
"properties": {},
"type": "object"
},
"type": "array"
},
"stats": {
"anyOf": [
{
"additionalProperties": {},
"properties": {},
"type": "object"
},
{
"type": "null"
}
]
},
"valid": {
"type": "boolean"
},
"warnings": {
"items": {
"additionalProperties": {},
"properties": {},
"type": "object"
},
"type": "array"
}
},
"required": [
"valid",
"errors",
"warnings",
"stats"
],
"type": "object"
}
},
{
"description": "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.",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"allowInvalid": {
"default": false,
"description": "Publish despite validation errors. Only when the user explicitly wants an imperfect draft shared.",
"type": "boolean"
},
"program": {
"additionalProperties": {},
"description": "Program JSON; shape under validate_program.",
"properties": {},
"type": "object"
}
},
"required": [
"program"
],
"type": "object"
},
"name": "visualize_schedule",
"outputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false,
"properties": {
"imageUrl": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"makespanSeconds": {
"type": "number"
},
"shareId": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"url": {
"type": "string"
},
"warnings": {
"items": {
"additionalProperties": {},
"properties": {},
"type": "object"
},
"type": "array"
}
},
"required": [
"url",
"shareId",
"imageUrl",
"makespanSeconds",
"warnings"
],
"type": "object"
}
}
]
}Verify it yourself
curl -s https://api.teppi.xyz/v1/evidence/sha256:79be0cc9c298a13ad7f55a8c0f3116db55dc4db9acd47a3421e9cc26af05a6e5 | sha256sum