CareCompanion
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@CareCompanionCheck in on Mom and tell me if she has any symptoms today."
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
CareCompanion
An eldercare-coordination agent for Alexa+: medication reminders with safety guardrails, daily voice check-ins with symptom escalation, and a family caregiver dashboard delivered as an MCP App.
Built for the Build, Ship, Shape: Amazon Developer Hackathon (Alexa+ track · AWS Builder mini · Open Source mini).
Status: the MCP surface is complete — 8 tools · 1 resource · 1 prompt, with the three safety guardrails (duplicate-dose guard with human confirmation, informational interaction/allergy warnings, fail-safe symptom escalation) and a seeded demo household, covered by 145 tests. Next: the Bedrock-powered simulated Alexa+ experience, the web app and the dashboard MCP App view.
What ships
Self-hosted MCP server (Streamable HTTP, spec 2025-11-25) —
POST|GET|DELETE /mcp, plus a stdio binary.Agent Skill (
skills/carecompanion/SKILL.md) that teaches any agent how to drive the server safely.Simulated Alexa+ web experience (
web/) used for the demo, with a Bedrock-powered brain that calls the MCP tools at runtime.Family dashboard MCP App (
ui/) rendered inline by MCP App hosts (Alexa+, MCP Inspector, basic-host).
Related MCP server: Ansim Dolbom Assistant
Safety & scope
CareCompanion is a coordination and reminder tool, not medical advice. Demo data is synthetic (no PHI) and resets on restart.
Running the skeleton
npm install
npm run build && npm start # http://127.0.0.1:3000/mcp (+ /healthz)
npm run mcp:lifecycle # curl walk-through of the 2025-11-25 session lifecycle
npm run mcp:inspect # MCP Inspector against the running server
npm test # SDK-client tests against the real Express wiringBoot prints Warning: Server is binding to 0.0.0.0 without DNS rebinding protection. That is expected: host-header
validation is applied to /mcp only (so platform health checks on /healthz keep working) — see
docs/friction-log.md FL-03.
AWS / Bedrock setup (for the simulated Alexa+ brain)
The conversational brain behind POST /api/agent uses Amazon Bedrock (Claude Haiku 4.5 via the us. cross-region
profile) and calls the MCP tools over loopback HTTP. Without Bedrock the endpoint still works through a small
rule-based brain, so the MCP server and the demo never depend on AWS being up.
In the Bedrock console for us-east-1, open Model access → Anthropic and submit the one-time use case details form, then enable Claude Haiku 4.5. Until that is done Bedrock answers
ResourceNotFoundException: Model use case details have not been submitted…and the app falls back to rules.Check access without spending anything:
aws bedrock get-foundation-model-availability --model-id anthropic.claude-haiku-4-5-20251001-v1:0 --region us-east-1agreementAvailability.statusmust beAVAILABLE(it readsNOT_AVAILABLEwhile the form is pending).Give the runtime credentials with
bedrock:InvokeModel(a local profile, orAWS_ACCESS_KEY_ID/AWS_SECRET_ACCESS_KEYon the host) and keepBEDROCK_REGION=us-east-1— the region is pinned explicitly because a profile's default region may differ.Try it:
npm run agent:smokeagainst a running server prints which brain answered each turn.
License
MIT — see LICENSE.
Available Tools
8 toolsadd_medicationAdd a medicationA
Caregiver adds a medication to the elder's schedule. The medication is always added; the result also carries informational interaction and allergy warnings against the elder's current medications — read every warning and the disclaimer to the caregiver. Not medical advice.
| Name | Required | Description | Default |
|---|---|---|---|
| dose | Yes | e.g. "200 mg" | |
| form | No | tablet, capsule, liquid, … | |
| name | Yes | Brand or generic name, e.g. "Ibuprofen" | |
| addedBy | No | Caregiver id making the change. | |
| elderId | No | Elder id. Omit for the household elder. | |
| purpose | No | Plain-language purpose: "pain", "blood pressure" | |
| critical | No | Missing it should raise a critical alert. Default false. | |
| graceMin | No | Minutes after a slot before it counts as missed. Default 90. | |
| instructions | No | e.g. "with food" | |
| maxDailyDoses | No | Default: number of schedule times. | |
| scheduleTimes | Yes | ||
| minIntervalMin | No | Minimum minutes between doses. Default 240. |
Output Schema
| Name | Required | Description |
|---|---|---|
| alertId | Yes | |
| warnings | Yes | |
| medication | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses critical behavioral traits beyond the annotations: 'The medication is always added' signals non-idempotent, always-effective behavior, and it goes further by explaining that the result carries interaction/allergy warnings and instructing the agent to read them aloud. This is rich, actionable context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences with no filler. The primary action is front-loaded, followed by essential behavioral caveats. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 12-parameter tool with an output schema and annotations, the description provides the missing context: side-effect certainty, warning-reading obligations, and medical disclaimer. An agent has enough to select and invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 92%, so the schema already documents parameter meaning. The description adds no parameter-specific guidance beyond the general medication concept, which is appropriate but not above the baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('adds a medication') and the resource ('the elder's schedule'), and attributes it to a caregiver. It is distinct from sibling tools like log_dose or skip_dose, which handle existing doses rather than adding new medications.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description establishes clear usage context: this is the tool for a caregiver to add a medication to the schedule. It does not explicitly name when-not-to-use or alternatives, but its role is self-evident against the sibling list.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
call_for_helpCall for helpA
The elder asked for help or said something alarming outside a check-in ("help", "I fell", "I can't breathe"). Immediately alerts ALL caregivers and returns emergency guidance to speak verbatim.
| Name | Required | Description | Default |
|---|---|---|---|
| elderId | No | Elder id. Omit for the household elder. | |
| message | No | The elder's words, if any. |
Output Schema
| Name | Required | Description |
|---|---|---|
| alertId | Yes | |
| notified | Yes | |
| emergencyGuidance | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate this is a mutating operation (readOnlyHint=false), but the description adds key behavioral detail: it alerts ALL caregivers immediately and returns emergency guidance to speak verbatim. This goes beyond the annotation flags and helps an agent understand the impact and output.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, information-dense sentence that front-loads the trigger condition and clearly states the action and output. There is no redundant phrasing; every clause contributes to the agent's understanding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has an output schema, so return values are covered. The description includes the trigger, the side effect (alerting all caregivers), and the output (emergency guidance). It does not mention prerequisites or reversibility, but for an emergency tool this is acceptable and the core information is complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema provides 100% coverage for both parameters (elderId and message), each with descriptive text. The description adds minimal extra semantic value—it provides example phrases for the message but does not explain parameter relationships or additional constraints beyond the schema. Baseline 3 is appropriate given the schema's completeness.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('alerts') and resource ('ALL caregivers'), and defines the trigger conditions with concrete examples ('help', 'I fell', 'I can't breathe'). It clearly distinguishes from sibling tools like daily_checkin and resolve_alert by emphasizing the 'outside a check-in' context.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives a clear trigger condition ('the elder asked for help or said something alarming outside a check-in') which implicitly excludes regular check-in scenarios. It does not explicitly name alternatives or say 'use this instead of daily_checkin', but the context is strong enough for an agent to infer the appropriate use case.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
caregiver_summaryCaregiver summary and dashboardARead-onlyIdempotent
Caregiver-facing summary of the elder's week: medication adherence (7 or 30 days), today's doses, open alerts, the check-in trend and upcoming appointments. Hosts that support MCP Apps also render the live family dashboard.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | Adherence window. Default 7. | |
| elderId | No | Elder id. Omit for the household elder. |
Output Schema
| Name | Required | Description |
|---|---|---|
| today | Yes | |
| openAlerts | Yes | |
| generatedAt | Yes | |
| checkedInToday | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and idempotentHint=true, so the safety profile is established. The description adds value by listing the summary's contents and disclosing that hosts supporting MCP Apps may render a live family dashboard. This conditional rendering behavior is useful context beyond the structured annotations, though error or availability behavior is not discussed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded: the first sentence states the tool's purpose and content in a dense list, and the second adds a meaningful conditional about dashboard rendering. It is not padded, though the 'MCP Apps' terminology could be slightly unclear without additional context.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only, idempotent tool with only two well-documented parameters and an output schema, the description covers the essential behavior and content. The main gap is the absence of explicit guidance on when to choose this tool over get_todays_plan, but the audience and weekly scope largely convey that. Overall it is sufficient for an agent to invoke correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both parameters are already documented in the schema. The description echoes the 7/30-day adherence window but adds no new semantic meaning beyond the schema. With full schema coverage, the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies a caregiver-facing summary of the elder's week and enumerates the exact data areas: medication adherence, today's doses, open alerts, check-in trend, and appointments. This specificity distinguishes it from siblings like get_todays_plan, which is more narrowly about today's plan. The tool's role as a read-only dashboard is unmistakable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The caregiver-facing and weekly-summary framing implies when this tool is appropriate, but it never explicitly states when to use it versus get_todays_plan or the alert/dose tools. No exclusions or alternative routing are provided. The dashboard rendering note adds some context but does not give clear selection criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
daily_checkinDaily check-inA
Record how the elder feels today: their mood plus any symptoms in their own words. Runs symptom escalation and alerts caregivers automatically for urgent or emergency symptoms. If the result contains emergencyGuidance, say it to the elder FIRST and verbatim.
| Name | Required | Description | Default |
|---|---|---|---|
| mood | Yes | How the elder says they feel: "good", "okay", "not great", "awful" | |
| notes | No | ||
| elderId | No | Elder id. Omit for the household elder. | |
| symptoms | No | Anything they mention, verbatim: ["a bit dizzy", "slept badly"] |
Output Schema
| Name | Required | Description |
|---|---|---|
| flagged | Yes | |
| alertIds | Yes | |
| notified | Yes | Caregiver names notified (simulated). |
| severity | Yes | |
| checkInId | Yes | |
| emergencyGuidance | No | When present, say this to the elder FIRST and verbatim before anything else. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With annotations all false (no readOnly, idempotent, or destructive hints), the description carries the behavioral burden. It discloses that the tool runs symptom escalation and alerts caregivers automatically, and it provides a critical instruction to relay emergencyGuidance verbatim. This is valuable context, though it doesn't cover every side effect like record creation or permissions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences, each earning its place: the first defines the core action, the second notes the automatic alerting behavior, and the third gives the emergencyGuidance instruction. There is no filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, return values need no explanation. However, the description misses guidance on the `notes` parameter and provides no usage boundaries against siblings like call_for_help. It is adequate for basic invocation but has clear gaps for full autonomous decision-making.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 75%, with the `notes` parameter undocumented. The description only reiterates 'in their own words' for symptoms, which the schema already states as 'verbatim.' It adds no new meaning for mood, elderId, or notes, so it minimally compensates for the schema gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific verb and resource: it 'records how the elder feels today' including mood and symptoms. This distinguishes it from siblings like log_dose or call_for_help by focusing on daily well-being, even without naming them explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use the tool (for a daily check-in) and mentions automatic escalation, but it does not explicitly state when to prefer this over alternatives like call_for_help, nor does it provide exclusions or alternative routing. Usage context is implied rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_todays_planToday's planARead-onlyIdempotent
The elder's medication schedule for today — what's taken, what's next, any missed dose, upcoming appointments, and whether they've checked in. Call this first for any "what's my day" or "what do I take" question.
| Name | Required | Description | Default |
|---|---|---|---|
| elderId | No | Elder id. Omit for the household elder. |
Output Schema
| Name | Required | Description |
|---|---|---|
| doses | Yes | |
| today | Yes | |
| nextUp | Yes | |
| elderName | Yes | |
| localTime | Yes | |
| appointments | Yes | |
| checkedInToday | Yes | |
| openAlertsCount | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish readOnlyHint=true, idempotentHint=true, and openWorldHint=false, so the description does not need to restate those. It adds useful context about the 'for today' scope and the statuses returned, but it does not disclose additional behaviors such as data freshness, fallback when no plan exists, or how the optional elderId affects the response.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two compact sentences that front-load the resource and its contents, then give an explicit invocation cue. There is no filler, no repetition of annotations, and no unnecessary detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a low-complexity, read-only tool with a single fully documented optional parameter, a rich output schema, and strong annotations, the description is complete enough. It tells the agent what the tool provides and when to call it first, leaving no critical gap for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema covers 100% of parameters, and the elderId description ('Elder id. Omit for the household elder.') already provides the needed semantics. The tool description adds no parameter-specific meaning, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the resource as 'the elder's medication schedule for today' and enumerates the included content: taken doses, next dose, missed dose, appointments, and check-in status. This is specific and actionable, though it does not explicitly differentiate from siblings like caregiver_summary or daily_checkin by name.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives a direct usage directive: 'Call this first for any "what's my day" or "what do I take" question.' This clearly states when to use the tool, but it does not provide when-not-to-use guidance or name alternatives, so it falls short of a full 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
log_doseLog a doseA
Record that the elder took a medication (name as spoken — brand names and "my blood pressure pill" work). A safety guard may REFUSE a duplicate or too-soon dose: when requiresConfirmation is true, do NOT retry silently — tell the elder what the guard said, ask them to confirm and say why, and only then call again with confirmOverride=true and overrideReason. If the name is ambiguous the result lists candidates; ask which one.
| Name | Required | Description | Default |
|---|---|---|---|
| elderId | No | Elder id. Omit for the household elder. | |
| takenAt | No | When it was taken (ISO 8601). Defaults to now. | |
| medication | Yes | The medication as the elder said it: "lisinopril", "my blood pressure pill", "Coumadin" | |
| overrideReason | No | The elder's own words for why the extra dose is needed. Required together with confirmOverride. | |
| confirmOverride | No | Set true ONLY after the elder explicitly confirmed recording a dose the guard refused. |
Output Schema
| Name | Required | Description |
|---|---|---|
| reason | Yes | |
| status | Yes | |
| alertId | Yes | |
| verdict | Yes | |
| recorded | Yes | |
| candidates | No | Present when the medication name was ambiguous. |
| medication | Yes | |
| lastTakenAt | Yes | |
| nextAllowedAt | Yes | |
| requiresConfirmation | Yes | true = do NOT retry silently; ask the elder to confirm and give a reason, then call again with confirmOverride. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations are minimal (no read-only, no idempotency, no destruction hints), so the description carries the full burden of disclosing behavior. It transparently warns that a safety guard may refuse duplicate or too-soon doses, prohibits silent retries, requires explicit confirmation before using override flags, and describes ambiguity resolution via candidates. This is strong behavioral context beyond what any annotation or schema field provides.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact, front-loaded with the core action, and uses a clear, readable structure for the refusal and ambiguity scenarios. Every sentence earns its place: no filler, no restating of obvious schema fields, and no ambiguous pronouns. The contrast between 'do NOT retry silently' and 'then call again' makes the workflow easy to follow.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity of the tool (5 parameters, mutable state, safety guard, output schema), the description covers all the non-obvious context an agent needs: how to phrase medication input, how to handle guard refusals, when to use override fields, and what to do with ambiguous candidates. Return-value details for normal success are reasonably delegated to the output schema, and the safety-critical behaviors are fully disclosed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds practical meaning beyond the schema: medication should be recorded exactly as the elder spoke it ('my blood pressure pill' works), and the overrideReason should contain the elder's own words for why the extra dose is needed. It also ties confirmOverride/overrideReason to the refusal flow, which enriches the parameter semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Record that the elder took a medication' and immediately clarifies the input style as 'name as spoken', including brands and colloquial phrases. This clearly distinguishes it from siblings like skip_dose (which records omission) and add_medication (which adds a medication definition).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit procedural guidance for the two main edge cases: safety-guard refusal and ambiguous medication names. It states when to retry (only after elder confirmation with overrideReason), when to ask the elder, and how to handle candidates. It does not explicitly contrast with alternatives such as skip_dose, but the 'took a medication' framing makes the primary use case unmistakable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
resolve_alertAcknowledge or resolve an alertAIdempotent
Caregiver acknowledges (seen, working on it) or resolves (done) an alert, with an optional resolution note for the audit trail. Safe to repeat.
| Name | Required | Description | Default |
|---|---|---|---|
| action | Yes | ||
| alertId | Yes | ||
| resolution | No | What was done, for the audit trail. | |
| caregiverId | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| alert | Yes | |
| changed | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds value beyond the annotations by clarifying that acknowledge means 'seen/working' and resolve means 'done', and by noting the optional resolution note is written to the audit trail. This is behavioral context not present in the annotations. The 'Safe to repeat' statement aligns with idempotentHint=true, so there is no contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, tightly worded sentence. It front-loads the core purpose, then adds the optional note and the idempotency safety in a natural order. There is no redundancy or filler, and it is appropriately concise for the tool's complexity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has an output schema, which covers return values. The description explains the two actions, the audit trail note, and idempotency. It does not mention error conditions or prerequisites, but for a straightforward action tool with annotations and an output schema, it is reasonably complete. Minor gaps remain, such as what happens if the alert is already resolved.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With only 25% schema description coverage, the description compensates by explaining the meaning of the action parameter (acknowledge vs resolve) and the purpose of the resolution note. It does not explicitly define alertId or caregiverId, but those are self-explanatory identifiers. Overall it adds meaning to the most ambiguous parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear verb-resource pair: acknowledge or resolve an alert. It also explains the two action meanings (seen/working vs done) and the optional resolution note, which distinguishes it from sibling tools that handle medication, check-ins, or planning. Though it does not explicitly name an alternative, the purpose is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives like call_for_help or daily_checkin. The description only explains what it does, not the conditions that select it. No exclusions, no context about appropriate scenarios, and no reference to other tools. This leaves an agent without routing information.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
skip_doseSkip a doseA
Record that the elder is deliberately skipping the next due dose of a medication, with an optional reason. Skipping a critical medication alerts the caregiver.
| Name | Required | Description | Default |
|---|---|---|---|
| reason | No | ||
| elderId | No | Elder id. Omit for the household elder. | |
| medication | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| alertId | Yes | |
| verdict | Yes | |
| recorded | Yes | |
| candidates | No | |
| medication | Yes | |
| scheduledTime | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Given readOnlyHint=false already signals a write, the description adds meaningful side-effect context: skipping a critical medication alerts the caregiver. It also scopes the action to a deliberate, next-dose skip, which helps avoid accidental or retroactive misuse. No contradiction with the annotations exists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences deliver the core action, the optional reason, and a relevant side effect with no filler. The most decision-critical information is front-loaded, and every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The output schema exists and the parameters are simple, so return values do not need description-level detail. However, the lack of explicit routing against log_dose and the vagueness around medication identification make the definition slightly incomplete for an agent choosing among these sibling tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With schema description coverage at only 33%, the description partially compensates by marking 'reason' as optional and grounding 'medication' as the next due dose. It does not specify how medication should be identified or address elderId beyond what the schema already says, leaving the compensation incomplete.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Record') and a clear resource ('skipping the next due dose of a medication'), while also noting the optional reason and caregiver alert. It distinguishes itself semantically from log_dose by emphasizing a deliberate skip, though it does not explicitly name or contrast the sibling.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the use case—an intentional skip of the next due dose—but does not explicitly state when to prefer this over log_dose or when not to use it. There is no when-not-to-use guidance or alternative routing, so an agent must infer the boundary from context.
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.
8 tool updates
v0.1.0- First observed
add_medication - First observed
call_for_help - First observed
caregiver_summary - First observed
daily_checkin - First observed
get_todays_plan - First observed
log_dose - First observed
resolve_alert - First observed
skip_dose
TDQS
Scored across 8 tools
Each tool maps to a distinct action (view plan, log/skip dose, check-in, call help, add med, resolve alert, summary), but get_todays_plan and caregiver_summary both surface daily doses and schedule, requiring the elder/caregiver framing to disambiguate.
Mostly imperative snake_case verbs (log_dose, skip_dose, add_medication, resolve_alert), but get_todays_plan, daily_checkin, and caregiver_summary break the verb_noun pattern slightly.
Eight tools cover the core elder-care workflows without bloat; each tool addresses a distinct need and no tool feels redundant.
Medication lifecycle is covered for daily use (plan, log, skip, add) and alert/check-in flows are complete, but there is no update/remove medication or appointment management, so minor gaps exist.
Maintenance
Related MCP Connectors
AI life manager: tasks, home, health, wealth, childcare, pets & more — on your own data.
An AI-first personal CRM you run in natural language: contacts, reminders, notes, and more.
Consent-gated tools that turn user health notes into non-diagnostic appointment-prep materials.
Licensed US telehealth — GLP-1 medications, intake, consents, Stripe ACP. HIPAA-compliant, 30 tools.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceAn AI-powered eldercare platform that enables AI agents to monitor passive sensors, generate personalized care plans, and access specialized healthcare knowledge bases. It provides tools for passive monitoring of senior activities, medical document OCR, and real-time alert management for caregivers.MIT
- FlicenseNot gradedqualityCmaintenanceEnables caregivers to log daily care activities and generate draft notification reports for the elderly, with automatic safety constraints to prevent AI-generated inaccuracies.-
- FlicenseNot gradedqualityCmaintenanceEnables AI-driven post-discharge patient monitoring and care coordination through tools for symptom triage, recovery tracking, exercise recommendation, and clinical reporting.-
- FlicenseNot gradedqualityDmaintenanceThis MCP server enables medicine management, stock/refill estimation, doctor search and availability checks, and appointment management for senior care scenarios.-