Endpoints: 28,729MCP servers: 18,413Payout addresses: 2,071Paid calls: 1,561Letters: 14Defects: 1,336counted 3 min ago
teppi

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 yourselfcurl -s https://api.teppi.xyz/v1/evidence/sha256:79be0cc9c298a13ad7f55a8c0f3116db55dc4db9acd47a3421e9cc26af05a6e5 | sha256sum