clinic-frontdesk-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| CLINIC_NAME | No | Name used in confirmations and reminders. | Demo Family Clinic |
| CLINIC_SEED | No | Load demo data when the database is first created. | true |
| CLINIC_DB_PATH | No | SQLite file. Created and seeded on first run. | ./clinic.db |
| CLINIC_TIMEZONE | No | IANA zone. All tool input and output is in this zone. | Asia/Kolkata |
| CLINIC_LOG_LEVEL | No | Log verbosity (stderr). | INFO |
| TWILIO_AUTH_TOKEN | No | All three needed for SMS; otherwise reminders print to stderr. | |
| TWILIO_ACCOUNT_SID | No | All three needed for SMS; otherwise reminders print to stderr. | |
| TWILIO_FROM_NUMBER | No | All three needed for SMS; otherwise reminders print to stderr. |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| list_doctorsA | List the clinic's doctors with their specialty and usual weekly hours. Use this first when the caller does not name a doctor, or asks who they can see
for a particular problem. The returned The Example: list_doctors() |
| check_availabilityA | Find open appointment slots for a doctor, in clinic-local time. Always call this before book_appointment so you offer times that are genuinely free. Slots already in the past are excluded automatically. If the requested date has nothing open, Args:
doctor_id: From list_doctors.
date: Clinic-local 'YYYY-MM-DD'. Defaults to today.
days_ahead: How many days to scan, starting at Example: check_availability(doctor_id=1, date="2027-01-25", days_ahead=3) |
| find_patientA | Search patients by partial name or phone number. Use this before booking for someone who says they have been here before. When Example: find_patient(query="Shah") or find_patient(query="9876543210") |
| get_appointmentsA | List appointments, filtered by any combination of patient, doctor, date and status. Use this to answer "when is my appointment?", to find the appointment_id needed by reschedule_appointment or cancel_appointment, or to review a doctor's day. With no filters it returns everything, so pass at least one for a busy clinic. Args: patient_id: From find_patient. doctor_id: From list_doctors. date: Clinic-local 'YYYY-MM-DD'. status: One of booked, rescheduled, cancelled, completed, no_show. Example: get_appointments(patient_id=1, status="booked") |
| get_intakeA | Retrieve the intake form for an appointment, plus a ready-to-read doctor brief.
Returns Example: get_intake(appointment_id=12) |
| answer_faqA | Answer a question about the clinic: timings, fees, location, payment, insurance. Use this for anything informational rather than transactional. Read the result carefully before replying:
Medical questions return the clinic's standard redirect to the doctor. Read it as written and offer to book an appointment — never supplement it with clinical information of your own. Example: answer_faq(question="what are your timings on saturday?") |
| daily_summaryA | Give a doctor-by-doctor overview of one day: appointments, free time, and gaps. Use this for "what does today look like?" or when staff want to know where
attention is needed. Args: date: Clinic-local 'YYYY-MM-DD'. Defaults to today. Example: daily_summary(date="2027-01-25") |
| register_patientA | Register a new patient, or return the existing record for that phone number. Call find_patient first. If the phone number is already on file this returns
that patient with Confirm the spelling of the name and the phone number with the caller before calling this. Args: name: Full name as the patient gives it. phone: Any common format; '+91 98765-43210' and '+919876543210' are treated as the same number. dob: 'YYYY-MM-DD', optional but useful for distinguishing same-name patients. notes: Anything the front desk should remember. Not clinical notes. Example: register_patient(name="Rajesh Shah", phone="+919876543210", dob="1968-04-12") |
| book_appointmentA | Book an appointment and queue a reminder for 24 hours beforehand. Call check_availability first and offer the caller a real opening. Read the
returned The slot must be free, inside the doctor's working hours, and aligned to their appointment grid. If it is taken, the error names the nearest alternatives — offer those rather than repeating the request. Args: patient_id: From find_patient or register_patient. doctor_id: From list_doctors. starts_at: Clinic-local ISO 8601, e.g. '2027-01-25T18:00'. Not UTC. reason: Why they are coming, in the caller's own words. Example: book_appointment(patient_id=1, doctor_id=1, starts_at="2027-01-25T18:00", reason="diabetes follow-up") |
| reschedule_appointmentA | Move an existing appointment to a new time and update its reminder. Use check_availability first to confirm the new time is free. The old slot is released and the 24-hour reminder is re-queued for the new time. Cancelled appointments cannot be rescheduled — book a new one instead. Args: appointment_id: From get_appointments. new_starts_at: Clinic-local ISO 8601, e.g. '2027-01-27T09:30'. Example: reschedule_appointment(appointment_id=12, new_starts_at="2027-01-27T09:30") |
| cancel_appointmentA | Cancel an appointment. Requires explicit confirmation. Call it first WITHOUT This two-step gate exists because cancelling is not reversible from here — a mistakenly cancelled slot may be taken by someone else within minutes. Confirming releases the slot and cancels the pending reminder. Args: appointment_id: From get_appointments. confirm: Must be True to actually cancel. Example: cancel_appointment(appointment_id=12) # preview cancel_appointment(appointment_id=12, confirm=True) # actually cancel |
| submit_intakeA | Record pre-visit intake for an appointment and regenerate the doctor brief. Collect this after booking. Ask about medications and allergies explicitly — both change what the doctor can safely prescribe, and "no answer" is not the same as "none". Record what the patient says in their own words. Do not interpret symptoms, suggest what they might indicate, or add clinical terminology of your own. Re-submitting replaces the previous intake, so it is safe to call again if the caller corrects themselves. Args: appointment_id: From get_appointments or book_appointment. chief_complaint: The main reason for the visit, in one line. symptoms: What they are experiencing, as described. duration: How long it has been going on, e.g. "about 3 weeks". current_medications: What they take now, including dosage if offered. allergies: Known allergies, or "none reported" if they say none. notes: Anything else logistically relevant. Example: submit_intake(appointment_id=12, chief_complaint="blood sugar review", symptoms="tired in the afternoons", duration="2 months", current_medications="metformin 500mg twice daily", allergies="penicillin") |
| send_reminderA | Send this appointment's reminder now, ahead of its scheduled time. Use when a caller asks to be reminded again, or to confirm details in writing. Normal reminders go out on their own via process_due_reminders — you do not need this for routine bookings. Delivery goes through the configured channel: printed to the server log by default, or SMS when Twilio is configured. Example: send_reminder(appointment_id=12) |
| process_due_remindersA | Send every reminder that has come due. Run this periodically. Picks up all pending reminders whose send time has passed and whose appointment is still active. Reminders for cancelled appointments are dropped rather than sent. A failed delivery stays pending for the next run. Args: limit: Maximum to process in one pass. Example: process_due_reminders() |
| add_faqA | Add an entry to the clinic FAQ so future callers get a consistent answer. Use this when staff tell you something the FAQ does not cover yet, or after
answer_faq returns Only for clinic logistics — timings, fees, policies, facilities. Never add medical guidance; clinical questions must keep routing to the doctor. Args: question: The question as a caller would ask it. answer: The exact wording to read back. Write it as speech, not a document. keywords: Comma-separated search terms, including likely synonyms and misspellings, e.g. "parking,park,vehicle,two wheeler,car". Example: add_faq(question="Do you have parking?", answer="Yes, free two-wheeler parking is available at the rear.", keywords="parking,park,vehicle,two wheeler,bike,car") |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
| receptionist_system | System prompt that turns the client into a warm, careful clinic receptionist. |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/prashant-cr/Clinic-front-desk-MCP-server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server