mcp-ratchet-clinical-charting
# mcp-ratchet-clinical-charting
**MCP server for clinical charting with Claude (codename: Ratchet)** - Enables Claude to document patient visits directly into Electronic Medical Records, reducing administrative burden for home health nurses.
> **Note:** Currently runs in Mock Mode for development/testing. Production EMR integration coming soon.
## Status
| Component | Status |
|-----------|--------|
| MCP Server | ✅ Working (Mock Mode) |
| Unit Tests | ✅ 20/20 Passing |
| Claude Desktop | ✅ Ready for Testing |
| PointCare API | ⏳ Pending API Documentation |
**Current Mode:** Mock Mode - Uses realistic test data for development and testing.
## Quick Start
### From npm (Recommended)
```bash
npx mcp-ratchet-clinical-charting
```
### From Source
```bash
git clone https://github.com/m2ai-mcp-servers/mcp-ratchet-clinical-charting.git
cd mcp-ratchet-clinical-charting
npm install
npm run build
npm run dev # Development mode
npm test # Run tests
```
## Mock Mode
Ratchet runs in **mock mode** by default when `POINTCARE_API_URL` is not configured. Mock mode:
- Uses 5 fictional test patients
- Stores visit notes in memory
- Returns realistic responses
- Perfect for development and Claude Desktop testing
## Available Tools
| Tool | Description | Mock Mode |
|------|-------------|-----------|
| `search_patient` | Find patient by name, ID, or phone | ✅ Working |
| `create_visit_note` | Document a patient visit with vitals | ✅ Working |
| `get_patient_history` | Retrieve patient visit history | ✅ Working |
### Example Usage (in Claude)
```
"Search for patient Eleanor Thompson"
→ Returns patient PT-10001 with demographics and status
"Create a visit note for PT-10001 with blood pressure 120/80"
→ Creates and stores visit note with vitals
"Get visit history for PT-10001"
→ Returns list of previous visits
```
## Claude Desktop Integration
### Configure Claude Desktop
Add to your Claude Desktop config file:
**macOS:** `~/Library/Application Support/Claude/claude_desktop_config.json`
**Windows:** `%APPDATA%\Claude\claude_desktop_config.json`
```json
{
"mcpServers": {
"ratchet": {
"command": "npx",
"args": ["-y", "mcp-ratchet-clinical-charting"]
}
}
}
```
For production mode with EMR integration:
```json
{
"mcpServers": {
"ratchet": {
"command": "npx",
"args": ["-y", "mcp-ratchet-clinical-charting"],
"env": {
"POINTCARE_API_URL": "https://api.pointcare.com",
"POINTCARE_API_KEY": "your-api-key"
}
}
}
}
```
### Step 3: Restart Claude Desktop
Restart Claude Desktop to load the new MCP server.
### Step 4: Verify
In Claude Desktop, you should see:
- `search_patient` tool available
- `create_visit_note` tool available
- `get_patient_history` tool available
Try: "Search for patient Eleanor"
## Test Patients (Mock Mode)
| ID | Name | Status | Primary Diagnosis |
|----|------|--------|-------------------|
| PT-10001 | Eleanor Thompson | Active | Type 2 Diabetes, CHF |
| PT-10002 | Robert Martinez | Active | COPD, Post-surgical |
| PT-10003 | Margaret Wilson | Active | Parkinson's Disease |
| PT-10004 | James Thompson | Active | Post-stroke rehab |
| PT-10005 | Dorothy Anderson | Discharged | Hip replacement |
## Origin Story
Ratchet evolved from the **M2AI NurseCall** n8n workflow, built to help home health nurses with visit documentation:
```
Current Flow (M2AI NurseCall):
┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐
│ Twilio │───>│ n8n │───>│ VAPI │───>│ Email │
│ SMS │ │ Workflow│ │ Call │ │ Summary │
└─────────┘ └─────────┘ └─────────┘ └─────────┘
```
**The Problem:** Visit notes go to email but still need manual entry into PointCare EMR.
**Ratchet's Solution:**
```
Future Flow (with Ratchet):
┌─────────┐ ┌─────────┐ ┌──────────┐ ┌───────────┐
│ Twilio │───>│ n8n │───>│ Ratchet │───>│ PointCare │
│ SMS │ │ Workflow│ │ MCP │ │ EMR │
└─────────┘ └─────────┘ └──────────┘ └───────────┘
```
## Configuration
| Variable | Required | Description |
|----------|----------|-------------|
| `POINTCARE_API_URL` | No* | PointCare API base URL |
| `POINTCARE_API_KEY` | No* | API key or token |
| `RATCHET_MOCK_MODE` | No | Force mock mode (`true`/`false`) |
| `LOG_LEVEL` | No | Logging level (`debug`/`info`/`warn`/`error`) |
*Required for production use. Mock mode activates when not set.
## Project Structure
```
ratchet/
├── src/
│ ├── index.ts # MCP server entry point
│ ├── config.ts # Configuration management
│ ├── tools/ # Tool implementations
│ │ ├── search-patient.ts
│ │ ├── create-visit-note.ts
│ │ └── get-patient-history.ts
│ ├── services/ # Business logic
│ │ ├── patient-service.ts
│ │ └── mock-data.ts
│ ├── types/ # TypeScript types
│ └── utils/ # Logger, errors
├── tests/
│ └── patient-service.test.ts
├── dist/ # Compiled output
├── prds/
│ └── RATCHET-PRD.yaml
├── docs/
│ └── API_REQUIREMENTS.md
├── package.json
├── tsconfig.json
└── jest.config.js
```
## Development
```bash
# Run in watch mode
npm run dev
# Run tests
npm test
# Run tests with coverage
npm test -- --coverage
# Lint
npm run lint
```
## Next Steps
1. **Acquire PointCare API documentation** - See `docs/API_REQUIREMENTS.md`
2. **Complete PRD** - Fill in tool specifications with real API details
3. **Implement real API calls** - Replace mock responses
4. **Integration testing** - Test with PointCare sandbox
## Related Projects
- **[GRIMLOCK](https://github.com/m2ai-portfolio/grimlock)** - Autonomous MCP Server Factory
- **[ratchet-demo-emr](https://github.com/m2ai-mcp-servers/ratchet-demo-emr)** - Demo EMR React app for testing
## License
MIT
---
*Built with [GRIMLOCK](https://github.com/m2ai-portfolio/grimlock) - Autonomous MCP Server Factory*
TDQS
Scored across 3 tools
Each tool has a distinct, non-overlapping purpose: searching for patients, retrieving visit history, and creating new visit notes. No ambiguity exists between them.
All tools follow a consistent verb_noun pattern (search_patient, get_patient_history, create_visit_note) using snake_case, making it predictable and easy to understand.
With only 3 tools, it is on the lower end but still appropriate for a focused clinical charting server. They cover the core workflow of searching, reviewing history, and creating notes without unnecessary bloat.
The tool set covers essential operations (search, history, create) but lacks update and delete functionalities for visit notes, which are notable gaps for a complete CRUD lifecycle in clinical charting.