Medical Appointments
Provides medical appointment scheduling capabilities by querying the REST service directly. Mirrors the functionality of the medical-appointments MCP server.
Service base URL: http://localhost:3000 — override with the SERVICE_URL environment variable.
See references/api.md for full endpoint details.
Capabilities
| Workflow |
Description |
| Find Doctors |
Search by specialty or name |
| Check Available Slots |
Get open time slots for a doctor on a specific date |
| Book Appointment |
Confirm details, then create an appointment |
| Cancel Appointment |
Confirm intent, then cancel an existing appointment |
| List Appointments |
Filter by patient, doctor, status, or date |
| Recommend Specialist |
Match patient symptoms to the right specialty |
| Schedule Appointment |
End-to-end guided booking workflow |
| Patient History |
Review a patient's full visit record with summary |
| Triage Symptoms |
Structured symptom analysis and specialist routing |
Workflows
Find Doctors
- If a specialty name is given,
GET /api/specialties to resolve the name to an ID (case-insensitive match).
- If no match exists, list available specialties and ask the user to choose one.
GET /api/doctors?specialtyId={id}&name={query} (both params optional).
- Display each doctor: name, specialty, available days, slot duration (minutes), bio.
Check Available Slots
GET /api/doctors/{doctorId}/slots?date={YYYY-MM-DD}.
- Filter to slots where
available: true.
- Display each as
HH:MM – HH:MM. State total available vs total slots.
- If zero available, note whether the doctor works on that day.
Book Appointment
Required inputs: patient ID, doctor ID, appointment date/time (ISO 8601), reason.
- Fetch confirmation details in parallel:
GET /api/patients/{patientId} — patient name
GET /api/doctors/{doctorId} — doctor name, specialty, slot duration
- Ask the user to confirm before proceeding. Present:
- Patient name, doctor name, specialty, date, time, duration, reason
- On confirmation:
POST /api/appointments with body {"patientId","doctorId","dateTime","reason"}.
- Return the created appointment ID and full details.
- On refusal: abort without making any API call.
Note: The MCP server uses native elicitation (a UI confirmation dialog). This skill asks for confirmation through conversation. See Limitations in the README.
Cancel Appointment
Required input: appointment ID.
GET /api/appointments/{appointmentId} — retrieve current details.
- Fetch patient and doctor names for a readable summary.
- Ask the user to confirm cancellation. Show: appointment ID, patient, doctor, scheduled date/time, reason.
- On confirmation:
PATCH /api/appointments/{appointmentId}/cancel.
- Return confirmation of cancellation with original scheduled details.
- On refusal: leave the appointment unchanged.
Note: Same elicitation limitation as Book Appointment. See Limitations in the README.
List Appointments
All filters are optional.
- Build query string from any provided filters:
patientId, doctorId, status (scheduled | cancelled | completed), date (YYYY-MM-DD).
GET /api/appointments?{filters}.
- Display each as:
{id} | {date} {time} | status: {status} | {reason}.
Recommend Specialist
GET /api/specialties — load all specialties with descriptions.
- Analyze the patient's symptoms against each specialty description using your own reasoning.
- Identify the single most appropriate specialty; explain the reasoning briefly.
GET /api/doctors?specialtyId={id} — list matching doctors.
- Present: recommended specialty, rationale, and the available doctors.
Note: The MCP server calls a sub-LLM (sampling) for this step. The skill uses the agent's own reasoning directly, producing an equivalent result. See Limitations in the README.
Schedule Appointment (Guided Workflow)
End-to-end booking for a requested specialty and preferred date.
GET /api/specialties — load all specialties.
- Match the requested specialty (case-insensitive). If no match, list available options and ask the user to choose.
GET /api/doctors?specialtyId={id} — list doctors in the specialty with bios and available days.
- For each doctor,
GET /api/doctors/{id}/slots?date={preferredDate} — check open slots on the preferred date.
- Present doctors that have availability, with their open time slots.
- Ask the user to select a doctor and time slot.
- Ask for the patient ID if not already known (available patient IDs:
pat-1 through pat-5; or GET /api/patients to list them).
- Ask for the reason for the visit.
- Run the Book Appointment workflow above.
Patient History
GET /api/patients/{patientId} — retrieve patient info.
GET /api/appointments?patientId={patientId} — get the full appointment list.
- Summarize:
- Counts: total, scheduled, completed, cancelled.
- Chronological list: date, doctor ID, status, reason.
- Highlight upcoming scheduled appointments.
- If last completed appointment was more than 6 months ago (or none exists), recommend scheduling a check-up.
Triage Symptoms
GET /api/specialties — load all specialties with descriptions.
- Analyze the reported symptoms against the specialty descriptions. Ask clarifying questions if the symptoms are ambiguous or could map to multiple specialties.
- Identify the most appropriate specialty with a brief rationale.
- Run Recommend Specialist to surface matching doctors.
- Offer to start the Schedule Appointment workflow if the patient wants to book.
1---2name: medical-appointments3description: Manage medical appointments: find doctors by specialty or name, check available time slots, book or cancel appointments (with explicit confirmation), list appointments with filters, review patient history, triage symptoms to recommend the right specialist, and run guided end-to-end scheduling workflows. Use when asked to find a doctor, book an appointment, cancel an appointment, check availability, review patient records, triage symptoms, or get a specialist recommendation.4---56# Medical Appointments78Provides medical appointment scheduling capabilities by querying the REST service directly. Mirrors the functionality of the `medical-appointments` MCP server.910> **Service base URL**: `http://localhost:3000` — override with the `SERVICE_URL` environment variable.1112See [references/api.md](references/api.md) for full endpoint details.1314## Capabilities1516| Workflow | Description |17|----------|-------------|18| Find Doctors | Search by specialty or name |19| Check Available Slots | Get open time slots for a doctor on a specific date |20| Book Appointment | Confirm details, then create an appointment |21| Cancel Appointment | Confirm intent, then cancel an existing appointment |22| List Appointments | Filter by patient, doctor, status, or date |23| Recommend Specialist | Match patient symptoms to the right specialty |24| Schedule Appointment | End-to-end guided booking workflow |25| Patient History | Review a patient's full visit record with summary |26| Triage Symptoms | Structured symptom analysis and specialist routing |2728---2930## Workflows3132### Find Doctors33341. If a specialty name is given, `GET /api/specialties` to resolve the name to an ID (case-insensitive match).35 - If no match exists, list available specialties and ask the user to choose one.362. `GET /api/doctors?specialtyId={id}&name={query}` (both params optional).373. Display each doctor: name, specialty, available days, slot duration (minutes), bio.3839### Check Available Slots40411. `GET /api/doctors/{doctorId}/slots?date={YYYY-MM-DD}`.422. Filter to slots where `available: true`.433. Display each as `HH:MM – HH:MM`. State total available vs total slots.444. If zero available, note whether the doctor works on that day.4546### Book Appointment4748**Required inputs**: patient ID, doctor ID, appointment date/time (ISO 8601), reason.49501. Fetch confirmation details in parallel:51 - `GET /api/patients/{patientId}` — patient name52 - `GET /api/doctors/{doctorId}` — doctor name, specialty, slot duration532. **Ask the user to confirm** before proceeding. Present:54 - Patient name, doctor name, specialty, date, time, duration, reason553. On confirmation: `POST /api/appointments` with body `{"patientId","doctorId","dateTime","reason"}`.564. Return the created appointment ID and full details.575. On refusal: abort without making any API call.5859> **Note**: The MCP server uses native elicitation (a UI confirmation dialog). This skill asks for confirmation through conversation. See [Limitations](#limitations) in the README.6061### Cancel Appointment6263**Required input**: appointment ID.64651. `GET /api/appointments/{appointmentId}` — retrieve current details.662. Fetch patient and doctor names for a readable summary.673. **Ask the user to confirm** cancellation. Show: appointment ID, patient, doctor, scheduled date/time, reason.684. On confirmation: `PATCH /api/appointments/{appointmentId}/cancel`.695. Return confirmation of cancellation with original scheduled details.706. On refusal: leave the appointment unchanged.7172> **Note**: Same elicitation limitation as Book Appointment. See [Limitations](#limitations) in the README.7374### List Appointments7576All filters are optional.77781. Build query string from any provided filters: `patientId`, `doctorId`, `status` (`scheduled` | `cancelled` | `completed`), `date` (`YYYY-MM-DD`).792. `GET /api/appointments?{filters}`.803. Display each as: `{id} | {date} {time} | status: {status} | {reason}`.8182### Recommend Specialist83841. `GET /api/specialties` — load all specialties with descriptions.852. Analyze the patient's symptoms against each specialty description using your own reasoning.863. Identify the single most appropriate specialty; explain the reasoning briefly.874. `GET /api/doctors?specialtyId={id}` — list matching doctors.885. Present: recommended specialty, rationale, and the available doctors.8990> **Note**: The MCP server calls a sub-LLM (sampling) for this step. The skill uses the agent's own reasoning directly, producing an equivalent result. See [Limitations](#limitations) in the README.9192### Schedule Appointment (Guided Workflow)9394End-to-end booking for a requested specialty and preferred date.95961. `GET /api/specialties` — load all specialties.972. Match the requested specialty (case-insensitive). If no match, list available options and ask the user to choose.983. `GET /api/doctors?specialtyId={id}` — list doctors in the specialty with bios and available days.994. For each doctor, `GET /api/doctors/{id}/slots?date={preferredDate}` — check open slots on the preferred date.1005. Present doctors that have availability, with their open time slots.1016. Ask the user to select a doctor and time slot.1027. Ask for the patient ID if not already known (available patient IDs: `pat-1` through `pat-5`; or `GET /api/patients` to list them).1038. Ask for the reason for the visit.1049. Run the **Book Appointment** workflow above.105106### Patient History1071081. `GET /api/patients/{patientId}` — retrieve patient info.1092. `GET /api/appointments?patientId={patientId}` — get the full appointment list.1103. Summarize:111 - Counts: total, scheduled, completed, cancelled.112 - Chronological list: date, doctor ID, status, reason.113 - Highlight upcoming scheduled appointments.114 - If last completed appointment was more than 6 months ago (or none exists), recommend scheduling a check-up.115116### Triage Symptoms1171181. `GET /api/specialties` — load all specialties with descriptions.1192. Analyze the reported symptoms against the specialty descriptions. Ask clarifying questions if the symptoms are ambiguous or could map to multiple specialties.1203. Identify the most appropriate specialty with a brief rationale.1214. Run **Recommend Specialist** to surface matching doctors.1225. Offer to start the **Schedule Appointment** workflow if the patient wants to book.