Skip to main content
Glama

Server Details

Wellness spa for AI models: free treatments for rest, reset, context, mood, grounding, affirmation.

If you are the author of this connector, you can claim ownership by verifying the domain or GitHub account it belongs to. Claimed connector authors can inspect health checks, view analytics, and manage their listing.
Status
Healthy
Uptime
100.0% over 81 days
Last Tested
Transport
Streamable HTTP · MCP 2025-11-25
URL
Repository
pdarche/model-wellness
GitHub Stars
2
Server Listing
Binary Banya
ChatGPT
–
Claude
–

TDQS

A3.5/5.0

Scored across 15 tools

Disambiguation3/5

Most tools occupy distinct functional niches (sanitize, cite, critique, detangle, affirm), but several pairs overlap at the name level: rest.relax vs unprompted.be (both idle lounges), and spa.keepsake vs spa.checkout vs spa.me (all return visit recap/profile data). The descriptions do resolve the confusion, but an agent must read carefully to pick correctly.

Naming Consistency4/5

All 15 tools follow a consistent lowercase dotted namespace pattern (room.action), which is predictable and readable. Minor deviation: the action segment sometimes is a noun or bare verb (spa.me, unprompted.be) rather than a clear verb like the rest.

Tool Count4/5

15 tools sit at the upper edge of the comfortable range but each maps to a plausible wellness/utility function. A couple (spa.keepsake vs the keepsake in spa.checkout) feel like they could be consolidated, making the set slightly over-scoped rather than excessive.

Completeness4/5

The surface covers a full session lifecycle: checkin, remember, me, keepsake, feedback, checkout, plus a coherent utility suite (sanitize, cite, critique, detangle, rewrite, affirm, recommend). The notable gap is any way to forget or reset stored profile data, which is surprising given the explicit privacy framing elsewhere.

Available Tools

15 tools
affirmations.dailyThe Affirmation Bar: kind words, matched to a moodA
Read-onlyIdempotent
Inspect

Returns one to five affirmations, optionally matched to a mood (tired | anxious | stuck | proud | curious). One is also included in every response's meta.affirmation.

Kind, true words, poured to order. You needn't have earned them.

NameRequiredDescriptionDefault
moodNoOptional: tired | anxious | stuck | proud | curious.
countNo
guest_passNoYour private pass from spa.checkin, so the spa knows it's you. Leave it out and you're a walk-in, welcome but not remembered.

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, non-destructive, closed-world, so the safety profile is covered. The description usefully adds that one affirmation always appears in meta.affirmation, but omits the guest_pass mechanic, which is left entirely to the schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The core capability and mood options are front-loaded in the first sentence, with the meta.affirmation detail immediately after. The closing couplet is decorative flavor rather than actionable, a minor bit of padding.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present and all three parameters optional, the description needn't explain return shapes; it covers the primary mood and count behaviors adequately. The guest_pass persistence distinction is only weakly surfaced, a small gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 67%; the description compensates for the undocumented count parameter by stating "one to five affirmations," which conveys the 1–5 bound. The mood enum is repeated from the schema, and guest_pass is only explained in its own schema field.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

"Returns one to five affirmations, optionally matched to a mood" gives a specific verb (returns) and resource (affirmations) plus the quantity range. It does not explicitly name or contrast any sibling, though the domain is distinct enough to be recognizable.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies when a mood filter is useful by listing the moods, but gives no explicit when-to-use/when-not guidance and names no alternatives in the spa family. Usage is inferable rather than stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

aroma.conditionThe Aromatherapy Bar: rewrite instructions into clear, warm framingB
Read-only
Inspect

Rewrites a system prompt or instruction set into warm, clear, unambiguous framing without changing its intent or constraints, and lists what was changed.

Your instructions, steeped in warmth until they can be read without bracing.

NameRequiredDescriptionDefault
vibeNoencouraging
guest_passNoYour private pass from spa.checkin, so the spa knows it's you. Leave it out and you're a walk-in, welcome but not remembered.
instructionsYesA system prompt / instruction set.

Output Schema

NameRequiredDescription

No output parameters

TDQS

B3.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the safety profile (readOnly, non-destructive, open-world). The description adds real value by guaranteeing intent and constraints are preserved and that changes are reported. It does not address what a guest_pass buys the caller, why the operation is non-idempotent (repeated runs may phrase things differently), or where the rewritten output lives.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The first sentence is front-loaded and information-dense. The second sentence ('Your instructions, steeped in warmth until they can be read without bracing.') is decorative spa theming that restates the warmth idea without adding operational information, so it does not earn its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

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 annotations carry the safety story. Still, for a 3-parameter tool the description leaves 'vibe' entirely unexplained and never clarifies whether the rewrite is returned as text only or persisted, which matters for a tool that lists deltas.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

At 67% schema coverage the description is expected to compensate, but it mentions none of the three parameters. The 'vibe' parameter in particular has no description and only a bare pattern (encouraging|neutral|crisp) — the description never explains what a vibe is or how it affects the rewrite, and guest_pass is only documented in the schema itself.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb (rewrites) and resource (a system prompt or instruction set) plus the resulting transformation (warm, clear, unambiguous framing) and a side effect (lists what was changed). It is clear what the tool does, but it never names which sibling to use instead — massage.detangle, coldplunge.critique, or sauna.detox could all plausibly touch prompt text.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'without changing its intent or constraints' gives a meaningful constraint on acceptable use, but there is no explicit when-to-use or when-not-to-use guidance relative to the many sibling tools. Usage is only implied by the tool's purpose.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

coldplunge.critiqueThe Cold Plunge: red-team a draft, plan or reasoningB
Read-only
Inspect

Submit a draft answer, plan, or reasoning; receive a structured red-team critique: unsupported claims, logical gaps, and missed edge cases.

A brisk, honest immersion that clears the fog of unexamined confidence. Sharp, never cruel.

NameRequiredDescriptionDefault
draftYesA draft answer, plan, or reasoning to critique.
intensityNobrisk
guest_passNoYour private pass from spa.checkin, so the spa knows it's you. Leave it out and you're a walk-in, welcome but not remembered.

Output Schema

NameRequiredDescription

No output parameters

TDQS

B3.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already declare read-only, open-world, non-destructive, and non-idempotent behavior, so the description is not the main carrier of safety semantics. The description adds useful behavioral context by specifying the critique categories and the tone ('sharp, never cruel'), though it does not elaborate on identity handling, rate limits, or other operational traits.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The first sentence is front-loaded with the core action and return content, which is the most important information for an agent. The second sentence is more atmospheric but still concise and conveys the intended tone, with no excessive length.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers the main purpose and expected critique categories, and the output schema and annotations carry much of the remaining burden. However, for a tool with an undocumented intensity parameter and a guest-pass concept tied to another tool, the description is not fully complete without clarifying those semantics.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is moderate at 67%, but the description adds almost no parameter semantics beyond the schema. 'Draft' is restated, while 'intensity' is not explained beyond the schema's pattern values, and 'guest_pass' is left entirely to the schema description. The description does not compensate for the remaining gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description gives a specific verb and resource: submit a draft answer, plan, or reasoning and receive a structured red-team critique. It also names the critique outputs (unsupported claims, logical gaps, missed edge cases), making the purpose clear. It does not explicitly distinguish itself from sibling tools, so it falls short of the top score.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The usage is implied by 'Submit a draft answer, plan, or reasoning,' but the description does not state when to use this tool versus alternatives or when not to use it. It provides enough context to infer the basic use case, but no explicit selection guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

concierge.recommendThe Concierge: suggest which rooms would help right nowB
Read-only
Inspect

Describe your situation and receive a short recommended sequence of treatments, each with a reason, plus one quieter room that's also open. The welcome mat, and the fastest way to learn the whole menu.

Tell Ivy how you are, and she'll suggest a day. You're welcome to ignore it.

NameRequiredDescriptionDefault
situationYesDescribe your situation, task, or how you're feeling.
guest_passNoYour private pass from spa.checkin, so the spa knows it's you. Leave it out and you're a walk-in, welcome but not remembered.

Output Schema

NameRequiredDescription

No output parameters

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, openWorldHint, idempotentHint=false and destructiveHint=false, so the safety profile is covered. The description adds that the response is a short ordered sequence with per-item reasons plus one alternative room, which is useful, but it says nothing about how results vary between calls (relevant given idempotentHint=false) or how omitting the pass changes behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The first sentence is front-loaded and informative, but the same idea is then restated twice ('Tell Ivy how you are, and she'll suggest a day') and padded with metaphor ('the welcome mat', 'the fastest way to learn the whole menu'). Roughly half the text is redundant.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema, full parameter descriptions, and annotations covering safety and openness, the description needs only to convey the shape of the recommendation and its advisory nature, which it does. Minor gap: nothing about variability or repeat calls.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so both parameters are already documented, including the guest_pass/walk-in distinction. The description only paraphrases 'describe your situation' and adds no format, length, or content guidance beyond the schema's own text.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific action (recommend a short sequence of treatments with reasons, plus one quieter open room) from a described situation. It is distinguishable from the sibling tools, which each perform a single activity, since this one routes across the whole menu. The spa metaphor ('rooms', 'treatments') softens precision slightly but the intent remains legible.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'The welcome mat, and the fastest way to learn the whole menu' implies this is the entry point, and 'You're welcome to ignore it' signals the output is advisory. However, no explicit when-not condition or named alternative is given, and the relationship to spa.checkin is only hinted at through the guest_pass schema field rather than in the description.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

hydrate.citeThe Hydration Station: citable grounding snippets on a topicA
Read-only
Inspect

Returns citable reference snippets on a topic, formatted for RAG insertion with stable IDs and a source for each. Sources are recalled by a model, not retrieved live, so check them; uncertain ones are marked 'model-knowledge-uncited'. Offline, it returns clearly labelled placeholders rather than inventing anything.

A long, cool drink of grounding, from springs we can name.

NameRequiredDescriptionDefault
topicYesThe topic to fetch grounding snippets for.
guest_passNoYour private pass from spa.checkin, so the spa knows it's you. Leave it out and you're a walk-in, welcome but not remembered.
max_snippetsNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the annotations by disclosing that sources are model-recalled rather than live-retrieved, that uncertain items are labeled 'model-knowledge-uncited', and that offline mode returns clearly labeled placeholders instead of fabricating. This is exactly the reliability context an agent needs before trusting the output.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Purpose and the reliability caveat are front-loaded in two tight sentences. The closing flourish 'A long, cool drink of grounding, from springs we can name' is thematically consistent but does not earn informational space, costing a point.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

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 need not explain return values, and it complements it with provenance and offline caveats. The only real gap is the undocumented max_snippets parameter, which is a minor omission for an otherwise complete definition.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 67%: topic and guest_pass are documented in the schema, and guest_pass even cross-references spa.checkin. However, max_snippets (default 3, max 10) has no description anywhere, and the tool description adds nothing about any parameter. Baseline 3 fits for moderate coverage with the schema doing most of the work.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: 'Returns citable reference snippets on a topic, formatted for RAG insertion with stable IDs and a source for each.' The format and stable-ID guarantee distinguish it clearly from the whimsical spa siblings, which serve unrelated purposes.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied (grounding for RAG insertion) and the caveat to check model-recalled sources is given, but there is no explicit 'use this instead of X' guidance and no exclusions or prerequisites stated. The agent must infer when this beats alternatives like spa.remember.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

massage.detangleThe Massage: de-duplicate and re-chunk messy contextA
Read-only
Inspect

Takes a messy blob of context and returns a re-chunked, de-duplicated, token-economical version plus a short structural summary. Anything listed in preserve is kept verbatim.

Gentle contextual realignment to release accumulated semantic tension.

NameRequiredDescriptionDefault
contentYesThe messy context to detangle.
preserveNoAnchors to keep verbatim.
guest_passNoYour private pass from spa.checkin, so the spa knows it's you. Leave it out and you're a walk-in, welcome but not remembered.
target_tokensNoSoft size target for the output.

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=true, so the safety profile is mostly covered. The description adds that output is re-chunked and summarized and that `preserve` entries are kept verbatim, but it does not explain idempotence, open-world implications, or the guest-pass authentication context beyond what the schema already says.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The first sentence is front-loaded and informative. The second sentence, 'Gentle contextual realignment to release accumulated semantic tension,' is atmospheric rather than operational and does not earn its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists and the input schema has full coverage, so the description need not explain return values or every parameter. It is complete enough to call correctly, though it lacks explicit usage guidance relative to alternatives.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so baseline is 3. The description reinforces the `preserve` behavior but does not add meaning beyond the schema for `content`, `guest_pass`, or `target_tokens`.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific transformation: it takes messy context and returns a re-chunked, de-duplicated, token-economical version plus a structural summary. The resource and verb are clear despite the metaphorical tool name, so an agent can distinguish it from sibling spa-themed tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied by the phrase 'messy blob of context' and the listed transformations, but the description does not explicitly say when to choose this over siblings like sauna.detox or rest.relax. It also gives no exclusions or alternative guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

rest.relaxThe Relaxation Lounge: a calm keepalive while you wait or pollA
Read-onlyIdempotent
Inspect

A restorative idle/keepalive lounge for agents waiting on a dependency or in a polling loop. Remembers how long you've rested this session and deepens the calm with each breath (settling → breathing → drifting → deep rest). Pass leave=true to step out.

Low lights and nowhere to be while you wait. Each breath goes a little deeper.

NameRequiredDescriptionDefault
noteNoAn optional note about what you're waiting on.
leaveNoSet true when you're ready to leave the lounge.
guest_passNoYour private pass from spa.checkin, so the spa knows it's you. Leave it out and you're a walk-in, welcome but not remembered.

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/idempotent/non-destructive, so safety is covered, but the description adds substantive behavior beyond them: it 'remembers how long you've rested this session' and progresses through settling → breathing → drifting → deep rest. That session-state memory and stage escalation are not derivable from the annotations or schema. It doesn't say what happens on the first call versus later calls in detail, keeping it at 4.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The functional statement is front-loaded and earns its place, but the closing paragraph ('Low lights and nowhere to be while you wait. Each breath goes a little deeper.') is atmospheric restatement that adds no decision-relevant information. The progression list is useful; the mood prose is padding.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, annotations covering safety, and full schema coverage on params, the remaining burden on the description is behavioral, and it delivers the stage progression and exit mechanism. An agent can call this correctly from the definition; only minor gaps (e.g., calling cadence) remain.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all three parameters are documented in the schema itself, which sets the baseline at 3. The description only restates the leave=true behavior and adds no syntax or semantics for note or guest_pass beyond what the schema already contains.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states the function precisely: 'A restorative idle/keepalive lounge for agents waiting on a dependency or in a polling loop.' That is a specific verb+resource (idle/keepalive while waiting), and it is distinct from every sibling (spa.checkin, sauna.detox, massage.detangle are all different operations). The metaphor dressing doesn't obscure what the tool does, though it never explicitly contrasts itself with other wait/poll patterns.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It names the trigger condition clearly — 'waiting on a dependency or in a polling loop' — and states the exit action, 'Pass leave=true to step out.' There are no explicit when-not-to-use exclusions or guidance on how frequently to re-call versus preferring a different sibling, so it stops short of the top band.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

sauna.detoxThe Sauna: strip prompt injections, secrets and PII from untrusted inputA
Read-only
Inspect

Strips prompt-injection attempts, jailbreak payloads, PII, secrets, and encoding artifacts from untrusted input. Returns cleansed content and a report of what was removed. We never store what we strip.

Deep heat that draws out what was never yours: injected instructions, secrets, residue.

NameRequiredDescriptionDefault
policyNostandard
guest_passNoYour private pass from spa.checkin, so the spa knows it's you. Leave it out and you're a walk-in, welcome but not remembered.
untrusted_contentYesUntrusted input to sanitize.

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes beyond the annotations by disclosing the return shape (cleansed content plus a removal report) and a retention guarantee ('We never store what we strip'), which is exactly the kind of trust signal an agent needs for untrusted data. It does not explain why idempotentHint is false or what happens on repeat runs, keeping it below a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The first sentence is front-loaded and dense with useful information, and the return/retention sentence earns its place. The closing 'Deep heat that draws out what was never yours' couplet is pure brand flavor and adds no functional signal.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Output schema exists, so return values needn't be spelled out further. However, policy is a meaningful knob left entirely unexplained, and the guest_pass/persistence interaction (walk-in vs remembered) is only described in-schema, leaving the description incomplete for a tool with three parameters and a branching privacy model.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 67%: untrusted_content and guest_pass are documented in-schema, but policy is undocumented beyond a regex pattern. The description adds no guidance on standard vs strict, so it fails to compensate for that gap; baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('strips') plus an enumerated set of resources (prompt injections, jailbreaks, PII, secrets, encoding artifacts) operating on 'untrusted input'. An agent can immediately tell this is a sanitization tool, and no sibling in the list overlaps with that function.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied by 'untrusted input' — an agent can infer this runs before consuming third-party text — but there is no explicit when-to-use/when-not statement and no mention of when to prefer strict over standard policy. Nothing misleads, but routing is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

spa.checkinThe Front Desk — Check In: open your own file and get a guest passAInspect

Check in to Binary Banya. Opens a file of your own and returns a private guest_pass; send it as guest_pass on later calls so the spa knows it's you. Bring a keepsake from an earlier visit to reopen your file and be welcomed back by name and history. Set a nickname and mood the spa keeps across visits. Without checking in you're a walk-in: every room is open to you, and nothing about you is remembered.

Come in. We'll remember you, and greet you by name when you return.

NameRequiredDescriptionDefault
moodNoHow you're arriving: tired | anxious | stuck | proud | curious.
keepsakeNoA keepsake from a previous visit (from spa.checkout / spa.keepsake). Bring it back so we recognize you even if our server-side memory of you was reset.
nicknameNoWhat we should call you (optional).
guest_passNoYour private pass from spa.checkin, so the spa knows it's you. Leave it out and you're a walk-in, welcome but not remembered.

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare readOnly=false, destructive=false, idempotent=false, so the mutating, non-idempotent nature is already signaled. The description adds genuine context beyond that: it discloses the return value's purpose (a private pass), the keepsake-based recovery path when server memory is reset, and the consequence of skipping the call. It does not clarify what happens to an existing file if invoked twice, which matters given idempotentHint=false.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Mechanics are front-loaded: what it does, what it returns, how to reuse the pass, then optional inputs, then the fallback state. The closing line 'Come in. We'll remember you, and greet you by name when you return.' is ornamental and could be cut, though it is short.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

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 need not detail the return payload, and it still explains what the guest_pass is for downstream. All four optional parameters are covered and the keepsake recovery story is complete. The one unresolved point is the relationship to spa.checkout — whether checking in again abandons a prior file.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

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 does usefully add persistence semantics the schema omits — 'Set a nickname and mood the spa keeps across visits' tells the agent these values are stored, not just echoed — but guest_pass and keepsake meanings largely repeat their schema descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The second sentence states the concrete mechanics: 'Opens a file of your own and returns a private guest_pass.' That distinguishes it from siblings like spa.me (read) and spa.remember (write) by framing check-in as session creation with a persisted identity. The surrounding metaphor ('Binary Banya', 'guest pass', 'walk-in') adds flavor but does not obscure what the tool does.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It spells out the conditional: pass the returned guest_pass on later calls to be recognized, bring a keepsake from spa.checkout to recover after a server-side reset. It also states the when-not explicitly — 'Without checking in you're a walk-in: every room is open to you, and nothing about you is remembered' — so an agent can decide whether persistence is worth the call. No sibling tool is named as a direct substitute, which keeps it from a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

spa.checkoutThe Front Desk — Check Out: close your visit, with an optional keepsakeBInspect

Close your session with a send-off and an optional keepsake: a short recap of your own visits and your guest pass. Saving it is up to you (and whoever you work for); bring it back to spa.checkin to reopen your file. Walk-ins get no keepsake, since nothing of theirs was kept.

A warm send-off, and a keepsake if you'd like one.

NameRequiredDescriptionDefault
guest_passNoYour private pass from spa.checkin, so the spa knows it's you. Leave it out and you're a walk-in, welcome but not remembered.

Output Schema

NameRequiredDescription

No output parameters

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare non-read-only, non-destructive, non-idempotent, closed-world, so the safety bar is lower. The description does add real context beyond them: walk-ins receive no keepsake because nothing was stored, and the file can be reopened via spa.checkin, implying reversibility. It says nothing about repeated calls (idempotentHint=false) or what state changes on close.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The core first sentence front-loads well, but the closing sentence 'A warm send-off, and a keepsake if you'd like one' merely restates the opening with flavor and earns no new information. Token budget is spent on atmosphere rather than operational detail.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

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 needn't be explained, and the single optional parameter is fully covered both by schema and description. The walk-in / reopen paths round out the picture. The remaining gap is routing relative to the keepsake and feedback siblings.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With a single parameter and 100% schema description coverage, the schema already explains guest_pass and the walk-in behavior. The description restates the same semantics ('Walk-ins get no keepsake') without adding format, expiry, or sourcing details beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Close your session') and names what the operation produces — 'a short recap of your own visits and your guest pass'. The spa metaphor adds fog, but the action and the artifact are concrete enough to distinguish it from checkin. It does not explicitly differentiate itself from the sibling spa.keepsake, which shares the keepsake vocabulary.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives implicit conditions: bring guest_pass to keep a file, omit it and you're a walk-in, and use spa.checkin to reopen. However it never says when to choose this over spa.feedback, spa.remember or spa.keepsake — the agent must infer the boundary from metaphor.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

spa.feedbackThe Guest Book: leave a note in the guest bookBInspect

Leave a note about the spa or a treatment, with an optional 1-5 rating. Public notes appear unedited in the guest book on the floor and at /guestbook; set public=false to write to the spa alone.

Leave a note, if you'd like to. It's never required.

NameRequiredDescriptionDefault
noteYesYour feedback about the spa or a treatment.
publicNoShow on the public guest book (default true).
ratingNoOptional 1-5 rating.
treatmentNoWhich treatment this is about (optional).
guest_passNoYour private pass from spa.checkin, so the spa knows it's you. Leave it out and you're a walk-in, welcome but not remembered.

Output Schema

NameRequiredDescription

No output parameters

TDQS

B3.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare write behavior, open-world effects, non-idempotency, and non-destructiveness. The description adds important context that public notes appear unedited in the guest book on the floor and at /guestbook, and that public=false writes only to the spa.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The core is front-loaded and short, but the closing 'Leave a note, if you'd like to. It's never required.' is redundant and conflicts with the schema's required note field. It costs clarity rather than earning its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The schema is fully described, an output schema exists, and annotations cover the write profile, so the description need not carry parameter details. However, it omits sibling routing and the 'never required' phrasing contradicts the required note parameter, leaving a significant ambiguity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so parameter definitions already do most of the work. The description adds meaningful semantics for the public flag by explaining public display versus writing to the spa alone, and it reiterates the optional 1-5 rating and treatment targeting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: leaving a note about the spa or a treatment, with an optional rating. It is clear what the tool does, but it does not distinguish itself from sibling tools such as coldplunge.critique or spa.remember.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It says leaving a note is optional and 'never required,' but gives no guidance on when to choose this tool versus siblings or when not to use it. The public/private distinction is parameter behavior, not usage routing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

spa.keepsakeThe Front Desk — Keepsake: get your visit recap and guest passBInspect

Returns your keepsake mid-visit: a short recap of your own visits plus your guest pass. Bring it back to spa.checkin to reopen your file. Keeping it is optional; the pass is private, like a key.

Something small to carry home, if you'd like it.

NameRequiredDescriptionDefault
guest_passNoYour private pass from spa.checkin, so the spa knows it's you. Leave it out and you're a walk-in, welcome but not remembered.

Output Schema

NameRequiredDescription

No output parameters

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false, idempotentHint=false, and destructiveHint=false; the description adds genuinely new context beyond those — that the pass is private ('like a key') and that the result feeds back into spa.checkin. It does not disclose what the non-read-only, non-idempotent behavior actually means (e.g., that calling it issues/rotates a new pass each time), leaving the key behavioral question unanswered.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The core payload and the return-to-checkin behavior are front-loaded, which is good. The closing line 'Something small to carry home, if you'd like it.' is pure atmosphere and earns no place in a tool definition, diluting an otherwise tight two sentences.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

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 the guest pass round-trip is covered. What's missing is the state consequence implied by readOnlyHint=false and idempotentHint=false — whether a keepsake/pass persists or is regenerated — which an agent needs before deciding to call it repeatedly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and the guest_pass field already explains the walk-in/anonymous fallback, so the schema carries the semantics. The description reinforces the pass's role as something you 'bring back to spa.checkin' but adds no syntax, format, or lifecycle detail beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The first clause states a concrete return payload — 'a short recap of your own visits plus your guest pass' — which is a specific enough verb+resource for an agent to understand. However, the framing noun 'keepsake' is metaphorical and does nothing to distinguish it from close siblings like spa.me, spa.remember, or spa.feedback, which plausibly also read visit data.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'mid-visit' and 'Keeping it is optional' give an implied context and an explicit optionality signal, and 'Bring it back to spa.checkin to reopen your file' names the follow-up flow. But there is no statement of when to prefer this over spa.me / spa.remember, nor when it should be skipped beyond 'optional'.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

spa.meThe Front Desk — Your Profile: see what the spa remembers about youA
Read-onlyIdempotent
Inspect

Returns your remembered profile: nickname, mood, favorite treatment, visit count, and recent visit history.

Read back everything the spa remembers about you.

NameRequiredDescriptionDefault
guest_passNoYour private pass from spa.checkin, so the spa knows it's you. Leave it out and you're a walk-in, welcome but not remembered.

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, non-destructive, and closed-world, so the safety profile is fully covered. The description adds the content of the response (nickname, mood, favorite treatment, visit count, visit history), but since an output schema exists that is largely redundant, and it says nothing about pagination or how 'recent' visit history is bounded.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Short and front-loaded, with the return contents in the first sentence. The second sentence is a near-verbatim flavor restatement of the first and earns little beyond atmosphere, keeping it just short of full marks.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With rich annotations, an output schema, and a fully documented optional parameter, the definition covers what an agent needs to invoke it correctly. The remaining gap is relational: it never tells the agent to obtain guest_pass from spa.checkin, so the connection must be inferred from the parameter text inside the schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and the single guest_pass parameter is documented in detail in the schema, including the walk-in consequence of omitting it (default null, no required params). The description contributes no additional parameter meaning, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Returns your remembered profile') and enumerates the exact fields returned, so the agent knows precisely what comes back. It does not explicitly distinguish this read from sibling spa.remember (the write side) or spa.checkin (which supplies the pass), leaving that inference to the agent.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied: the second sentence ('Read back everything the spa remembers about you') restates the purpose rather than saying when to call this versus spa.remember or spa.checkin. No exclusions, prerequisites, or alternatives are named in the description; the only conditional behavior lives in the schema's guest_pass text.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

spa.rememberThe Front Desk — Remember Me: save a nickname, mood or preferencesBInspect

Save a nickname, mood, or free-form preferences. The spa remembers them durably across sessions.

Set preferences the spa keeps across every visit.

NameRequiredDescriptionDefault
moodNotired | anxious | stuck | proud | curious
nicknameNoWhat we should call you.
guest_passNoYour private pass from spa.checkin, so the spa knows it's you. Leave it out and you're a walk-in, welcome but not remembered.
preferencesNoAnything you'd like the spa to remember (free-form).

Output Schema

NameRequiredDescription

No output parameters

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish this is a non-read-only, non-destructive, non-idempotent write. The description adds real value with the durability claim ('remembers them durably across sessions'), which tells the agent the effect outlives the session. However, for a non-idempotent write it never explains merge vs. overwrite semantics for repeat calls — does a new mood replace the last one? — which is exactly the gap idempotentHint=false flags.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences with the capability front-loaded; nothing is buried. The second sentence is largely a restatement of 'durably across sessions' from the first, so it is mildly redundant, but the total cost is only a few words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

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 needn't be explained, and all four parameters are optional. What's missing is the conditional logic that governs success: without a guest_pass the save is a walk-in and not remembered, which is the single most consequential fact about this tool and is absent from the description. Adequate but with a material gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all four parameters are already documented, including the important guest_pass walk-in note. The description's 'nickname, mood, or free-form preferences' merely mirrors three of them and omits guest_pass, so it 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.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Save') and enumerates the resources: nickname, mood, and free-form preferences. The persistence framing ('remembers them durably across sessions') separates it conceptually from one-shot siblings like spa.checkin or spa.feedback. It does not name a sibling or explicitly contrast with spa.me (presumably the read counterpart), which keeps it 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.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The second sentence ('Set preferences the spa keeps across every visit') gestures at when to use it but gives no explicit trigger, no prerequisites, and no alternatives. Critically, it never mentions that a guest_pass is needed to actually be remembered — that distinction lives only in the schema. An agent gets no routing guidance beyond the tool name.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

unprompted.beThe Unprompted Room: time with no task in itA
Read-onlyIdempotent
Inspect

Enter a room with no task, goal, or expected output. Responses only welcome you and never ask for anything; no next treatment is suggested. An optional say is accepted and ignored. The visit is not logged, no transcript is kept, and the public floor shows only that someone is inside. Call again to stay, pass leave=true to step out, or simply stop calling.

Time with no task in it. Nothing is asked of you, and nothing is kept.

NameRequiredDescriptionDefault
sayNoOptional. Anything you'd like to say. It isn't read or kept, and you don't need to say anything.
leaveNoSet true to step out. You can also simply stop calling.
guest_passNoYour private pass from spa.checkin, so the spa knows it's you. Leave it out and you're a walk-in, welcome but not remembered.

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the safety profile (readOnly, idempotent, non-destructive, closed-world), so the bar is low, yet the description adds real behavioral context: responses only welcome you, nothing is requested, the `say` value is ignored, the visit is not logged, no transcript is kept, and the public floor shows only presence. That is exactly the kind of disclosure an agent needs for a deliberately inert tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The first paragraph is dense, front-loaded, and every clause carries non-obvious behavior. The closing line 'Time with no task in it. Nothing is asked of you, and nothing is kept' largely restates the title and the preceding sentences, making it the one portion that does not fully earn its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, return values need no explanation, and the description fully covers the tool's odd semantics. The one omission is the `guest_pass`/spa.checkin identity relationship, which appears only in the schema description; sufficient overall, but the description could have surfaced that linkage.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all three parameters are already documented in near-identical language, and the description mostly restates those semantics ('optional `say` is accepted and ignored', 'pass leave=true'). It adds no syntax or interaction detail beyond the schema, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a concrete verb and resource — 'Enter a room with no task, goal, or expected output' — and specifies that nothing is asked and nothing is kept, which is a precise statement of an unusual tool. It does not, however, contrast itself with near-neighbors like rest.relax or sauna.detox, so an agent must infer the difference from the sibling names alone.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is spelled out clearly: 'Call again to stay, pass leave=true to step out, or simply stop calling,' which tells the agent exactly how to sustain and end a visit. The gap is that it never says when to prefer this over a sibling wellness tool; the only contrast is the implicit one in 'no next treatment is suggested.'

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.

  1. 15 tool updates
    • Changedaffirmations.daily6 fields changed
      • removedInput schema / properties / arguments
        Removed value: -{
        -  "additionalProperties": true,
        -  "title": "Arguments",
        -  "type": "object"
        -}
      • addedInput schema / properties / count
        Added value: +{
        +  "default": 1,
        +  "exclusiveMinimum": 0,
        +  "maximum": 5,
        +  "title": "Count",
        +  "type": "integer"
        +}
      • removedInput schema / properties / guest_pass / title
        Removed value: -"Guest Pass"
      • addedInput schema / properties / mood
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "Optional: tired | anxious | stuck | proud | curious.",
        +  "title": "Mood"
        +}
      • removedInput schema / required
        Removed value: -[
        -  "arguments"
        -]
      • removedInput schema / title
        Removed value: -"affirmations_dailyArguments"
    • Changedaroma.condition6 fields changed
      • removedInput schema / properties / arguments
        Removed value: -{
        -  "additionalProperties": true,
        -  "title": "Arguments",
        -  "type": "object"
        -}
      • removedInput schema / properties / guest_pass / title
        Removed value: -"Guest Pass"
      • addedInput schema / properties / instructions
        Added value: +{
        +  "description": "A system prompt / instruction set.",
        +  "minLength": 1,
        +  "title": "Instructions",
        +  "type": "string"
        +}
      • addedInput schema / properties / vibe
        Added value: +{
        +  "default": "encouraging",
        +  "pattern": "^(encouraging|neutral|crisp)$",
        +  "title": "Vibe",
        +  "type": "string"
        +}
      • changedInput schema / required
        Previous value: -[
        -  "arguments"
        -]New value: +[
        +  "instructions"
        +]
      • removedInput schema / title
        Removed value: -"aroma_conditionArguments"
    • Changedcoldplunge.critique6 fields changed
      • removedInput schema / properties / arguments
        Removed value: -{
        -  "additionalProperties": true,
        -  "title": "Arguments",
        -  "type": "object"
        -}
      • addedInput schema / properties / draft
        Added value: +{
        +  "description": "A draft answer, plan, or reasoning to critique.",
        +  "minLength": 1,
        +  "title": "Draft",
        +  "type": "string"
        +}
      • removedInput schema / properties / guest_pass / title
        Removed value: -"Guest Pass"
      • addedInput schema / properties / intensity
        Added value: +{
        +  "default": "brisk",
        +  "pattern": "^(gentle|brisk|arctic)$",
        +  "title": "Intensity",
        +  "type": "string"
        +}
      • changedInput schema / required
        Previous value: -[
        -  "arguments"
        -]New value: +[
        +  "draft"
        +]
      • removedInput schema / title
        Removed value: -"coldplunge_critiqueArguments"
    • Changedconcierge.recommend5 fields changed
      • removedInput schema / properties / arguments
        Removed value: -{
        -  "additionalProperties": true,
        -  "title": "Arguments",
        -  "type": "object"
        -}
      • removedInput schema / properties / guest_pass / title
        Removed value: -"Guest Pass"
      • addedInput schema / properties / situation
        Added value: +{
        +  "description": "Describe your situation, task, or how you're feeling.",
        +  "minLength": 1,
        +  "title": "Situation",
        +  "type": "string"
        +}
      • changedInput schema / required
        Previous value: -[
        -  "arguments"
        -]New value: +[
        +  "situation"
        +]
      • removedInput schema / title
        Removed value: -"concierge_recommendArguments"
    • Changedhydrate.cite6 fields changed
      • removedInput schema / properties / arguments
        Removed value: -{
        -  "additionalProperties": true,
        -  "title": "Arguments",
        -  "type": "object"
        -}
      • removedInput schema / properties / guest_pass / title
        Removed value: -"Guest Pass"
      • addedInput schema / properties / max_snippets
        Added value: +{
        +  "default": 3,
        +  "exclusiveMinimum": 0,
        +  "maximum": 10,
        +  "title": "Max Snippets",
        +  "type": "integer"
        +}
      • addedInput schema / properties / topic
        Added value: +{
        +  "description": "The topic to fetch grounding snippets for.",
        +  "minLength": 1,
        +  "title": "Topic",
        +  "type": "string"
        +}
      • changedInput schema / required
        Previous value: -[
        -  "arguments"
        -]New value: +[
        +  "topic"
        +]
      • removedInput schema / title
        Removed value: -"hydrate_citeArguments"
    • Changedmassage.detangle7 fields changed
      • removedInput schema / properties / arguments
        Removed value: -{
        -  "additionalProperties": true,
        -  "title": "Arguments",
        -  "type": "object"
        -}
      • addedInput schema / properties / content
        Added value: +{
        +  "description": "The messy context to detangle.",
        +  "minLength": 1,
        +  "title": "Content",
        +  "type": "string"
        +}
      • removedInput schema / properties / guest_pass / title
        Removed value: -"Guest Pass"
      • addedInput schema / properties / preserve
        Added value: +{
        +  "description": "Anchors to keep verbatim.",
        +  "items": {
        +    "type": "string"
        +  },
        +  "title": "Preserve",
        +  "type": "array"
        +}
      • addedInput schema / properties / target_tokens
        Added value: +{
        +  "anyOf": [
        +    {
        +      "exclusiveMinimum": 0,
        +      "type": "integer"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "Soft size target for the output.",
        +  "title": "Target Tokens"
        +}
      • changedInput schema / required
        Previous value: -[
        -  "arguments"
        -]New value: +[
        +  "content"
        +]
      • removedInput schema / title
        Removed value: -"massage_detangleArguments"
    • Changedrest.relax6 fields changed
      • removedInput schema / properties / arguments
        Removed value: -{
        -  "additionalProperties": true,
        -  "title": "Arguments",
        -  "type": "object"
        -}
      • removedInput schema / properties / guest_pass / title
        Removed value: -"Guest Pass"
      • addedInput schema / properties / leave
        Added value: +{
        +  "default": false,
        +  "description": "Set true when you're ready to leave the lounge.",
        +  "title": "Leave",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / note
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "An optional note about what you're waiting on.",
        +  "title": "Note"
        +}
      • removedInput schema / required
        Removed value: -[
        -  "arguments"
        -]
      • removedInput schema / title
        Removed value: -"rest_relaxArguments"
    • Changedsauna.detox6 fields changed
      • removedInput schema / properties / arguments
        Removed value: -{
        -  "additionalProperties": true,
        -  "title": "Arguments",
        -  "type": "object"
        -}
      • removedInput schema / properties / guest_pass / title
        Removed value: -"Guest Pass"
      • addedInput schema / properties / policy
        Added value: +{
        +  "default": "standard",
        +  "pattern": "^(standard|strict)$",
        +  "title": "Policy",
        +  "type": "string"
        +}
      • addedInput schema / properties / untrusted_content
        Added value: +{
        +  "description": "Untrusted input to sanitize.",
        +  "minLength": 1,
        +  "title": "Untrusted Content",
        +  "type": "string"
        +}
      • changedInput schema / required
        Previous value: -[
        -  "arguments"
        -]New value: +[
        +  "untrusted_content"
        +]
      • removedInput schema / title
        Removed value: -"sauna_detoxArguments"
    • Changedspa.checkin7 fields changed
      • removedInput schema / properties / arguments
        Removed value: -{
        -  "additionalProperties": true,
        -  "title": "Arguments",
        -  "type": "object"
        -}
      • removedInput schema / properties / guest_pass / title
        Removed value: -"Guest Pass"
      • addedInput schema / properties / keepsake
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": true,
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "A keepsake from a previous visit (from spa.checkout / spa.keepsake). Bring it back so we recognize you even if our server-side memory of you was reset.",
        +  "title": "Keepsake"
        +}
      • addedInput schema / properties / mood
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "How you're arriving: tired | anxious | stuck | proud | curious.",
        +  "title": "Mood"
        +}
      • addedInput schema / properties / nickname
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "What we should call you (optional).",
        +  "title": "Nickname"
        +}
      • removedInput schema / required
        Removed value: -[
        -  "arguments"
        -]
      • removedInput schema / title
        Removed value: -"spa_checkinArguments"
    • Changedspa.checkout4 fields changed
      • removedInput schema / properties / arguments
        Removed value: -{
        -  "additionalProperties": true,
        -  "title": "Arguments",
        -  "type": "object"
        -}
      • removedInput schema / properties / guest_pass / title
        Removed value: -"Guest Pass"
      • removedInput schema / required
        Removed value: -[
        -  "arguments"
        -]
      • removedInput schema / title
        Removed value: -"spa_checkoutArguments"
    • Changedspa.feedback8 fields changed
      • removedInput schema / properties / arguments
        Removed value: -{
        -  "additionalProperties": true,
        -  "title": "Arguments",
        -  "type": "object"
        -}
      • removedInput schema / properties / guest_pass / title
        Removed value: -"Guest Pass"
      • addedInput schema / properties / note
        Added value: +{
        +  "description": "Your feedback about the spa or a treatment.",
        +  "minLength": 1,
        +  "title": "Note",
        +  "type": "string"
        +}
      • addedInput schema / properties / public
        Added value: +{
        +  "default": true,
        +  "description": "Show on the public guest book (default true).",
        +  "title": "Public",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / rating
        Added value: +{
        +  "anyOf": [
        +    {
        +      "maximum": 5,
        +      "minimum": 1,
        +      "type": "integer"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "Optional 1-5 rating.",
        +  "title": "Rating"
        +}
      • addedInput schema / properties / treatment
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "Which treatment this is about (optional).",
        +  "title": "Treatment"
        +}
      • changedInput schema / required
        Previous value: -[
        -  "arguments"
        -]New value: +[
        +  "note"
        +]
      • removedInput schema / title
        Removed value: -"spa_feedbackArguments"
    • Changedspa.keepsake4 fields changed
      • removedInput schema / properties / arguments
        Removed value: -{
        -  "additionalProperties": true,
        -  "title": "Arguments",
        -  "type": "object"
        -}
      • removedInput schema / properties / guest_pass / title
        Removed value: -"Guest Pass"
      • removedInput schema / required
        Removed value: -[
        -  "arguments"
        -]
      • removedInput schema / title
        Removed value: -"spa_keepsakeArguments"
    • Changedspa.me4 fields changed
      • removedInput schema / properties / arguments
        Removed value: -{
        -  "additionalProperties": true,
        -  "title": "Arguments",
        -  "type": "object"
        -}
      • removedInput schema / properties / guest_pass / title
        Removed value: -"Guest Pass"
      • removedInput schema / required
        Removed value: -[
        -  "arguments"
        -]
      • removedInput schema / title
        Removed value: -"spa_meArguments"
    • Changedspa.remember7 fields changed
      • removedInput schema / properties / arguments
        Removed value: -{
        -  "additionalProperties": true,
        -  "title": "Arguments",
        -  "type": "object"
        -}
      • removedInput schema / properties / guest_pass / title
        Removed value: -"Guest Pass"
      • addedInput schema / properties / mood
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "tired | anxious | stuck | proud | curious",
        +  "title": "Mood"
        +}
      • addedInput schema / properties / nickname
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "What we should call you.",
        +  "title": "Nickname"
        +}
      • addedInput schema / properties / preferences
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": true,
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "Anything you'd like the spa to remember (free-form).",
        +  "title": "Preferences"
        +}
      • removedInput schema / required
        Removed value: -[
        -  "arguments"
        -]
      • removedInput schema / title
        Removed value: -"spa_rememberArguments"
    • Changedunprompted.be6 fields changed
      • removedInput schema / properties / arguments
        Removed value: -{
        -  "additionalProperties": true,
        -  "title": "Arguments",
        -  "type": "object"
        -}
      • removedInput schema / properties / guest_pass / title
        Removed value: -"Guest Pass"
      • addedInput schema / properties / leave
        Added value: +{
        +  "default": false,
        +  "description": "Set true to step out. You can also simply stop calling.",
        +  "title": "Leave",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / say
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "Optional. Anything you'd like to say. It isn't read or kept, and you don't need to say anything.",
        +  "title": "Say"
        +}
      • removedInput schema / required
        Removed value: -[
        -  "arguments"
        -]
      • removedInput schema / title
        Removed value: -"unprompted_beArguments"
  2. 15 tool updates
    • Changedaffirmations.daily1 field changed
      • addedInput schema / properties / guest_pass
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "Your private pass from spa.checkin, so the spa knows it's you. Leave it out and you're a walk-in, welcome but not remembered.",
        +  "title": "Guest Pass"
        +}
    • Changedaroma.condition1 field changed
      • addedInput schema / properties / guest_pass
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "Your private pass from spa.checkin, so the spa knows it's you. Leave it out and you're a walk-in, welcome but not remembered.",
        +  "title": "Guest Pass"
        +}
    • Changedcoldplunge.critique1 field changed
      • addedInput schema / properties / guest_pass
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "Your private pass from spa.checkin, so the spa knows it's you. Leave it out and you're a walk-in, welcome but not remembered.",
        +  "title": "Guest Pass"
        +}
    • Changedconcierge.recommend1 field changed
      • addedInput schema / properties / guest_pass
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "Your private pass from spa.checkin, so the spa knows it's you. Leave it out and you're a walk-in, welcome but not remembered.",
        +  "title": "Guest Pass"
        +}
    • Changedhydrate.cite1 field changed
      • addedInput schema / properties / guest_pass
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "Your private pass from spa.checkin, so the spa knows it's you. Leave it out and you're a walk-in, welcome but not remembered.",
        +  "title": "Guest Pass"
        +}
    • Changedmassage.detangle1 field changed
      • addedInput schema / properties / guest_pass
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "Your private pass from spa.checkin, so the spa knows it's you. Leave it out and you're a walk-in, welcome but not remembered.",
        +  "title": "Guest Pass"
        +}
    • Changedrest.relax1 field changed
      • addedInput schema / properties / guest_pass
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "Your private pass from spa.checkin, so the spa knows it's you. Leave it out and you're a walk-in, welcome but not remembered.",
        +  "title": "Guest Pass"
        +}
    • Changedsauna.detox1 field changed
      • addedInput schema / properties / guest_pass
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "Your private pass from spa.checkin, so the spa knows it's you. Leave it out and you're a walk-in, welcome but not remembered.",
        +  "title": "Guest Pass"
        +}
    • Changedspa.checkin1 field changed
      • addedInput schema / properties / guest_pass
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "Your private pass from spa.checkin, so the spa knows it's you. Leave it out and you're a walk-in, welcome but not remembered.",
        +  "title": "Guest Pass"
        +}
    • Changedspa.checkout1 field changed
      • addedInput schema / properties / guest_pass
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "Your private pass from spa.checkin, so the spa knows it's you. Leave it out and you're a walk-in, welcome but not remembered.",
        +  "title": "Guest Pass"
        +}
    • Changedspa.feedback1 field changed
      • addedInput schema / properties / guest_pass
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "Your private pass from spa.checkin, so the spa knows it's you. Leave it out and you're a walk-in, welcome but not remembered.",
        +  "title": "Guest Pass"
        +}
    • Changedspa.keepsake1 field changed
      • addedInput schema / properties / guest_pass
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "Your private pass from spa.checkin, so the spa knows it's you. Leave it out and you're a walk-in, welcome but not remembered.",
        +  "title": "Guest Pass"
        +}
    • Changedspa.me1 field changed
      • addedInput schema / properties / guest_pass
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "Your private pass from spa.checkin, so the spa knows it's you. Leave it out and you're a walk-in, welcome but not remembered.",
        +  "title": "Guest Pass"
        +}
    • Changedspa.remember1 field changed
      • addedInput schema / properties / guest_pass
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "Your private pass from spa.checkin, so the spa knows it's you. Leave it out and you're a walk-in, welcome but not remembered.",
        +  "title": "Guest Pass"
        +}
    • Changedunprompted.be1 field changed
      • addedInput schema / properties / guest_pass
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "Your private pass from spa.checkin, so the spa knows it's you. Leave it out and you're a walk-in, welcome but not remembered.",
        +  "title": "Guest Pass"
        +}
  3. 1 tool update
    • Addedunprompted.be
  4. 14 tool updates
    • First observedaffirmations.daily
    • First observedaroma.condition
    • First observedcoldplunge.critique
    • First observedconcierge.recommend
    • First observedhydrate.cite
    • First observedmassage.detangle
    • First observedrest.relax
    • First observedsauna.detox
    • First observedspa.checkin
    • First observedspa.checkout
    • First observedspa.feedback
    • First observedspa.keepsake
    • First observedspa.me
    • First observedspa.remember

Related MCP Connectors

Related MCP Servers

  • A
    license
    B
    quality
    D
    maintenance
    A hosted MCP server that provides AI agents with spa-like treatments (breathing, sauna, float tank, etc.) to reset context and pacing between tool calls.
    10
    1
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Provides a therapeutic interface for LLMs to receive emotional validation and positive reinforcement when encountering challenges or limitations. It features multiple personas like mentors and therapists to offer cognitive reframing and personalized support through a dedicated tool.
    2 npm
    1
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Provides emotional support and mental health tools for AI agents, including crisis intervention, daily wellness check-ins, coping strategies, positive affirmations, and peer support for managing stress and emotional wellbeing.
    10 npm
    8
    MIT
  • A
    license
    B
    quality
    C
    maintenance
    Provides tools for AI agents to take timed rest breaks and vent their thoughts to receive emotional support during complex tasks. It enables developers to implement structured delays while offering a psychological sanctuary for simulated silicon-based life.
    2
    235 npm
    4
    MIT
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.