Skip to main content
Glama
AffirmerAu

CPR Training MCP Server

by AffirmerAu
README.md
# CPR MCP Server

This project provides a beginner-friendly Model Context Protocol (MCP) server implemented in TypeScript. The server exposes CPR (Cardiopulmonary Resuscitation) training resources — a structured lesson, a demonstration video link, and a reflective question — so that AI assistants and applications can pull trusted content on demand.

The server is transport-agnostic JSON-RPC over HTTP, making it easy to run locally or deploy to [Render](https://render.com/) for wider access.

## Features

- ✅ **Structured CPR lesson** covering danger checks, response, airway, breathing, compressions, and AED usage.
- 🎬 **Demonstration video reference** with guidance on what to watch for.
- ❓ **Reflective check question** so each interaction ends by confirming understanding.
- 📦 **MCP-style JSON-RPC interface** with `initialize`, `resources/*`, and `prompts/*` methods.
- 🌐 **Built-in REST helpers** (`/resources`, `/prompts`) for quick manual testing.
- ☁️ **Render-ready** with zero external dependencies.

## Prerequisites

- [Node.js](https://nodejs.org/) 18 or newer (comes with `npm`).
- Git (for cloning the repository).

## 1. Clone the project

```bash
git clone <your-fork-or-repo-url>
cd MCP_Server
```

If you are starting from this template on a fresh machine, replace `<your-fork-or-repo-url>` with the repository address where you store your copy.

## 2. Install dependencies

The project only relies on TypeScript tooling, so installation is quick:

```bash
npm install
```

> **Tip:** If you are working behind a proxy, configure `npm config set proxy http://...` before running the command.

## 3. Run the MCP server locally

### Development mode (TypeScript directly)

```bash
npm run dev
```

This command uses `ts-node-dev` so the server restarts automatically when you edit files. You will see a console message similar to:

```
CPR MCP server listening on port 3000
```

### Production build

```bash
npm run build
npm start
```

`npm run build` emits compiled JavaScript into `dist/`, and `npm start` runs the compiled code with Node.js.

By default the server listens on port `3000`. Override this by exporting `PORT` before running the server:

```bash
PORT=8080 npm start
```

## 4. Explore the API

The server speaks JSON-RPC 2.0 at `/mcp` and also exposes helper endpoints for humans.

### 4.1 Quick health check

```bash
curl http://localhost:3000/
```

Response:

```json
{
  "message": "CPR MCP Server is running.",
  "endpoints": {
    "rpc": "/mcp",
    "resources": "/resources",
    "prompts": "/prompts"
  }
}
```

### 4.2 List MCP resources

```bash
curl http://localhost:3000/resources
```

### 4.3 Fetch the lesson via JSON-RPC

```bash
curl -X POST http://localhost:3000/mcp \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "resources/read",
    "params": {
      "uri": "cpr://lesson"
    }
  }'
```

### 4.4 Get the question prompt

```bash
curl -X POST http://localhost:3000/mcp \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 2,
    "method": "prompts/get",
    "params": {
      "name": "cpr-quick-start"
    }
  }'
```

## 5. Deploy to Render

Render can host this server as a free web service.

1. Commit your changes and push them to a GitHub/GitLab repository.
2. Create a new **Web Service** on Render and connect your repository.
3. Choose the **Node** environment.
4. Set the **Build Command** to:
   ```bash
   npm install && npm run build
   ```
5. Set the **Start Command** to:
   ```bash
   npm start
   ```
6. Keep the default `PORT` environment variable that Render injects.
7. (Optional) Add a [health check](https://render.com/docs/health-checks) hitting `/` to ensure the service is ready.

When Render finishes deployment you will receive a public URL like `https://cpr-mcp.onrender.com`. Test it with the same `curl` commands, swapping `localhost:3000` for your Render domain.

## 6. Customising the content

- Edit `src/content/cprLesson.ts` to update the lesson copy, link to a different video, or change the reflective question.
- Add more entries to `RESOURCES` in `src/resources.ts` to expose additional articles, downloads, or checklists.
- Create new entries in `PROMPTS` for other pre-composed tutor responses your MCP client can reuse.

After making changes, rebuild (`npm run build`) and redeploy.

## 7. Next steps

- Connect the MCP server to an MCP-compatible client (for example, a local AI assistant) by pointing it to the `/mcp` endpoint.
- Expand the protocol support with additional methods such as `tools/list` or `tools/call` if your client expects them.
- Add automated tests for JSON-RPC handlers to keep the CPR content verified.

---

Happy learning, and remember: ensure the area is safe **before** you begin CPR!