Skip to main content
Glama
nakulcopilot

Pilates With Neelam MCP Server

by nakulcopilot
README.md
# 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

A3.5/5.0

Scored across 8 tools

Disambiguation2/5

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.

Naming Consistency3/5

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.

Tool Count5/5

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.

Completeness3/5

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.

Maintenance

ActivityMaintained
ResponsivenessNo issues