Rhylthyme MCP Server
Allows importing protocols from protocols.io and converting them into validated schedule programs for execution.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Rhylthyme MCP ServerSchedule a roast chicken dinner with one oven and two stove burners."
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Rhylthyme MCP server
A Model Context Protocol server for schedules that a person executes: cooking several dishes so they finish together, running a bench protocol with overlapping incubations, calling an event, running a workout. An agent describes the process, the server validates and analyzes the resulting program, and publishes it as a live timeline on rhylthyme.com that the person follows on their phone.
This repository is the source of the server that runs at
mcp.rhylthyme.com. It is the same code as mcp-api/ in the
rhylthyme-server application, copied here with the static assets it
needs so it can be read, tested and self-hosted.
Try it: ask for a workout
Connect the server (in claude.ai, Claude Desktop or mobile, add
Rhylthyme from the Claude Connectors Directory;
in Claude Code, /plugin marketplace add rhylthyme/rhylthyme-mcp
then /plugin install rhylthyme@rhylthyme; anywhere else, add
https://mcp.rhylthyme.com/gym/mcp as a connector), then say what you want in
plain words:
Two of us in a garage gym: one kettlebell, one pull-up bar, one jump rope. Thirty minutes, two rounds, and nobody stands around waiting for equipment. Make it a Rhylthyme timeline.
You write no JSON. The assistant does, and the server keeps it honest. With that prompt Claude made three tool calls:
Call | What came back |
|
|
|
|
| a link, gym.rhylthyme.com?share=4995ef1b88744e80, with rest timers and interval beeps, and a text chart for the chat: |
0 15m 30m
Alex │░Warm-…░▒S…▒░Pu…░▒Ju…▒░░░▒Sw…▒░Pu…░▒Ju…▒░░░▒St…▒│
Sam │░Warm-…░▒P…▒░Ju…░▒Sw…▒░░░▒Pu…▒░Ju…░▒Sw…▒░░░▒St…▒│Ask "show me a picture" and preview_timeline returns an image in the chat.
For one coloured by station, which makes the rotation obvious, save the
program the assistant wrote (ours is examples/recipe/garage-circuit.json) and run:
npx -y github:rhylthyme/rhylthyme-timeline garage-circuit.json -o garage-circuit.png \
--style web --palette tableau --color-by task
Then push on it: "add a third person", "we only have 20 minutes", "swap the rope for burpees". The assistant edits the program and the server checks it again.
Related MCP server: Blossom
This repository and rhylthyme
Two repositories do related things and are easy to confuse. This one is the server an AI assistant talks to. rhylthyme (formerly rhylthyme-cli-runner) is the command a person types.
What it is | The MCP server: the tools an AI assistant calls | A command-line program: the |
Who uses it | Claude, ChatGPT, Cursor or any MCP client, on a person's behalf | A person at a terminal, a script, or CI |
Where it runs | Hosted at | On your machine: |
Language | JavaScript (Node 20+) | Python 3.12+ |
Input | A program the assistant builds in conversation | A program file on disk (JSON or YAML) |
Validate a program |
|
|
Timing, conflicts, deadlines |
|
|
Publish a live timeline |
|
|
Run a schedule with timers | no: it hands back a link to the web timeline |
|
Recorded runs, calibration | reads runs saved to an account | records runs locally; |
Catalog search, imports, account library | yes | no |
Also in the repository | the | the Claude skill's source, the prompt-evaluation harness and its results, |
How they fit together: the command-line tool is one of this server's clients.
rhylthyme analyze, publish, generate and mcp-test are MCP calls to
mcp.rhylthyme.com; rhylthyme validate, run, runs and calibrate never
touch the network. Each has its own validator for the same program schema
(JavaScript here, Python there), so a program is checked again when it is
published.
Use this repository to connect an assistant, to read or self-host the server, or to change a tool. Use rhylthyme if you have a program file and a terminal, want timers in the terminal, or keep run records.
Two names to keep apart: rhylthyme-mcp on PyPI is this server's stdio bridge
(command rhylthyme-mcp, source in python/); rhylthyme
on PyPI is the command-line tool (command rhylthyme; it was published as
rhylthyme-cli-runner before 0.5.0). The program format
itself is defined in rhylthyme-spec,
with examples in rhylthyme-examples.
Endpoints
URL | Server name | Adds |
|
| generic scheduler |
|
|
|
|
|
|
|
|
|
|
|
|
Transport: Streamable HTTP, stateless. No sign-in is needed for the public
catalog or the pure tools; account tools use the person's Rhylthyme account
through OAuth 2.1, or a pasted token from the login tool in clients without
OAuth. Server instructions describing the workflow are sent at
initialize.
Quickstart: timelines from the command line
The rhylthyme CLI can drive this server directly: describe what you
need in plain language and get back a live timeline URL, a program file,
or both.
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 signs you in through the browser and hands the session back to a
one-shot listener on 127.0.0.1. It is stored in
~/.config/rhylthyme/credentials.json (mode 0600) and renews itself, so
you only log in once. generate then calls two tools on this server:
import_texton the endpoint for-e(/kitchen/mcp,/lab/mcp, …) turns the request into a validated multi-track program. It runs four model turns server-side, which is why it needs a sign-in; it takes 20–60 seconds and is capped per day.visualize_schedulepublishes that program and returns the live-timeline URL on the matching subdomain.
It prints the ASCII Gantt, the itinerary and the URL. More examples:
# 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 --jsonFlag | Meaning |
|
|
| When everything must be finished: |
| Equipment and people limits in your own words. |
| Read the request or source text from a file, or |
| Save the program JSON. |
| Run the program in the terminal runner afterwards. |
| Open the live timeline in a browser. |
| Skip publishing; print JSON; print only the URL. |
To check a server (this one, or your own deployment) end to end:
rhylthyme mcp-test # all five hosted endpoints, read-only
rhylthyme mcp-test --url http://localhost:3000/mcp -e generic --publishrhylthyme whoami shows the stored sign-in; rhylthyme logout forgets it.
On a machine without a browser, set RHYLTHYME_TOKEN to an access token
from https://www.rhylthyme.com/mcp/auth (it lasts about an hour), or
run rhylthyme login --token <token>. RHYLTHYME_MCP_URL points the CLI
at a self-hosted server.
Connect
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/mcpClaude Desktop / claude.ai: Settings → Connectors → Add custom
connector → paste one of the URLs above. Public tools work immediately;
run login only to save to your own account.
Claude Code plugin (the hosted server plus a skill that teaches Claude to author, validate and analyze schedules):
/plugin marketplace add rhylthyme/rhylthyme-mcp
/plugin install rhylthyme@rhylthymeChatGPT: Settings → Apps & Connectors → Advanced settings → turn on Developer mode, then Create a connector with one of the URLs above as the MCP server URL. Without a connector ChatGPT cannot call these tools and falls back to browsing the website.
Cursor (.cursor/mcp.json):
{ "mcpServers": { "rhylthyme": { "url": "https://mcp.rhylthyme.com/kitchen/mcp" } } }Claude API (MCP connector, one request):
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."}],
)Reviewing an import. review_program (an account tool) has a model read an
imported program against its source and return findings: wrong durations,
dropped steps, bad ordering, a total that disagrees with the source. Call it
after import_from_source or import_text, apply what it says, and validate
again.
Clients that can only launch a command: pip install rhylthyme-mcp gives a
rhylthyme-mcp command, a stdio bridge that passes every request through to
the hosted server (source in python/):
{ "mcpServers": { "rhylthyme": { "command": "rhylthyme-mcp", "args": ["kitchen"] } } }No MCP client at all (an agent with a shell, a script): the server is stateless, so one POST works with no handshake and no account.
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 called the same way returns the live-timeline URL in
result.structuredContent.url. Or use the CLI in the quickstart above.
Tools
Tool | Annotations | What it does |
| read-only, pure | Structural and scheduling checks (duplicate/missing ids, dangling references, cycles, within-track overlaps, tasks without a resource constraint, unparseable durations, choice references). Every finding carries a |
| read-only, pure | Resolved start/end per step, makespan, the dependency chain that determines it, resource-conflict windows, per-track slack, peak concurrency vs. declared actors. Pass |
| publishes | Validates (refuses invalid programs unless |
| publishes a share record | PNG of the timeline only, no prose. |
| read-only | Keyword search over the public catalog; |
| read-only | Full summary and live URL for one catalog entry. |
| read-only | One-shot on each vertical: top catalog match → live URL. |
| read-only | Random catalog pick on each vertical. |
| read-only | Spoonacular, TheMealDB, protocols.io, Cooklang, Opentrons Protocol API scripts, Benchling → validated program JSON. |
| pure | Equipment limits and actor types → environment JSON. |
| — | Returns the sign-in URL, then verifies a pasted token. |
| account | The user's own library; |
| read-only | Source of the Apache-2.0 timeline renderer, for HTML artifacts whose sandbox blocks external scripts. |
Annotations (readOnlyHint, destructiveHint, idempotentHint,
openWorldHint) are set on every tool; four tools also declare an
outputSchema and return structuredContent. Failures set isError
and say what to do next.
Resources and prompt
rhylthyme://schema/program: the program JSON Schema (0.3.0-alpha)rhylthyme://guide/authoring: one-page authoring rules, trigger vocabulary, how to make tracks finish together, repeated work (replicates, per-instanceinstances: "each"chains,"all"barriers andmaxInFlight), choice branchingrhylthyme://guide/tools: the long form of every tool description. The tool list itself is kept to about 3,600 tokens so it is cheap to keep connectedrhylthyme://examples/{breakfast_schedule, lab_experiment, stir_fry_with_choice, hiit_cardio_workout, corporate_presentation, cookies_three_trays}: complete valid programs (cookies_three_traysis the 0.3.0-alpha per-instance / in-flight worked example)prompt
plan_schedule(goal, finishAt?, constraints?): walks the model through search → build → validate → analyze → visualize, and namesreplicates/instances/maxInFlightin its constraints step
What a program looks like
{
"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 }
]
}Steps in one track run sequentially; parallel work goes in separate
tracks; every task needs a resource constraint; durations and offsets
take seconds or strings like "5m". Triggers: programStart,
programStartOffset, afterStep (end or event: "start", signed offset),
afterStepWithBuffer, manual, onAbort, or {logic: all|any, triggers}.
Durations: fixed, variable (ended early by the executor), indefinite
(ended by the executor).
Self-hosting
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
npm run stdio # the same server over stdio (add kitchen, lab, events or gym)Stdio clients run it as a local process, for example in Claude Desktop:
{"command": "node", "args": ["/path/to/rhylthyme-mcp/src/stdio.js"]}.
Docker: docker build -t rhylthyme-mcp . && docker run -p 3000:3000 rhylthyme-mcp.
Vercel: vercel in the repository root; vercel.json rewrites the endpoint
paths to the function.
What self-hosting does and does not give you: validation, timing analysis,
the renderer, resources and prompts run in your process. Catalog search,
sharing (visualize_schedule), imports and account tools call the public
API at https://www.rhylthyme.com (API_BASE in mcp-api/index.js), so
those still depend on the hosted service. The PNG preview route
/api/og/timeline.png additionally needs SUPABASE_URL and
SUPABASE_ANON_KEY for read access to shared programs; nothing else does.
Layout
mcp-api/index.js: tool, resource and prompt registration; vertical detection; OG-image route; Vercel handlermcp-api/schedule.js: validator and analyzer (pure)static/js/timeline-render.js: timing engine and SVG Gantt (also published as@rhylthyme/timeline)static/schema/,static/examples/: the resourcessrc/index.js: standalone HTTP runnersrc/stdio.js: standalone stdio runner (same tools, resources and prompts)mcp-api/server.json: MCP registry manifest.claude-plugin/marketplace.json,plugins/rhylthyme/: the Claude plugin marketplace and plugin (claude plugin validate .); the skill in it is a checked copy ofskills/rhylthymein rhylthymepython/: therhylthyme-mcpPyPI package, a stdio bridge to the hosted server (cd python && PYTHONPATH=src pytest tests)
Known limitations
loginhands the user a URL and expects a pasted, short-lived access token that then travels as a tool argument; it is outside MCP's OAuth 2.1 flow. Hosts that require OAuth for authenticated servers can still use every public tool.search_public_recipessearches one environment at a time; the generic endpoint defaults to kitchen.Tool annotations are self-declared hints; hosts may ignore them.
License
Apache-2.0, like the rest of Rhylthyme. (This repository was MIT until September 2026.)
Available Tools
19 toolsanalyze_scheduleAnalyze schedule timingARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| token | No | Access token from the login tool. Omit when the account is connected. | |
| history | No | Recorded runs of this program (from load_run); adds predicted durations. | |
| program | Yes | Program JSON; shape under validate_program. | |
| startAt | No | ISO 8601 start datetime. Ignored with finishAt. | |
| finishAt | No | 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 | No | Saved program UUID: loads the user's own recorded runs as the history. | |
| useDurations | No | planned (default): analyse the program as authored. predicted: as the history says it will run. | planned |
| predictionContext | No | Optional: environmentId, userTags (variance factors), userId, programVersion, minIdentical, minModel, corrThreshold, verdicts. See rhylthyme://guide/tools. |
Output Schema
| Name | Required | Description |
|---|---|---|
| name | Yes | |
| steps | Yes | |
| tracks | Yes | |
| inFlight | No | |
| makespan | Yes | |
| actorPeak | Yes | |
| programId | Yes | |
| wallClock | Yes | |
| validation | No | |
| criticalPath | Yes | |
| durationsUsed | No | |
| makespanSeconds | Yes | |
| plannedMakespan | No | |
| predictedMakespan | No | |
| resourceConflicts | Yes | |
| bindingConstraints | No | |
| predictedCriticalPath | No | |
| plannedMakespanSeconds | No | |
| predictedMakespanSeconds | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive, and 'Pure computation' reinforces that this mutates nothing. It also discloses the conditional behavior that predictions only occur when history or program_id is supplied. It adds no auth or rate-limit context, but the annotation burden is light here.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the core output list, then adds the finishAt scenario and the prediction condition. Dense but every sentence carries information; the colon-list style is efficient rather than padded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists so return values need not be explained, and the schema plus the rhylthyme://guide/tools pointer cover the nested predictionContext. For an 8-parameter tool with only one required arg, the description supplies enough to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% so the baseline is 3, but the description genuinely adds meaning: finishAt is framed as the reverse-scheduling input and it clarifies that program_id pulls the user's own recorded runs as history. That goes beyond restating the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (analyze) and enumerates the concrete outputs: per-step start/end, total length, critical path and its gates, resource conflicts, slack per track. That output list clearly separates it from visualize_schedule and preview_timeline, which render rather than compute timing.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a concrete usage scenario for finishAt ('when do I start X so everything is ready at 6pm?') and states that history/program_id unlocks predicted durations. It never names an alternative sibling or an explicit when-not, so it falls short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
calibrate_programPropose durations from recorded runsARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| k | No | Measurements a step needs for a proposal (default 5). | |
| since | No | Only runs started on or after this date (YYYY-MM-DD or ISO). | |
| token | No | Access token from the login tool. Omit when the account is connected. | |
| accept | No | Step ids to accept, or "all": also returns the calibrated program. Nothing is saved either way. | |
| history | No | Run records to use instead of the stored ones. | |
| program | No | Program JSON to calibrate; omit to use program_id's saved JSON. | |
| program_id | No | Saved program UUID whose recorded runs are the evidence. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint/idempotentHint/non-destructive, so the safety profile is covered; the description still adds real value by stating 'Saves nothing ... Nothing is saved either way' even with accept, and by disclosing the auth requirement ('Needs the user's Rhylthyme account'). It stops short of describing rate limits or failure behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the action and its statistical defaults, followed by side effects and the account requirement. Dense but every clause carries information; no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 7-parameter, zero-required tool with nested objects and no output schema, the description covers the core behavior, the non-persistence guarantee, the auth need, and hints at the return contents (evidence per step, effect on total length). It could say more about how program vs program_id vs history interact, but the essentials are present.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all seven parameters are already documented in the schema. The description's mention of accept returning the calibrated program and of the median/P10–P90 basis adds mild meaning but largely repeats the schema, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb+resource ('Propose durations for a saved program from its recorded runs') and even specifies the statistical method (median default, P10–P90 range, at least as wide as the author's). It is clearly distinct from siblings like validate_program or review_program, but it never names or contrasts an alternative explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the verb and the input set (a saved program plus its runs), and the 'Saves nothing' clause signals the preview-style intent. However there is no explicit when-to-use/when-not statement and no routing to alternatives such as review_program or load_run.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_environmentDefine equipment limitsBRead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| type | Yes | ||
| actors | No | How many people can work at once (default 1). | |
| description | No | ||
| resourceConstraints | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is already covered. The description adds context about the purpose of resourceConstraints (scheduling around shared equipment), which is useful. However, it does not disclose what happens if resourceConstraints is omitted, whether the tool validates constraints, or how the result is returned. With annotations covering the safety profile, a 3 is appropriate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that front-loads the core purpose and includes a concrete example ('one oven, two centrifuges, one stage'). It is efficient and readable, though the example could be seen as slightly verbose. No wasted words overall.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has 5 parameters, 3 required, no output schema, and low schema coverage. The description explains the central concept (resourceConstraints) and its purpose, but does not cover the other required parameters (name, type) or the optional ones. An agent would need to open the schema to understand what 'type' values are valid and what 'name' means. The description is adequate for the core use case but incomplete for full parameter understanding.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 20%, so the description must compensate. The description explains the meaning of resourceConstraints (equipment limits) and its role in scheduling, which adds value beyond the schema's bare 'array' type. However, it does not explain the 'name', 'type', 'actors', or 'description' parameters, and the schema itself only documents 'actors'. The description partially compensates but leaves gaps.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Describe'), a resource ('a workspace's equipment limits'), and the output form ('as resourceConstraints to copy into a program'). It clearly conveys the tool's purpose. However, it does not explicitly distinguish itself from sibling tools like calibrate_program or validate_program, though the resourceConstraints focus provides some implicit differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage context: it is for defining equipment limits so that steps sharing equipment are scheduled around each other. This gives a clear 'why' but no explicit 'when to use vs alternatives' or exclusions. The sibling list includes many program-related tools, but the description does not name any alternative or condition for choosing this one.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_renderer_sourceGet timeline renderer sourceARead-onlyIdempotentInspect
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).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive and open-world, so the safety profile is covered. The description adds useful non-obvious behavior: the payload is ~90 KB, Apache-2.0, dependency-free, and exposes Rhylthyme.renderTimeline(container, program). It does not mention caching or whether the source is versioned/pinned.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single dense sentence that front-loads the return value and packs license, size, dependency status and API surface with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description adequately covers the return payload (source code, size, license) and how to consume it, which is everything an agent needs to call this no-argument tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so the baseline is 4. The description does describe the arguments of the function it exposes (container, program), which is helpful context even though it is not tool input.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a precise verb+resource (return the timeline renderer's JavaScript source) and adds distinguishing detail — license, size, dependency-free, and the exported API. It is clearly separable from siblings like preview_timeline or visualize_schedule, which render rather than ship source.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a concrete triggering condition: use it for an HTML page or artifact that cannot load external scripts. That is a clear when-to-use, though it does not explicitly name the alternative (e.g., fetching the script from a CDN or using preview_timeline) as a when-not.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
import_from_sourceImport from an external sourceARead-onlyIdempotentInspect
Import a recipe, protocol or run of show into a program. source: spoonacular, themealdb (recipes); protocolsio, opentrons, benchling (lab); cooklang (.cook URL); ontime (run of show). 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.
| Name | Required | Description | Default |
|---|---|---|---|
| text | No | Pasted source instead of a URL: an Opentrons .py, or an Ontime project JSON or rundown table (CSV, TSV or Markdown). | |
| query | No | Keywords (search), or the URL or id (import). | |
| token | No | Access token from the login tool. Omit when the account is connected. | |
| action | Yes | ||
| enrich | No | With action='import': split the import into parallel tracks with cross-track triggers. One model call, capped per day. | |
| source | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, openWorld, non-destructive), and the description adds real context beyond them: account prerequisites for import/random/benchling, the parallel-track behavior of enrich, and a daily model-call cap. That rate-limit and auth detail is the kind of thing annotations cannot express.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose is front-loaded and the remaining lines are dense, telegraphic clauses that each carry information (sources, actions, auth, enrich). No filler, though the clipped phrasing occasionally forces re-reading.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 6-parameter tool with no output schema, it covers sources, actions, account requirements, enrich semantics, and states the return value ("Returns the program"). Minor gaps remain around the text-paste path and how it relates to the import_text/load_program siblings.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
At 67% schema coverage, the description meaningfully supplements the schema by mapping each source to its domain, defining what query means per action, and explaining enrich's parallel-track behavior. The token parameter's usage (omit when connected) is left mostly to the schema, keeping it below a 5.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb and resource set ("Import a recipe, protocol or run of show into a program") and then enumerates the valid sources grouped by domain. It does not explicitly distinguish itself from close siblings like import_text, load_program, or load_public_recipe, so a 4 rather than a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete conditional guidance per action (search needs no account, import takes a URL or id, random) and names which paths require the Rhylthyme account. It stops short of naming sibling alternatives for each case, so it is clear context without explicit exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
import_textImport pasted textARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | The source text, all of it, as the user wrote or pasted it. | |
| hints | No | Equipment and people limits in the user's words, e.g. 'one oven, two burners, one cook'. | |
| token | No | Access token from the login tool. Omit when the account is connected. | |
| deadline | No | When everything must be finished, if the user said: '18:00', 'dinner at six', an ISO datetime. | |
| environmentType | Yes | kitchen, lab, events, gym or generic. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds substantial behavioral context beyond the annotations: a daily rate cap ('Capped per day'), the auth requirement, the four-turn cost profile, and the source-span provenance table. These are real operational facts an agent needs. The cap is not quantified, and its 'program on the server' phrasing sits in mild tension with readOnlyHint=true, though the separate save_program sibling makes a non-persisting read plausible.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One dense sentence front-loads the core action and then appends the turn count, provenance table, cap and auth requirement — all of which earn their place. It is a long run-on that could be split, and the 'Rhylthyme' spelling looks off, but there is no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a five-parameter tool with full schema coverage, no output schema, and annotations present, the description covers output shape (validated program plus provenance table), auth, and rate limits. It is nearly complete; only the unquantified cap and lack of sibling routing keep it from a 5.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all five parameters (text, hints, token, deadline, environmentType). The prose adds no parameter-level detail (e.g., the valid environmentType values or deadline formats) beyond what the schema provides, matching the baseline 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (turn/import) and resource (pasted text → validated multi-track program) and gives concrete examples of source text (recipe, protocol, run sheet, training plan). The 'pasted text' framing implicitly distinguishes it from the sibling import_from_source, though it never names that alternative for an unambiguous comparison.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied by the input type ('pasted text'); the description states the account prerequisite but gives no explicit when-to-use/when-not, nor does it route the agent to import_from_source for non-pasted sources or to save_program afterward. Adequate but leaves the selection decision to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_my_programsList my saved programsARead-onlyIdempotentInspect
List the user's saved programs. Needs the user's Rhylthyme account.
| Name | Required | Description | Default |
|---|---|---|---|
| token | No | Access token from the login tool. Omit when the account is connected. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, so the safety profile is covered. The description adds the useful context that the user must have a Rhylthyme account, but it does not describe return format, pagination, or failure behavior. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with no filler. The core action is front-loaded and the account requirement is stated succinctly. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only list operation with one optional parameter and no output schema, the description is largely sufficient. It could mention what is exactly returned or that only the authenticated user's programs are included, but the title and wording already imply a list of saved programs.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema fully documents the single token parameter (100% schema description coverage), including guidance to omit it when the account is connected. The description adds no additional parameter meaning, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific action and object: listing the user's saved programs. The possessive 'my' and 'saved programs' clearly separate it from sibling tools like list_runs or list_public_runs, even though it doesn't name them explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage after the user is connected to their Rhylthyme account, and it is clearly intended for retrieving personal saved programs. However, it does not explicitly mention when to use this instead of alternatives or provide any exclusionary guidance, leaving some routing to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_public_runsList contributed runsARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Runs to return, newest first (default 50). | |
| program | No | Program JSON to look up instead; hashed here. | |
| program_hash | No | Program hash, 'sha256:' + 64 hex (a run record's programVersion). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover readOnly/idempotent/non-destructive/openWorld, so the bar is lower, yet the description adds genuine behavioral context: results are anonymous contributions from other users, no account is required, and 'newest first' ordering is disclosed. It does not state rate limits or result volume limits beyond the schema's own default.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three compact sentences with no filler; the resource and scope lead, followed by the use case, the auth note, and the accepted inputs. Slightly clipped but every clause carries information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, and the description compensates by naming the returned fields (actual vs planned length, conditions), which is what an agent needs to decide relevance. Combined with the schema's parameter docs and annotations, it is complete enough, with only pagination/result-volume behavior left implicit.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3; the description goes slightly beyond by presenting `program` and `program_hash` as interchangeable alternatives ('Takes program or program_hash'), clarifying an either/or relationship the schema itself does not state. It adds no format detail for the hash beyond what the schema documents.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (list contributed/anonymous runs) plus the scope constraint of 'one exact program version' and what each record contains (actual vs planned length, conditions). The 'other people contributed' framing implicitly separates it from list_runs/list_my_programs, though no sibling is named explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'For "how long does this really take?"' implies the intended use case (real-world duration estimation) and 'No account needed' signals availability without auth. However, it never names an alternative such as list_runs for one's own runs or explains when NOT to use this tool, so usage is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_runsList recorded runsARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| token | No | Access token from the login tool. Omit when the account is connected. | |
| program_id | Yes | Program UUID from list_my_programs. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the description doesn't need to repeat safety info. It adds semantic context about the content of runs (e.g., actual vs planned length) but doesn't disclose any further behavioral traits such as pagination or return format. Given the annotations cover the safety profile, a 3 is appropriate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, gets straight to the point, and front-loads the primary purpose. The second sentence about the account requirement is slightly redundant given the token parameter but not wasteful. It avoids unnecessary detail and is appropriately brief.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only list operation with full schema coverage and safety annotations, the description provides sufficient context: what it lists, the use case, and the account requirement. It doesn't specify the return format, but since there's no output schema, agents can reasonably infer a list of run objects. Minor gap but not critical.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema provides full descriptions for both parameters (100% coverage), so the description adds no extra meaning. The description does not elaborate on token requirements or program_id handling beyond what the schema already states. Baseline 3 applies because the schema handles parameter documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action 'List recorded runs' and specifies the resource 'of a saved program' with the kind of information returned (when, how it ended, actual vs planned length). It distinguishes itself from siblings like list_public_runs (public runs) and load_run (single run) by focusing on the user's own saved program runs.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides a concrete use case, 'For how long did this take last time?', and notes the prerequisite of having the user's Rhylthyme account. It implies this is for personal runs rather than public ones, but does not explicitly name alternatives like list_public_runs. Still, the usage context is clear enough for an agent to decide when to call it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
load_programOpen a saved programARead-onlyIdempotentInspect
Open one of the user's saved programs by id: summary plus live-timeline URL. Needs the user's Rhylthyme account.
| Name | Required | Description | Default |
|---|---|---|---|
| token | No | Access token from the login tool. Omit when the account is connected. | |
| program_id | Yes | Program UUID from list_my_programs. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, which covers safety. The description adds useful behavioral context beyond those annotations: it requires the user's account and specifies that the result is a summary plus live-timeline URL. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is one compact sentence that front-loads the core action and resource, then gives the output and the account requirement. Every part earns its place, with no filler or repetition of schema details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter read-only tool with rich annotations and full schema coverage, the description is complete enough. It explains what the tool returns, identifies the target resource, and notes the necessary account context. No critical information an agent needs to call it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents program_id and token clearly, including the token's conditional omission and the program_id's source. The description adds little parameter-specific meaning beyond restating 'by id', so a baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description states a specific verb ('Open'), a specific resource ('one of the user's saved programs'), a key selector ('by id'), and the expected result ('summary plus live-timeline URL'). This clearly distinguishes it from siblings like list_my_programs, load_run, and load_public_recipe without needing to open the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context: this is for opening a saved program belonging to the user, and it notes the prerequisite that the user must have a Rhylthyme account. It does not explicitly name alternatives or exclusion conditions, but the intended use case is evident from the title and description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
load_public_recipeOpen a public programARead-onlyIdempotentInspect
Open a public catalog entry by id: summary plus live-timeline URL.
| Name | Required | Description | Default |
|---|---|---|---|
| program_id | Yes | Program UUID (from search_public_recipes) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint=false, so the safety profile is covered. The description adds genuinely new information by stating the return payload ('summary plus live-timeline URL') for a tool with no output schema, though it says nothing about auth or rate limits for public access.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One compact sentence that front-loads the action, the resource, and the selection key, then appends the return value. No filler, no repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter read tool with no output schema, the description covers the essential return content and the annotations cover safety and idempotency. What is missing is any statement of when to prefer this over load_program or list_public_runs.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the single parameter is fully documented there, including its UUID format and provenance. The description only echoes 'by id' and adds nothing the schema does not already say; baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Open') and resource ('a public catalog entry by id') and says what comes back (summary plus live-timeline URL). The 'public' qualifier distinguishes it from load_program, but it never names that sibling explicitly, so the differentiation is inferential rather than stated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use or when-not-to-use guidance; the only routing signal ('from search_public_recipes') lives in the schema's parameter description, not the tool description. An agent must infer that this is the public counterpart to load_program with no help from the text.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
load_runOpen a recorded runARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| token | No | Access token from the login tool. Omit when the account is connected. | |
| run_id | Yes | Run UUID from list_runs. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the description does not need to restate safety. It adds useful behavioral context beyond annotations by specifying what the run view contains (per-step timing, ending causes, pauses, drift) and that it requires the user's Rhylthyme account.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the primary action and immediately followed by the distinguishing payload. Every clause earns its place; even 'Shows where a plan drifts' adds the practical purpose rather than repeating prior content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only tool with well-covered schema and strong annotations, the description is largely complete: it names the resource, the displayed information, and the account prerequisite. It does not describe return format, but the absence of an output schema and the 'shows' wording make the behavior understandable enough for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with clear descriptions for run_id ('Run UUID from list_runs') and token ('Access token from the login tool. Omit when the account is connected.'). The description adds no parameter-specific semantics; the baseline of 3 is appropriate because the schema already carries the full parameter burden.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource ('Open one recorded run') and immediately clarifies the tool's distinctive content: planned vs actual timing, step outcomes, and pauses. It differentiates from siblings like list_runs (one run, not a list) and load_program (run execution data, not source). This is not a mere restatement of the title.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly implies when to use the tool: when you need one recorded run's execution detail and plan drift. It does not explicitly name sibling alternatives or exclusion conditions, but 'Open one recorded run' and the content description give clear context for selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
loginConnect Rhylthyme accountARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| token | No | The token from the login page. Leave empty on the first call to get the sign-in URL. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations, the description reveals the two-step flow, the one-hour token lifetime, and the scope of what the login unlocks. It does not contradict the readOnly or idempotent hints.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences front-load the purpose and then add only necessary constraints. There is no filler and no repetition of schema information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter auth helper with no output schema, the description covers the flow, the prerequisite, the scope, and the token lifetime. An agent has enough to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already documents the token parameter, but the description adds the critical behavior of leaving it empty on the first call to obtain the URL. This makes the parameter's dual role explicit and actionable.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a concrete two-step operation: returning a sign-in URL and accepting a pasted token. It clearly identifies the resource (Rhylthyme account) and distinguishes this auth tool from the program/run/recipe siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly states the condition for use: apps that cannot connect the account directly, and clarifies that only the user's own saved programs, runs, and imports require it while public content works without. This gives an agent clear when-to-use and when-not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
preview_timelinePreview timeline imageADestructiveInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| run | No | A recorded run of the same program (the `run` object from load_run): draws planned versus actual. | |
| program | Yes | Program JSON; shape under validate_program. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations alone (readOnlyHint=false, idempotentHint=false, destructiveHint=true) are puzzling for a preview call, and the description supplies the key explanation: the image is served from a public share link, which accounts for the side effect and non-idempotency. It still does not explain the destructiveHint=true or whether repeated calls create new links, leaving one annotation unexplained.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, no filler: what is returned, how it is delivered, and how the optional parameter changes the output. Front-loaded with the outcome and the trigger phrases.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter image-producing tool with no output schema, the description covers the return artifact (static Gantt with caption), the delivery mechanism (public share link), and the effect of the optional parameter. It omits practical details like the returned URL field or whether the share link is permanent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds real meaning for `run` — that supplying a run record draws actual bars over the plan — which is more actionable than the schema's own "draws planned versus actual." The `program` parameter gets no elaboration beyond the schema pointer.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("Return a static Gantt image of a program") and reinforces it with user-phrase triggers ("show me a preview", "a picture of the timeline"). It does not explicitly contrast itself with the adjacent siblings visualize_schedule, get_renderer_source, or analyze_schedule, so an agent still has to infer which of those produces an image versus an interactive view.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete invocation context via the quoted user utterances and explains the conditional case for the `run` parameter (actual bars over the plan). There is no explicit when-not guidance or named alternative, so an agent choosing between this and visualize_schedule gets no direct help.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
review_programReview an imported programARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| token | No | Access token from the login tool. Omit when the account is connected. | |
| program | Yes | Program JSON; shape under validate_program. | |
| source_url | No | Its URL, when the text is not to hand. | |
| source_text | No | The source text (recipe, protocol), if you have it. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already carry readOnly, idempotent, and destructive hints, so the description earns credit for adding the auth requirement (needs the user's Rhylthyme account) and clarifying the output purpose (findings to show the user). 'Changes nothing' reinforces the read-only behavior without contradicting annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, each earning its place: the action and examples, the side-effect/return behavior, and the auth prerequisite. The most important information is front-loaded in the first sentence.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only review tool with a well-described input schema, the description covers purpose, non-mutation, auth, and the broad return type. It does not specify the structure of findings or the required relationship between program and source_url/source_text, but the annotations and schema cover most of the remaining operational context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description hints that source_url/source_text are the comparison source, but it does not add parameter-level detail beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: a model reads an imported program against its source and reports what looks wrong. Concrete examples (dropped steps, overlapping chains, disagreements) make the tool's function unambiguous and distinguish it from import/validate siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives context: use after import, with a source available, and requires the user's Rhylthyme account. It does not explicitly name alternatives like validate_program or state when not to use this tool, so the routing guidance is implied rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
save_programSave to my accountADestructiveIdempotentInspect
Save a program to the user's account ('save this for later'); the same programId updates it. Needs the user's Rhylthyme account.
| Name | Required | Description | Default |
|---|---|---|---|
| token | No | Access token from the login tool. Omit when the account is connected. | |
| program | Yes | Program JSON; shape under validate_program. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint=false, destructiveHint=true, and idempotentHint=true. The description adds that the same programId updates it (idempotent behavior) and requires an account, which is beyond the annotations. It does not detail destructive consequences beyond updating, but it doesn't contradict the annotations and adds meaningful context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no redundant words. It front-loads the core purpose, then adds the key update behavior and the account requirement. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has nested objects and no output schema, the description covers the essential context: it saves a program, updates if same programId, and requires an account. It doesn't mention error cases or return values, but those aren't required by the rubric when no output schema exists, and annotations cover safety hints.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, and both parameters are described in the input schema (token and program). The description adds no new parameter-level detail beyond mentioning 'programId', which is not a parameter itself. Since the schema fully covers the parameters, the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Save') with a clear resource ('a program to the user's account') and explicitly labels the intent ('save this for later'). It also mentions the idempotent behavior (same programId updates), which differentiates it from load_program and list_my_programs among the siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives a prerequisite ('Needs the user's Rhylthyme account') but does not explicitly state when to use this tool over alternatives, nor does it mention any when-not conditions. It implies usage for saving, but lacks explicit routing guidance compared to siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_public_recipesSearch the public catalogARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| query | No | Keyword; matches name and description. Empty returns the newest entries. | |
| environment | No | Which catalog: kitchen (default), laboratory, event or gym. | kitchen |
Output Schema
| Name | Required | Description |
|---|---|---|
| count | Yes | |
| query | Yes | |
| results | Yes | |
| environment | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint=false, so the safety profile is covered. The description adds two pieces of context not in the structured data: the public/unauthenticated access model and the returned fields (ids, names, descriptions, URLs). It does not cover pagination or result-count behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, zero filler. The purpose and scope lead, and the access/return information follows compactly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, the description needn't explain return values, and annotations carry the safety profile, so what remains (purpose, scope, auth model, catalog mapping) is covered. Minor gap: no mention of how limit/pagination behaves or how empty-query results are ordered, though the schema notes the latter.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 67%, so baseline is 3, and the description goes slightly beyond it: the four catalog content types named map onto the environment enum values (kitchen, laboratory, event, gym), clarifying what each enum branch actually searches. It still doesn't explain limit bounds, which the schema carries.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Search) and resource (public catalog of recipes, lab protocols, event templates, workouts) with the matching scope (by name or keyword). An agent can distinguish this from load_public_recipe (loads one item) and list_public_runs (different resource) without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'No account needed' tells the agent this is usable pre-authentication, which is genuinely useful routing context versus login-gated siblings. However, it never states when to use this search versus load_public_recipe or the list_* tools, so the when-to-use guidance remains implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
validate_programValidate a programARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| program | Yes | 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. |
Output Schema
| Name | Required | Description |
|---|---|---|
| info | No | |
| stats | Yes | |
| valid | Yes | |
| errors | Yes | |
| warnings | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false. The description reinforces this with 'Pure computation' and adds the finding structure (code, message, suggested fix), which is genuine behavioral context beyond the annotations and is consistent with them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences deliver the full purpose, a concrete list of checks, the output finding structure, and a purity guarantee. No filler; the most decision-relevant content is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (nested objects, many validation rules) and that an output schema exists, this description is adequate: it summarizes the checks, notes the finding format, and links to authoritative references (rhylthyme://guide/authoring, rhylthyme://schema/program) for deeper details. It does not leave critical decision-making gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with the program parameter already thoroughly documented (formats for durations, triggers, tracks, steps). The description adds no extra meaning about the parameter itself, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('check') plus resource ('program') and enumerates the exact validation dimensions (ids, triggers, overlaps, resourceConstraints, durations, replicates/instances). It clearly conveys validation semantics and distinguishes from siblings like calibrate_program or analyze_schedule, though it does not explicitly contrast with review_program.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states when to use the tool ('before publishing or saving it') which gives a clear context. However, it does not name alternative tools or provide explicit 'when not to use' guidance, leaving the selection rationale mostly implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
visualize_schedulePublish a live timelineADestructiveInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| program | Yes | Program JSON; shape under validate_program. | |
| allowInvalid | No | Publish despite validation errors. Only when the user explicitly wants an imperfect draft shared. |
Output Schema
| Name | Required | Description |
|---|---|---|
| url | Yes | |
| shareId | Yes | |
| imageUrl | Yes | |
| warnings | Yes | |
| makespanSeconds | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the write/external/irreversible profile (readOnlyHint=false, openWorldHint=true, idempotentHint=false, destructiveHint=true); the description adds real value on top by disclosing that publication creates a public share link, that validation runs first and refuses invalid programs with fix hints, and what the payload contains. It does not cover link permanence/revocation or re-publish behavior, which is the main residual gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the verb, resource and public-share constraint in the first clause, then adds usage cues and the validation gate. Two sentences with quoted examples are efficient, though the stacked parentheticals ('a public share link') and example list make it slightly denser than needed.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers purpose, side effect, validation behavior and usage context, and an output schema exists so return values need not be spelled out. Combined with annotations that carry the destructive/open-world profile, an agent has what it needs to decide and invoke correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with 'program' and 'allowInvalid' both documented (including the 'only when the user explicitly wants an imperfect draft shared' caveat), so the baseline is 3. The description's 'validates first and refuses an invalid program' lightly reinforces the allowInvalid semantics but adds no format or shape detail beyond the schema pointer to validate_program.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource — 'Publish a program as a live, shareable timeline (a public share link)' — plus what it returns (URL, ASCII Gantt, itinerary). The 'public share link' framing implicitly separates it from local-render siblings like preview_timeline, but no sibling is named explicitly, so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a clear when-to-use cue with concrete user phrasings ('plan this so it all finishes at 6', 'when do I start each thing'), tying the tool to shareable/followed schedules. It never states when NOT to use it or names the alternative (preview_timeline, analyze_schedule) for non-published inspection, so it falls short of explicit routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
19 tool updates
v0.1.0- First observed
analyze_schedule - First observed
calibrate_program - First observed
create_environment - First observed
get_renderer_source - First observed
import_from_source - First observed
import_text - First observed
list_my_programs - First observed
list_public_runs - First observed
list_runs - First observed
load_program - First observed
load_public_recipe - First observed
load_run - First observed
login - First observed
preview_timeline - First observed
review_program - First observed
save_program - First observed
search_public_recipes - First observed
validate_program - First observed
visualize_schedule
TDQS
Scored across 19 tools
Most tools target distinct resources and actions, and descriptions carefully separate public vs. account-scoped variants (list_public_runs vs list_runs, load_public_recipe vs load_program). A few pairs risk confusion: validate_program vs review_program (structural checks vs model reading against source), and analyze_schedule-with-history vs calibrate_program both derive durations from recorded runs, while visualize_schedule and preview_timeline both produce timeline imagery.
Names follow a clean snake_case verb_noun pattern throughout (list_runs, load_program, validate_program, save_program, preview_timeline). The only deviation is the bare 'login', which lacks a noun but is a widely understood special case.
19 tools is on the heavy side, but the domain genuinely spans public catalog browsing, imports, validation/analysis, visualization/rendering, and run-based calibration, so most tools earn their place. It is slightly over what a single-purpose server needs but not bloated.
The program lifecycle is well covered: import (source/text), validate, analyze, save/update, load, list, review, calibrate, plus run listing/inspection and rendering. Gaps exist—no explicit delete/remove program and no tool to record a run (only list/load runs), which agents must work around.
Maintenance
Related MCP Connectors
Gantt chart SaaS with server-side critical path and dependency-aware shift-impact tools, plus CRUD.
Plan, preview and edit timelines. Permanent Free tier; paid reporting and enterprise tools.
Build Gantt charts from your AI chat: tasks, dependencies, timeline spreadsheets. All data is local.
Create, read and live-edit visual boards, Kanban plans, Gantt timelines and diagrams with AI agents.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables AI assistants to create interactive charts, diagrams, and tables displayed on a real-time dashboard, supporting multiple data sources with privacy-focused local execution.1MIT
- AlicenseNot gradedqualityBmaintenanceEnables collaborative project planning by connecting an MCP-capable chat app to a generative AI that manages tasks and dependencies, with a live web UI for visualization.1GPL 3.0
- FlicenseNot gradedqualityBmaintenanceAn OAuth-protected MCP server that converts project descriptions into realistic schedules, handling dependencies, resource leveling, critical path analysis, and generating shareable charts (HTML, SVG, PNG, JSON, CSV).-
- AlicenseAqualityAmaintenanceEnables creating scheduled Gantt charts with critical-path analysis from any MCP client using plain-language task descriptions, with no account or API key required.440 npmMIT