Teachworks MCP by usefulapi

Read Teachworks students, families, tutors, lessons, invoices and payments; book lessons.

Should I use this

Quality & Safety

A
Description quality
97%
Schema completeness
85%
Naming quality
78%
Poisoning risk
100%
Permission match
100%
Protocol compliance
100%

Findings (3)

  • LOWTool 'teachworks_get_employee_earnings' name length outside 3-30 rangein teachworks_get_employee_earnings
  • LOWTool 'teachworks_create_child_student' name length outside 3-30 rangein teachworks_create_child_student
  • LOWTool 'teachworks_add_student_to_lesson' name length outside 3-30 rangein teachworks_add_student_to_lesson

Based on automated analysis of tool definitions and protocol compliance.

Context Cost

~6,621Tokens (tool definitions)
~2.4 KBTypical response size
Significant attention impact (5.17% of 128k context)

This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.

Install

One-Click Install

Add this to your `claude_desktop_config.json` file:

{
  "mcpServers": {
    "teachworks": {
      "url": "https://teachworks.usefulapi.io/mcp"
    }
  }
}

Remote endpoints

https://teachworks.usefulapi.io/mcpstreamable-http

What it can do

Tool inventory

Tools (24)

🟢 Read-only🟡 Write🔴 Delete⚪ Unknown
🟢teachworks_list_students(customer_id, first_name, last_name, email, phone_number, ...)

List or search students (child students of families and independent students) with their school, grade, subjects, status, billing method and default teachers. GET /students.

Input Schema

{
  "type": "object",
  "properties": {
    "customer_id": {
      "description": "Only students of this customer/family id.",
      "anyOf": [
        {
          "type": "integer",
          "exclusiveMinimum": 0,
          "maximum": 9007199254740991
        },
        {
          "type": "string",
          "pattern": "^\\d+$"
        }
      ]
    },
    "first_name": {
      "description": "Search by first name.",
      "type": "string"
    },
    "last_name": {
      "description": "Search by last name.",
      "type": "string"
    },
    "email": {
      "description": "Search by email.",
      "type": "string"
    },
    "phone_number": {
      "description": "Search by phone number.",
      "type": "string"
    },
    "school": {
      "description": "Search by school.",
      "type": "string"
    },
    "grade": {
      "description": "Search by grade.",
      "type": "string"
    },
    "subject": {
      "description": "Search by subject.",
      "type": "string"
    },
    "type": {
      "description": "family = child students, independent = independent students.",
      "type": "string",
      "enum": [
        "family",
        "independent"
      ]
    },
    "status": {
      "type": "string",
      "enum": [
        "Active",
        "Inactive",
        "Prospective"
      ]
    },
    "page": {
      "description": "Page number (1-based, default 1).",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991
    },
    "per_page": {
      "description": "Records per page (default 20, max 50).",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 50
    },
    "direction": {
      "description": "Sort by id ascending (default) or descending (newest first).",
      "type": "string",
      "enum": [
        "asc",
        "desc"
      ]
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢teachworks_get_student(student_id)

Retrieve one student profile: contact details, school/grade, billing, custom fields, default teachers/services. GET /students/{id}.

Input Schema

{
  "type": "object",
  "properties": {
    "student_id": {
      "anyOf": [
        {
          "type": "integer",
          "exclusiveMinimum": 0,
          "maximum": 9007199254740991
        },
        {
          "type": "string",
          "pattern": "^\\d+$"
        }
      ],
      "description": "Student id."
    }
  },
  "required": [
    "student_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢teachworks_list_customers(first_name, last_name, email, phone_number, city, ...)

List or search customers — the billed profiles: families (with child students) and independent students. Returns contact details, status and last invoice date. GET /customers.

Input Schema

{
  "type": "object",
  "properties": {
    "first_name": {
      "description": "Search by first name.",
      "type": "string"
    },
    "last_name": {
      "description": "Search by last name.",
      "type": "string"
    },
    "email": {
      "description": "Search by email.",
      "type": "string"
    },
    "phone_number": {
      "description": "Search by phone number.",
      "type": "string"
    },
    "city": {
      "type": "string"
    },
    "state": {
      "type": "string"
    },
    "zip": {
      "type": "string"
    },
    "country": {
      "type": "string"
    },
    "type": {
      "description": "family or independent.",
      "type": "string",
      "enum": [
        "family",
        "independent"
      ]
    },
    "status": {
      "type": "string",
      "enum": [
        "Active",
        "Inactive",
        "Prospective"
      ]
    },
    "page": {
      "description": "Page number (1-based, default 1).",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991
    },
    "per_page": {
      "description": "Records per page (default 20, max 50).",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 50
    },
    "direction": {
      "description": "Sort by id ascending (default) or descending (newest first).",
      "type": "string",
      "enum": [
        "asc",
        "desc"
      ]
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢teachworks_get_customer(customer_id)

Retrieve one customer (family or independent student) with contact details and custom fields. GET /customers/{id}.

Input Schema

{
  "type": "object",
  "properties": {
    "customer_id": {
      "anyOf": [
        {
          "type": "integer",
          "exclusiveMinimum": 0,
          "maximum": 9007199254740991
        },
        {
          "type": "string",
          "pattern": "^\\d+$"
        }
      ],
      "description": "Customer id."
    }
  },
  "required": [
    "customer_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢teachworks_list_employees(first_name, last_name, email, city, state, ...)

List or search employees — teachers/tutors and administrative staff — with subjects, status and wage settings. GET /employees.

Input Schema

{
  "type": "object",
  "properties": {
    "first_name": {
      "description": "Search by first name.",
      "type": "string"
    },
    "last_name": {
      "description": "Search by last name.",
      "type": "string"
    },
    "email": {
      "description": "Search by email.",
      "type": "string"
    },
    "city": {
      "type": "string"
    },
    "state": {
      "type": "string"
    },
    "zip": {
      "type": "string"
    },
    "status": {
      "type": "string",
      "enum": [
        "Active",
        "Inactive",
        "Prospective"
      ]
    },
    "subject": {
      "description": "Search by subject taught.",
      "type": "string"
    },
    "page": {
      "description": "Page number (1-based, default 1).",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991
    },
    "per_page": {
      "description": "Records per page (default 20, max 50).",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 50
    },
    "direction": {
      "description": "Sort by id ascending (default) or descending (newest first).",
      "type": "string",
      "enum": [
        "asc",
        "desc"
      ]
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢teachworks_get_employee(employee_id)

Retrieve one employee (teacher or staff): contact details, subjects, wage type, bio, permissions. GET /employees/{id}.

Input Schema

{
  "type": "object",
  "properties": {
    "employee_id": {
      "anyOf": [
        {
          "type": "integer",
          "exclusiveMinimum": 0,
          "maximum": 9007199254740991
        },
        {
          "type": "string",
          "pattern": "^\\d+$"
        }
      ],
      "description": "Employee id."
    }
  },
  "required": [
    "employee_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢teachworks_get_employee_earnings(employee_id, status, date_from, date_to)

Total earnings of one employee (lessons, other events, other compensation, total) for an optional lesson status and date range. GET /employees/{id}/earnings.

Input Schema

{
  "type": "object",
  "properties": {
    "employee_id": {
      "anyOf": [
        {
          "type": "integer",
          "exclusiveMinimum": 0,
          "maximum": 9007199254740991
        },
        {
          "type": "string",
          "pattern": "^\\d+$"
        }
      ],
      "description": "Employee id."
    },
    "status": {
      "description": "Only lessons with this status.",
      "type": "string",
      "enum": [
        "Scheduled",
        "Attended",
        "Cancelled",
        "Missed"
      ]
    },
    "date_from": {
      "description": "Lessons starting on or after this date.",
      "type": "string",
      "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
    },
    "date_to": {
      "description": "Lessons starting on or before this date.",
      "type": "string",
      "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
    }
  },
  "required": [
    "employee_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢teachworks_get_lesson_totals(kind, id, measure, status, date_from, ...)

Lesson totals for one student, customer or employee: count (default), duration in minutes, or (employees only) earnings, broken down by status, for an optional status and date range. GET /{students|customers|employees}/{id}/lesson_totals.

Input Schema

{
  "type": "object",
  "properties": {
    "kind": {
      "type": "string",
      "enum": [
        "student",
        "customer",
        "employee"
      ],
      "description": "Whose lessons to total."
    },
    "id": {
      "anyOf": [
        {
          "type": "integer",
          "exclusiveMinimum": 0,
          "maximum": 9007199254740991
        },
        {
          "type": "string",
          "pattern": "^\\d+$"
        }
      ],
      "description": "The student, customer or employee id."
    },
    "measure": {
      "description": "count (default), duration (minutes) or earnings (employees only).",
      "type": "string",
      "enum": [
        "count",
        "duration",
        "earnings"
      ]
    },
    "status": {
      "description": "Only lessons with this status.",
      "type": "string",
      "enum": [
        "Scheduled",
        "Attended",
        "Cancelled",
        "Missed"
      ]
    },
    "date_from": {
      "description": "Lessons starting on or after this date.",
      "type": "string",
      "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
    },
    "date_to": {
      "description": "Lessons starting on or before this date.",
      "type": "string",
      "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
    }
  },
  "required": [
    "kind",
    "id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢teachworks_list_lessons(employee_id, student_id, location_id, location_or_parent_location_id, service_id, ...)

List lessons (the calendar) with teacher, service, location, start/end, duration, status and participants. Filter by teacher, student, location, service, status and date range. GET /lessons.

Input Schema

{
  "type": "object",
  "properties": {
    "employee_id": {
      "description": "Only lessons taught by this teacher (employee id).",
      "anyOf": [
        {
          "type": "integer",
          "exclusiveMinimum": 0,
          "maximum": 9007199254740991
        },
        {
          "type": "string",
          "pattern": "^\\d+$"
        }
      ]
    },
    "student_id": {
      "description": "Only lessons with this student.",
      "anyOf": [
        {
          "type": "integer",
          "exclusiveMinimum": 0,
          "maximum": 9007199254740991
        },
        {
          "type": "string",
          "pattern": "^\\d+$"
        }
      ]
    },
    "location_id": {
      "description": "Only lessons at this location (exact).",
      "anyOf": [
        {
          "type": "integer",
          "exclusiveMinimum": 0,
          "maximum": 9007199254740991
        },
        {
          "type": "string",
          "pattern": "^\\d+$"
        }
      ]
    },
    "location_or_parent_location_id": {
      "description": "Lessons at this location or any of its sub-locations.",
      "anyOf": [
        {
          "type": "integer",
          "exclusiveMinimum": 0,
          "maximum": 9007199254740991
        },
        {
          "type": "string",
          "pattern": "^\\d+$"
        }
      ]
    },
    "service_id": {
      "description": "Only lessons of this service.",
      "anyOf": [
        {
          "type": "integer",
          "exclusiveMinimum": 0,
          "maximum": 9007199254740991
        },
        {
          "type": "string",
          "pattern": "^\\d+$"
        }
      ]
    },
    "series_id": {
      "description": "Only lessons of this repeating series.",
      "anyOf": [
        {
          "type": "integer",
          "exclusiveMinimum": 0,
          "maximum": 9007199254740991
        },
        {
          "type": "string",
          "pattern": "^\\d+$"
        }
      ]
    },
    "name": {
      "description": "Search by lesson name.",
      "type": "string"
    },
    "status": {
      "type": "string",
      "enum": [
        "Scheduled",
        "Attended",
        "Cancelled",
        "Missed"
      ]
    },
    "custom_status": {
      "description": "Search by custom status (Custom Statuses add-on).",
      "type": "string"
    },
    "from_date": {
      "description": "Lessons starting on exactly this date.",
      "type": "string",
      "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
    },
    "date_from": {
      "description": "Lessons starting on or after this date.",
      "type": "string",
      "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
    },
    "date_to": {
      "description": "Lessons starting on or before this date.",
      "type": "string",
      "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
    },
    "joinable": {
      "description": "true = only lessons marked joinable.",
      "type": "boolean"
    },
    "include_deleted": {
      "description": "true = include deleted lessons.",
      "type": "boolean"
    },
    "page": {
      "description": "Page number (1-based, default 1).",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991
    },
    "per_page": {
      "description": "Records per page (default 20, max 50).",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 50
    },
    "direction": {
      "description": "Sort by id ascending (default) or descending (newest first).",
      "type": "string",
      "enum": [
        "asc",
        "desc"
      ]
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢teachworks_get_lesson(lesson_id)

Retrieve one lesson with its participants (students, statuses, charges, notes), teacher, wage and cost. GET /lessons/{id}.

Input Schema

{
  "type": "object",
  "properties": {
    "lesson_id": {
      "anyOf": [
        {
          "type": "integer",
          "exclusiveMinimum": 0,
          "maximum": 9007199254740991
        },
        {
          "type": "string",
          "pattern": "^\\d+$"
        }
      ],
      "description": "Lesson id."
    }
  },
  "required": [
    "lesson_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢teachworks_list_other_events(employee_id, location_id, series_id, from_date, date_from, ...)

List non-lesson calendar events (meetings, open houses, staff work) with location, times and participants. GET /other_events.

Input Schema

{
  "type": "object",
  "properties": {
    "employee_id": {
      "description": "Only events of this employee.",
      "anyOf": [
        {
          "type": "integer",
          "exclusiveMinimum": 0,
          "maximum": 9007199254740991
        },
        {
          "type": "string",
          "pattern": "^\\d+$"
        }
      ]
    },
    "location_id": {
      "description": "Only events at this location.",
      "anyOf": [
        {
          "type": "integer",
          "exclusiveMinimum": 0,
          "maximum": 9007199254740991
        },
        {
          "type": "string",
          "pattern": "^\\d+$"
        }
      ]
    },
    "series_id": {
      "description": "Only events of this repeating series.",
      "anyOf": [
        {
          "type": "integer",
          "exclusiveMinimum": 0,
          "maximum": 9007199254740991
        },
        {
          "type": "string",
          "pattern": "^\\d+$"
        }
      ]
    },
    "from_date": {
      "description": "Events starting on exactly this date.",
      "type": "string",
      "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
    },
    "date_from": {
      "description": "Events starting on or after this date.",
      "type": "string",
      "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
    },
    "date_to": {
      "description": "Events starting on or before this date.",
      "type": "string",
      "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
    },
    "page": {
      "description": "Page number (1-based, default 1).",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991
    },
    "per_page": {
      "description": "Records per page (default 20, max 50).",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 50
    },
    "direction": {
      "description": "Sort by id ascending (default) or descending (newest first).",
      "type": "string",
      "enum": [
        "asc",
        "desc"
      ]
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢teachworks_list_availabilities(employee_id, day, page, per_page, direction)

List teachers' weekly availability slots (day of week + start/end time). Use before scheduling a lesson. GET /availabilities.

Input Schema

{
  "type": "object",
  "properties": {
    "employee_id": {
      "description": "Only this teacher's availability.",
      "anyOf": [
        {
          "type": "integer",
          "exclusiveMinimum": 0,
          "maximum": 9007199254740991
        },
        {
          "type": "string",
          "pattern": "^\\d+$"
        }
      ]
    },
    "day": {
      "description": "Day of week, Sunday = 0 … Saturday = 6.",
      "type": "integer",
      "minimum": 0,
      "maximum": 6
    },
    "page": {
      "description": "Page number (1-based, default 1).",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991
    },
    "per_page": {
      "description": "Records per page (default 20, max 50).",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 50
    },
    "direction": {
      "description": "Sort by id ascending (default) or descending (newest first).",
      "type": "string",
      "enum": [
        "asc",
        "desc"
      ]
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢teachworks_list_invoices(customer_id, number, status, date_from, date_to, ...)

List invoices with customer, number, dates, status (Saved, Approved, Paid, Void) and totals. Filter by customer, status, invoice date or due date range. GET /invoices.

Input Schema

{
  "type": "object",
  "properties": {
    "customer_id": {
      "description": "Only invoices of this customer.",
      "anyOf": [
        {
          "type": "integer",
          "exclusiveMinimum": 0,
          "maximum": 9007199254740991
        },
        {
          "type": "string",
          "pattern": "^\\d+$"
        }
      ]
    },
    "number": {
      "description": "Invoice number.",
      "anyOf": [
        {
          "type": "integer",
          "minimum": -9007199254740991,
          "maximum": 9007199254740991
        },
        {
          "type": "string"
        }
      ]
    },
    "status": {
      "type": "string",
      "enum": [
        "Saved",
        "Approved",
        "Paid",
        "Void"
      ]
    },
    "date_from": {
      "description": "Invoice date on or after.",
      "type": "string",
      "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
    },
    "date_to": {
      "description": "Invoice date on or before.",
      "type": "string",
      "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
    },
    "due_from": {
      "description": "Due date on or after.",
      "type": "string",
      "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
    },
    "due_to": {
      "description": "Due date on or before (e.g. today, to find overdue invoices together with status Approved).",
      "type": "string",
      "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
    },
    "page": {
      "description": "Page number (1-based, default 1).",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991
    },
    "per_page": {
      "description": "Records per page (default 20, max 50).",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 50
    },
    "direction": {
      "description": "Sort by id ascending (default) or descending (newest first).",
      "type": "string",
      "enum": [
        "asc",
        "desc"
      ]
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢teachworks_get_invoice(invoice_id)

Retrieve one invoice with its line items (lessons, charges), taxes and totals. GET /invoices/{id}.

Input Schema

{
  "type": "object",
  "properties": {
    "invoice_id": {
      "anyOf": [
        {
          "type": "integer",
          "exclusiveMinimum": 0,
          "maximum": 9007199254740991
        },
        {
          "type": "string",
          "pattern": "^\\d+$"
        }
      ],
      "description": "Invoice id."
    }
  },
  "required": [
    "invoice_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢teachworks_list_payments(customer_id, date_from, date_to, page, per_page, ...)

List customer payments (amount, method, date, refunds, invoice allocations). Filter by customer and date range. GET /payments.

Input Schema

{
  "type": "object",
  "properties": {
    "customer_id": {
      "description": "Only payments of this customer.",
      "anyOf": [
        {
          "type": "integer",
          "exclusiveMinimum": 0,
          "maximum": 9007199254740991
        },
        {
          "type": "string",
          "pattern": "^\\d+$"
        }
      ]
    },
    "date_from": {
      "description": "Payment date on or after.",
      "type": "string",
      "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
    },
    "date_to": {
      "description": "Payment date on or before.",
      "type": "string",
      "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
    },
    "page": {
      "description": "Page number (1-based, default 1).",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991
    },
    "per_page": {
      "description": "Records per page (default 20, max 50).",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 50
    },
    "direction": {
      "description": "Sort by id ascending (default) or descending (newest first).",
      "type": "string",
      "enum": [
        "asc",
        "desc"
      ]
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢teachworks_get_payment(payment_id)

Retrieve one payment with its refunds and the invoices it is allocated to. GET /payments/{id}.

Input Schema

{
  "type": "object",
  "properties": {
    "payment_id": {
      "anyOf": [
        {
          "type": "integer",
          "exclusiveMinimum": 0,
          "maximum": 9007199254740991
        },
        {
          "type": "string",
          "pattern": "^\\d+$"
        }
      ],
      "description": "Payment id."
    }
  },
  "required": [
    "payment_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢teachworks_list_locations(name, page, per_page, direction)

List locations and sub-locations (rooms) where lessons take place. GET /locations.

Input Schema

{
  "type": "object",
  "properties": {
    "name": {
      "description": "Search by name.",
      "type": "string"
    },
    "page": {
      "description": "Page number (1-based, default 1).",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991
    },
    "per_page": {
      "description": "Records per page (default 20, max 50).",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 50
    },
    "direction": {
      "description": "Sort by id ascending (default) or descending (newest first).",
      "type": "string",
      "enum": [
        "asc",
        "desc"
      ]
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢teachworks_list_services(name, page, per_page, direction)

List services (lesson types such as 'Math Tutoring') with their default cost and wage. GET /services.

Input Schema

{
  "type": "object",
  "properties": {
    "name": {
      "description": "Search by name.",
      "type": "string"
    },
    "page": {
      "description": "Page number (1-based, default 1).",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991
    },
    "per_page": {
      "description": "Records per page (default 20, max 50).",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 50
    },
    "direction": {
      "description": "Sort by id ascending (default) or descending (newest first).",
      "type": "string",
      "enum": [
        "asc",
        "desc"
      ]
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢teachworks_list_subjects(name, page, per_page, direction)

List standard subjects (used on student and teacher profiles). GET /subjects.

Input Schema

{
  "type": "object",
  "properties": {
    "name": {
      "description": "Search by name (partial match).",
      "type": "string"
    },
    "page": {
      "description": "Page number (1-based, default 1).",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991
    },
    "per_page": {
      "description": "Records per page (default 20, max 50).",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 50
    },
    "direction": {
      "description": "Sort by id ascending (default) or descending (newest first).",
      "type": "string",
      "enum": [
        "asc",
        "desc"
      ]
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🔴teachworks_create_family(first_name, last_name, email, mobile_phone, home_phone, ...)

WRITE: create a family customer (the billed parent profile that child students belong to). Add children afterwards with teachworks_create_child_student. POST /customers/family.

Input Schema

{
  "type": "object",
  "properties": {
    "first_name": {
      "type": "string",
      "minLength": 1,
      "description": "Parent first name(s), e.g. 'Frank & Tina'."
    },
    "last_name": {
      "type": "string",
      "minLength": 1,
      "description": "Family last name."
    },
    "email": {
      "description": "Primary email (notifications, user account).",
      "type": "string"
    },
    "mobile_phone": {
      "type": "string"
    },
    "home_phone": {
      "type": "string"
    },
    "address": {
      "type": "string"
    },
    "city": {
      "type": "string"
    },
    "state": {
      "type": "string"
    },
    "zip": {
      "type": "string"
    },
    "country": {
      "type": "string"
    },
    "status": {
      "description": "Defaults to Active; use Prospective for leads.",
      "type": "string",
      "enum": [
        "Active",
        "Inactive",
        "Prospective"
      ]
    },
    "additional_notes": {
      "type": "string"
    }
  },
  "required": [
    "first_name",
    "last_name"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🔴teachworks_create_child_student(customer_id, first_name, last_name, email, mobile_phone, ...)

WRITE: create a child student under an existing family (the family is billed for their lessons). POST /students.

Input Schema

{
  "type": "object",
  "properties": {
    "customer_id": {
      "anyOf": [
        {
          "type": "integer",
          "exclusiveMinimum": 0,
          "maximum": 9007199254740991
        },
        {
          "type": "string",
          "pattern": "^\\d+$"
        }
      ],
      "description": "The family (customer) id the student belongs to."
    },
    "first_name": {
      "type": "string",
      "minLength": 1
    },
    "last_name": {
      "type": "string",
      "minLength": 1
    },
    "email": {
      "type": "string"
    },
    "mobile_phone": {
      "type": "string"
    },
    "school": {
      "type": "string"
    },
    "grade": {
      "type": "string"
    },
    "birth_date": {
      "type": "string",
      "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
    },
    "start_date": {
      "type": "string",
      "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
    },
    "status": {
      "type": "string",
      "enum": [
        "Active",
        "Inactive",
        "Prospective"
      ]
    },
    "default_location_id": {
      "anyOf": [
        {
          "type": "integer",
          "exclusiveMinimum": 0,
          "maximum": 9007199254740991
        },
        {
          "type": "string",
          "pattern": "^\\d+$"
        }
      ]
    },
    "default_teacher_ids": {
      "description": "Default teacher (employee) ids.",
      "type": "array",
      "items": {
        "anyOf": [
          {
            "type": "integer",
            "exclusiveMinimum": 0,
            "maximum": 9007199254740991
          },
          {
            "type": "string",
            "pattern": "^\\d+$"
          }
        ]
      }
    },
    "default_service_ids": {
      "description": "Default service ids.",
      "type": "array",
      "items": {
        "anyOf": [
          {
            "type": "integer",
            "exclusiveMinimum": 0,
            "maximum": 9007199254740991
          },
          {
            "type": "string",
            "pattern": "^\\d+$"
          }
        ]
      }
    },
    "standard_subject_ids": {
      "description": "Subject ids.",
      "type": "array",
      "items": {
        "anyOf": [
          {
            "type": "integer",
            "exclusiveMinimum": 0,
            "maximum": 9007199254740991
          },
          {
            "type": "string",
            "pattern": "^\\d+$"
          }
        ]
      }
    },
    "additional_notes": {
      "type": "string"
    }
  },
  "required": [
    "customer_id",
    "first_name",
    "last_name"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🔴teachworks_create_lesson(employee_id, student_ids, service_id, location_id, from_date, ...)

WRITE: schedule a single lesson on the calendar for one or more students with a teacher, service and location. Check teachworks_list_availabilities and teachworks_list_lessons first to avoid conflicts. POST /lessons.

Input Schema

{
  "type": "object",
  "properties": {
    "employee_id": {
      "anyOf": [
        {
          "type": "integer",
          "exclusiveMinimum": 0,
          "maximum": 9007199254740991
        },
        {
          "type": "string",
          "pattern": "^\\d+$"
        }
      ],
      "description": "Teacher (employee) id."
    },
    "student_ids": {
      "minItems": 1,
      "type": "array",
      "items": {
        "anyOf": [
          {
            "type": "integer",
            "exclusiveMinimum": 0,
            "maximum": 9007199254740991
          },
          {
            "type": "string",
            "pattern": "^\\d+$"
          }
        ]
      },
      "description": "Student ids attending."
    },
    "service_id": {
      "anyOf": [
        {
          "type": "integer",
          "exclusiveMinimum": 0,
          "maximum": 9007199254740991
        },
        {
          "type": "string",
          "pattern": "^\\d+$"
        }
      ],
      "description": "Service id (sets the default cost and wage)."
    },
    "location_id": {
      "description": "Location id.",
      "anyOf": [
        {
          "type": "integer",
          "exclusiveMinimum": 0,
          "maximum": 9007199254740991
        },
        {
          "type": "string",
          "pattern": "^\\d+$"
        }
      ]
    },
    "from_date": {
      "type": "string",
      "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
      "description": "Start date."
    },
    "from_time": {
      "type": "string",
      "pattern": "^\\d{1,2}:\\d{2}(:\\d{2})?$",
      "description": "Start time, e.g. 16:00."
    },
    "to_date": {
      "description": "End date (defaults to from_date).",
      "type": "string",
      "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
    },
    "to_time": {
      "type": "string",
      "pattern": "^\\d{1,2}:\\d{2}(:\\d{2})?$",
      "description": "End time, e.g. 17:00."
    },
    "name": {
      "description": "Lesson name (defaults per Teachworks settings).",
      "type": "string"
    },
    "description": {
      "type": "string"
    },
    "time_zone": {
      "description": "Rails time zone name, e.g. 'Eastern Time (US & Canada)' (defaults to the account's).",
      "type": "string"
    },
    "spaces": {
      "description": "Number of student spaces (group lessons).",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991
    }
  },
  "required": [
    "employee_id",
    "student_ids",
    "service_id",
    "from_date",
    "from_time",
    "to_time"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🔴teachworks_add_student_to_lesson(lesson_id, student_id)

WRITE: add a student to an existing lesson (the lesson must still be Scheduled). PUT /lessons/{id}/add_student.

Input Schema

{
  "type": "object",
  "properties": {
    "lesson_id": {
      "anyOf": [
        {
          "type": "integer",
          "exclusiveMinimum": 0,
          "maximum": 9007199254740991
        },
        {
          "type": "string",
          "pattern": "^\\d+$"
        }
      ],
      "description": "Lesson id."
    },
    "student_id": {
      "anyOf": [
        {
          "type": "integer",
          "exclusiveMinimum": 0,
          "maximum": 9007199254740991
        },
        {
          "type": "string",
          "pattern": "^\\d+$"
        }
      ],
      "description": "Student id to add."
    }
  },
  "required": [
    "lesson_id",
    "student_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🔴teachworks_create_payment(customer_id, amount, date, payment_method, description)

WRITE: record a payment received from a customer (bookkeeping only — it does not charge a card). POST /payments.

Input Schema

{
  "type": "object",
  "properties": {
    "customer_id": {
      "anyOf": [
        {
          "type": "integer",
          "exclusiveMinimum": 0,
          "maximum": 9007199254740991
        },
        {
          "type": "string",
          "pattern": "^\\d+$"
        }
      ],
      "description": "Customer that paid."
    },
    "amount": {
      "type": "number",
      "exclusiveMinimum": 0,
      "description": "Amount paid."
    },
    "date": {
      "type": "string",
      "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
      "description": "Payment date."
    },
    "payment_method": {
      "type": "string",
      "enum": [
        "Cash",
        "Check",
        "Credit Card",
        "Debit Card",
        "Bank Transfer",
        "PayPal",
        "Other"
      ]
    },
    "description": {
      "description": "Details, e.g. 'Payment for INV-0216'.",
      "type": "string"
    }
  },
  "required": [
    "customer_id",
    "amount",
    "date"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}

Community

Rate this Server

Evidence

Recent observations

verifiedversion not recorded24 tools