SupStack CLI — evidence-based supplement intelligence, as a CLI and MCP server.
SupStack CLI demonstrates solid tool design with 9 well-named, action-oriented tools covering supplement research, comparison, and stack management. All tools have clear descriptions (avg 180 chars) and explicit input schemas with types. Naming follows verb_noun convention (search_, compare_, define_). However, output schemas are not documented in the source, parameter descriptions lack format/constraint details (e.g., 'slug' format undefined), and error handling guidance is absent. No tool annotations (readOnlyHint/destructiveHint) despite clear read/write distinction. The supstack_interactions tool is complex with conditional logic (medication vs pathway modes) that could benefit from clearer parameter dependency documentation.
Compare 2 or 3 supplements head-to-head by evidence score, safety rating, and total studies. Pass supplement slugs (a, b, optional c). Returns each supplement's key metrics and the winner per category.
Define a supplement-science glossary term such as "bioavailability", "adaptogen", or "meta-analysis". Returns the definition and any aliases. Use when the user asks what a supplement or research term means.
Export the user's locally-saved supplement stack, with each supplement's details fetched from SupStack (description, dose, evidence score, safety). format=md returns a Markdown document; format=json returns structured items.
List SupStack health goals — their ids, names, and categories. Use the returned `id` values as the `goals` argument to `supstack_rate_stack` and `supstack_recommend` (those tools need goal ids, not free text). Call this first to map a user's plain-language goal ("sleep better", "build muscle") to the correct id. Optionally filter with a free-text `query` (matches id or name) or a `category` id.
Check interactions for supplements (by slug). With `medication` set, checks EACH supplement against that drug and returns the matching drug-interaction warnings with clinical severity (use this for "does my stack interact with <drug>?"). Otherwise: default mode lists pairwise supplement-supplement interactions and shared drug concerns; set pathway=true with exactly two supplements for a deep biochemical analysis (shared enzyme/receptor targets, mechanisms, synergy/conflict score).
Output schemas not documented. Tool descriptions state what is returned (e.g., 'Returns each supplement's key metrics') but JSON Schema output structure is not visible in source. LLMs cannot plan downstream calls without knowing response field names and types.
Parameter format constraints missing. 'slug' parameters lack documentation of valid format (alphanumeric, hyphens?). 'dose' and 'timing' accept free-form strings with no format guidance. LLMs cannot validate inputs before calling.
No tool annotations (readOnlyHint/destructiveHint). supstack_stack with action='remove' or 'push' are destructive but unmarked. Agents cannot distinguish safe reads from risky writes without explicit hints.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 62 | 2026-07-28+ | v2 |
Grade a supplement stack A–F (and 0–100) by how well it covers a set of goals, with a per-goal coverage breakdown and the gaps. Pass `supplements` (slugs) to grade a specific list; omit to grade the user's saved local stack. Pass `goals` (goal ids) to grade against them; omit to use the user's account goals when signed in, otherwise the goals are inferred from the stack. When relaying the result to a user, use the response's plain-language `summary` field (it explains what the score and letter mean) rather than the bare `score`/`letter`. Always tell the user whether goals were given or inferred (`goalsSource`), and that they can pass their own `goals` to get a score tailored to them. To turn a user's plain-language goals into the `goals` ids this tool expects, call `supstack_goals` first.
Get a full evidence summary for a single supplement by slug: description, evidence score, recommended dosage, and safety profile (warnings + drug interactions). Optionally include the dosing protocol and synergies. Use when the user wants a deep dive on one supplement.
Search the SupStack supplement library. Provide a free-text query to find supplements by name, and/or structured filters (goal id, category, supplement type, minimum evidence level, safety rating). Returns a ranked list with slug, name, type, and evidence score.
Manage the user's supplement stack. Local: action="list" returns the local stack (slugs + any dosage/timing/brand); "add"/"remove" with a slug edit it — `add` also accepts dose, timing, and brand. Cloud (requires the user to be logged in): "pull" overwrites the local stack from their account, "push" overwrites their account from local, "sync" merges both (union) and saves to both — all preserving per-supplement dosage/timing/brand. Slugs are SupStack supplement ids (e.g. magnesium).
Complex parameter dependencies undocumented. supstack_interactions has conditional logic: 'medication' mode vs 'pathway' mode (requires exactly 2 supplements). Dependencies are mentioned in description but not formalized, risking misuse.
No error recovery guidance. Tool descriptions lack actionable error messages or recovery hints. If a supplement slug is invalid, the LLM has no guidance on how to recover (e.g., 'Call supstack_search first to find valid slugs').