MCP Medical Appointments Demo
Provides medical appointment scheduling capabilities within VS Code's Copilot Chat, enabling AI agents to search doctors, check availability, book/cancel appointments, list appointments, recommend specialists, and access patient history through MCP tools and prompts.
Integrates with a Hono REST API backend that provides the underlying data store and business logic for medical appointment operations, with the MCP server acting as a protocol layer that exposes the API's functionality through MCP primitives.
Runs on Node.js as the JavaScript runtime environment for both the MCP server process and the Hono REST API service that powers the medical appointment scheduling backend.
Uses npm as the package manager for dependencies and scripts to build, run, and develop the MCP server and its associated REST API service for medical appointment management.
Built with TypeScript as the primary implementation language for both the MCP server and the underlying REST API service, providing type safety and developer tooling for the medical appointment scheduling system.
Uses Zod for runtime type validation and schema definition throughout the MCP server and REST API, ensuring data integrity and proper validation of medical appointment data structures.
Click on "Install 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., "@MCP Medical Appointments DemoFind a cardiologist and check their available slots for next Monday."
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.
MCP Medical Appointments Demo
A working reference for the Model Context Protocol — tools, resources, prompts, elicitation, sampling, and completion — built around a medical appointment scheduling domain.
Built with TypeScript, Hono, MCP SDK, and Zod.
Table of Contents
Features
MCP Server Primitives
Primitive | Name | Description |
Tool |
| Search doctors by name or specialty |
Tool |
| Get available time slots for a doctor on a date |
Tool |
| Book an appointment (uses elicitation for confirmation) |
Tool |
| Cancel an appointment (uses elicitation for confirmation) |
Tool |
| List appointments with filters |
Tool |
| Symptom-based specialist recommendation (uses sampling) |
Resource |
| Static list of all medical specialties |
Resource |
| Dynamic doctor profile with template |
Resource |
| Patient info + appointment history |
Resource |
| Full appointment details |
Prompt |
| Guided appointment scheduling workflow (with completion) |
Prompt |
| Patient history review (with completion) |
Prompt |
| Symptom triage and specialist recommendation |
MCP Client Features
Feature | How It's Used |
Elicitation |
|
Sampling |
|
Roots | Server registers a root for the medical appointments workspace |
Completion | Prompts use |
Agent Skill
A SKILL.md for this domain is provided at .github/skills/medical-appointments/SKILL.md. It mirrors the capabilities of the MCP server without requiring the MCP protocol — any compatible agent (GitHub Copilot, Claude Code, etc.) can load it on demand.
What the Skill Covers
Skill Workflow | Equivalent MCP Primitive |
Find Doctors |
|
Check Available Slots |
|
Book Appointment |
|
Cancel Appointment |
|
List Appointments |
|
Recommend Specialist |
|
Schedule Appointment |
|
Patient History |
|
Triage Symptoms |
|
The skill interacts with the REST service directly over HTTP using the agent's native tool access.
Skill Limitations
The following MCP server features have no equivalent in the agentskills.io specification and are therefore not replicated:
MCP Feature | Limitation |
Elicitation |
|
Sampling |
|
Argument completion | MCP prompts use |
Roots | The MCP server registers a workspace root ( |
VS Code-specific skill fields | Fields such as |
Quick Start
Prerequisites
Node.js >= 22.0.0
VS Code with GitHub Copilot (for MCP integration)
1. Install and start the REST API
npm install
npm run dev:serviceYou should see:
Bootstrapped: 8 specialties, 12 doctors, 5 patients
Medical Appointment Service running on http://localhost:30002. Connect the MCP Server in VS Code
The .vscode/mcp.json file is already configured. VS Code will automatically detect and offer to start the MCP server. Alternatively, run it manually:
npm run dev:mcp3. Try it out
In VS Code's Copilot Chat (Agent mode), try:
"Search for cardiologists"
"What slots does Dr. Sarah Chen have available next Monday?"
"Book an appointment with doc-3 for patient pat-1"
"Show me Alice Johnson's appointment history"
"I've been having severe headaches and dizziness — what specialist should I see?"
Or use the prompts from the prompt picker:
Schedule Appointment — guided scheduling workflow
Patient History — review a patient's visits
Triage Symptoms — symptom-based specialist matching
Architecture
┌─────────────────┐ stdio ┌───────────────────┐ HTTP ┌──────────────────┐
│ VS Code / │◄──────────────►│ MCP Server │─────────────►│ Hono REST API │
│ MCP Client │ │ (TypeScript) │ localhost │ (localhost:3000)│
└─────────────────┘ └───────────────────┘ └──────────────────┘
Tools, Resources, In-memory store
Prompts + JSON bootstrapThe project uses a two-process design:
Hono REST API — HTTP service with an in-memory data store, bootstrapped from JSON seed files in
data/.MCP Server — Connects via stdio and exposes the REST API through MCP primitives (tools, resources, prompts).
The MCP server never touches the data store directly — it calls the REST API through an HTTP client, keeping the two layers cleanly separated.
REST API Endpoints
Method | Endpoint | Description |
|
| List all specialties |
|
| Get specialty by ID |
|
| List doctors (filters: |
|
| Get doctor by ID |
|
| Get available slots |
|
| List all patients |
|
| Get patient by ID |
|
| Create a patient |
|
| List appointments (filters: |
|
| Get appointment by ID |
|
| Book an appointment |
|
| Cancel an appointment |
|
| Complete an appointment |
Project Structure
mcp-demo/
├── data/
│ ├── specialties.json # 8 medical specialties
│ ├── doctors.json # 12 doctors across specialties
│ └── patients.json # 5 sample patients
├── src/
│ ├── types.ts # Shared domain types
│ ├── service/
│ │ ├── store.ts # In-memory data store
│ │ ├── app.ts # Hono app composition
│ │ ├── main.ts # Service entry point
│ │ └── routes/ # REST route handlers
│ └── mcp/
│ ├── api-client.ts # HTTP client for the REST API
│ ├── tools.ts # MCP tool registrations
│ ├── resources.ts # MCP resource registrations
│ ├── prompts.ts # MCP prompt registrations
│ └── server.ts # MCP server entry point
├── .vscode/
│ └── mcp.json # VS Code MCP server config
├── package.json
└── tsconfig.jsonScripts
Command | Description |
| Start the Hono REST API with hot reload |
| Start MCP server in stdio mode |
| Compile TypeScript to |
| Type-check without emitting files |
Domain Model
Entity | Description |
Specialty | Medical specialty (Cardiology, Dermatology, etc.) |
Doctor | Has a specialty, available days, working hours, and slot duration |
Patient | Name, email, phone, date of birth |
Appointment | Links a patient to a doctor at a specific date/time with a reason and status |
TimeSlot | Available or booked time window for a doctor on a given day |
Configuration
The REST API listens on port 3000 by default. The MCP server communicates with the API over http://localhost:3000 and connects to VS Code via stdio.
Seed data (specialties, doctors, patients) is loaded from the data/ directory on startup. Edit those JSON files to customize the demo dataset.
Contributing
Contributions are welcome. Fork the repo, create a feature branch, and open a pull request.
License
MIT
This server cannot be installed
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Latest Blog Posts
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/bicatu/mcp-skills-demo'
If you have feedback or need assistance with the MCP directory API, please join our Discord server