Pilates With Neelam MCP Server
# Pilates With Neelam MCP Server
An MCP (Model Context Protocol) server that connects AI agents (ChatGPT, Claude, Cursor, etc.) to the Pilates With Neelam studio management platform. Provides real-time access to classes, bookings, student profiles, assessments, and more.
## Quick Start
```bash
# Install dependencies
npm install
# Build
npm run build
# Run (stdio mode for MCP hosts)
npm start
```
## Studio Identity
This MCP server is configured exclusively for **Pilates With Neelam** (`studio_id: pilates_with_neelam`). All tools verify the studio identity and reject requests for any other studio.
## Tools
| Tool | Description |
|------|-------------|
| `get_studio_manifest` | Get studio identity and capabilities |
| `find_my_class` | Search classes using natural language |
| `get_pilates_with_neelam_classes` | Get all upcoming classes with filters |
| `get_pilates_with_neelam_schedule` | Get weekly schedule view |
| `get_pilates_with_neelam_availability` | Check real-time availability for a specific class |
| `book_pilates_with_neelam_class` | Book a student into a class (returns studio-identified confirmation) |
| `assess_pilates_level` | Run Pilates level assessment with personalized recommendations |
| `check_in_pilates_with_neelam_class` | Record post-class check-in with AI summary and exercise recommendations |
## Configuration for ChatGPT Desktop
1. Build the server: `npm run build`
2. Add to your ChatGPT MCP config (`~/Library/Application Support/ChatGPT/mcp_servers.json` on macOS, `%APPDATA%\ChatGPT\mcp_servers.json` on Windows):
```json
{
"mcpServers": {
"pilates-with-neelam": {
"command": "node",
"args": ["C:\\Users\\Welcome\\pilates-with-neelam-mcp\\dist\\index.js"],
"env": {
"SUPABASE_URL": "https://ywyagyftnwnybrxtyhjd.supabase.co",
"SUPABASE_ANON_KEY": "sb_publishable_...",
"SUPABASE_SERVICE_ROLE_KEY": "sb_secret_...",
"STUDIO_ID": "pilates_with_neelam",
"STUDIO_NAME": "Pilates With Neelam",
"STUDIO_DOMAIN": "pilateswithneelam.in"
}
}
}
}
```
## Configuration for Claude Desktop
Add to `~/Library/Application Support/Claude/claude_desktop_config.json` (macOS) or `%APPDATA%\Claude\claude_desktop_config.json` (Windows):
```json
{
"mcpServers": {
"pilates-with-neelam": {
"command": "node",
"args": ["C:\\Users\\Welcome\\pilates-with-neelam-mcp\\dist\\index.js"],
"env": {
"SUPABASE_URL": "https://ywyagyftnwnybrxtyhjd.supabase.co",
"SUPABASE_ANON_KEY": "sb_publishable_...",
"SUPABASE_SERVICE_ROLE_KEY": "sb_secret_...",
"STUDIO_ID": "pilates_with_neelam",
"STUDIO_NAME": "Pilates With Neelam",
"STUDIO_DOMAIN": "pilateswithneelam.in"
}
}
}
}
```
## Configuration for Cursor
Add to `.cursor/mcp.json` in your project:
```json
{
"mcpServers": {
"pilates-with-neelam": {
"command": "node",
"args": ["C:\\Users\\Welcome\\pilates-with-neelam-mcp\\dist\\index.js"],
"env": {
"SUPABASE_URL": "https://ywyagyftnwnybrxtyhjd.supabase.co",
"SUPABASE_ANON_KEY": "sb_publishable_...",
"SUPABASE_SERVICE_ROLE_KEY": "sb_secret_...",
"STUDIO_ID": "pilates_with_neelam",
"STUDIO_NAME": "Pilates With Neelam",
"STUDIO_DOMAIN": "pilateswithneelam.in"
}
}
}
}
```
## Complete Workflow Demo
An AI agent can perform this real workflow using live data:
1. **"What studio is this?"** → `get_studio_manifest` → Returns studio identity
2. **"Find me a reformer class"** → `find_my_class` → Returns matching classes with availability
3. **"What's the assessment for a beginner?"** → `assess_pilates_level` → Returns level + recommendations
4. **"Check availability for class c_m1abc"** → `get_pilates_with_neelam_availability` → Returns real-time spots
5. **"Book student s2 into that class"** → `book_pilates_with_neelam_class` → Returns booking confirmation with studio ID
6. **"Log check-in for s2: felt great, core strong"** → `check_in_pilates_with_neelam_class` → Returns AI summary + exercises
## Environment Variables
| Variable | Required | Description |
|----------|----------|-------------|
| `SUPABASE_URL` | Yes | Supabase project URL |
| `SUPABASE_ANON_KEY` | Yes | Supabase publishable key |
| `SUPABASE_SERVICE_ROLE_KEY` | No | Supabase secret key (enables full DB access) |
| `STUDIO_ID` | No | Studio identifier (default: `pilates_with_neelam`) |
| `STUDIO_NAME` | No | Studio display name |
| `STUDIO_DOMAIN` | No | Studio website domain |
## Testing
```bash
# Run end-to-end tests
npm run test:e2e
```
## Architecture
- **Transport**: stdio (MCP standard)
- **Database**: Supabase (Postgres + RLS)
- **Auth**: Service role key for server-to-server, optional auth token for user-scoped operations
- **Studio Isolation**: All tools verify `studio_id` before operations
- **Privacy**: No student PII (names, emails, phones) is exposed. Tools return only class and availability data.
## License
MIT
TDQS
Scored across 8 tools
Several tools have unclear boundaries: get_pilates_with_neelam_classes, get_pilates_with_neelam_schedule, and find_my_class all return class/schedule information with overlapping details. An agent could easily select the wrong one when trying to retrieve the weekly schedule or a list of upcoming classes.
The naming is mixed: most tools use a get/book/check_in_pilates_with_neelam_* pattern, but get_studio_manifest, find_my_class, and assess_pilates_level break the pattern. The convention is still readable and mostly verb-first, but it is not applied consistently across the set.
Eight tools is well-scoped for a Pilates studio booking and assessment server. Each tool addresses a distinct part of the workflow, and the count is neither bloated nor too sparse.
The set covers search, schedule viewing, availability, booking, assessment, and check-in, which covers the core user journey. However, there is no cancel or reschedule booking tool, which is a notable lifecycle gap for a booking-focused server.