Skip to content

Teachworks MCP by usefulapi

by usefulapi.io · remote · no sign-in to list tools · v1.7.3 · published by io.usefulapi

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

Deletes · 5

24 tools: 5 can delete or cancel things and 19 only read.

Scanned Oct 21, 2026

No check matched anything in the tool definitions. No finding is not a safety guarantee. How the checks work.

claude mcp add --transport http teachworks https://teachworks.usefulapi.io/mcp

Tools

Open a tool for its reasons and full description. Descriptions are the publisher's own words, shown as they are.

24 tools

Deletes or cancels 5Claude Code: deny
  • teachworks_add_student_to_lessonWRITE: add a student to an existing lesson (the lesson must still be Scheduled).No findings

    Why it is in this group

    • The name "teachworks_add_student_to_lesson" says "add": a word for a change.
    • The server marks it destructive (destructiveHint: true).
    Description, as the server wrote it
    WRITE: add a student to an existing lesson (the lesson must still be Scheduled). PUT /lessons/{id}/add_student.

    Annotations the server declares

    • title: Add student to lesson
    • readOnlyHint: false
    • destructiveHint: true
    • idempotentHint: false
    • openWorldHint: true
  • teachworks_create_child_studentWRITE: create a child student under an existing family (the family is billed for their lessons).No findings

    Why it is in this group

    • The name "teachworks_create_child_student" says "create": a word for a change.
    • The server marks it destructive (destructiveHint: true).
    Description, as the server wrote it
    WRITE: create a child student under an existing family (the family is billed for their lessons). POST /students.

    Annotations the server declares

    • title: Create child student
    • readOnlyHint: false
    • destructiveHint: true
    • idempotentHint: false
    • openWorldHint: true
  • teachworks_create_familyWRITE: create a family customer (the billed parent profile that child students belong to).No findings

    Why it is in this group

    • The name "teachworks_create_family" says "create": a word for a change.
    • The server marks it destructive (destructiveHint: true).
    Description, as the server wrote it
    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.

    Annotations the server declares

    • title: Create family
    • readOnlyHint: false
    • destructiveHint: true
    • idempotentHint: false
    • openWorldHint: true
  • teachworks_create_lessonWRITE: schedule a single lesson on the calendar for one or more students with a teacher, service and location.No findings

    Why it is in this group

    • The name "teachworks_create_lesson" says "create": a word for a change.
    • The server marks it destructive (destructiveHint: true).
    Description, as the server wrote it
    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.

    Annotations the server declares

    • title: Create lesson
    • readOnlyHint: false
    • destructiveHint: true
    • idempotentHint: false
    • openWorldHint: true
  • teachworks_create_paymentWRITE: record a payment received from a customer (bookkeeping only — it does not charge a card).No findings

    Why it is in this group

    • The name "teachworks_create_payment" says "create": a word for a change.
    • The name "teachworks_create_payment" also says "payment": a word that usually means money moves, which cannot be taken back.
    • The server marks it destructive (destructiveHint: true).
    Description, as the server wrote it
    WRITE: record a payment received from a customer (bookkeeping only — it does not charge a card). POST /payments.

    Annotations the server declares

    • title: Record payment
    • readOnlyHint: false
    • destructiveHint: true
    • idempotentHint: false
    • openWorldHint: true
Only reads 19Claude Code: allow
  • teachworks_get_customerRetrieve one customer (family or independent student) with contact details and custom fields.No findings

    Why it is in this group

    • The name "teachworks_get_customer" says "get": a word for reading.
    Description, as the server wrote it
    Retrieve one customer (family or independent student) with contact details and custom fields. GET /customers/{id}.

    Annotations the server declares

    • title: Get customer
    • readOnlyHint: true
  • teachworks_get_employeeRetrieve one employee (teacher or staff): contact details, subjects, wage type, bio, permissions.No findings

    Why it is in this group

    • The name "teachworks_get_employee" says "get": a word for reading.
    Description, as the server wrote it
    Retrieve one employee (teacher or staff): contact details, subjects, wage type, bio, permissions. GET /employees/{id}.

    Annotations the server declares

    • title: Get employee
    • readOnlyHint: true
  • teachworks_get_employee_earningsTotal earnings of one employee (lessons, other events, other compensation, total) for an optional lesson status and date range.No findings

    Why it is in this group

    • The name "teachworks_get_employee_earnings" says "get": a word for reading.
    Description, as the server wrote it
    Total earnings of one employee (lessons, other events, other compensation, total) for an optional lesson status and date range. GET /employees/{id}/earnings.

    Annotations the server declares

    • title: Get employee earnings
    • readOnlyHint: true
  • teachworks_get_invoiceRetrieve one invoice with its line items (lessons, charges), taxes and totals.No findings

    Why it is in this group

    • The name "teachworks_get_invoice" says "get": a word for reading.
    Description, as the server wrote it
    Retrieve one invoice with its line items (lessons, charges), taxes and totals. GET /invoices/{id}.

    Annotations the server declares

    • title: Get invoice
    • readOnlyHint: true
  • teachworks_get_lessonRetrieve one lesson with its participants (students, statuses, charges, notes), teacher, wage and cost.No findings

    Why it is in this group

    • The name "teachworks_get_lesson" says "get": a word for reading.
    Description, as the server wrote it
    Retrieve one lesson with its participants (students, statuses, charges, notes), teacher, wage and cost. GET /lessons/{id}.

    Annotations the server declares

    • title: Get lesson
    • readOnlyHint: true
  • teachworks_get_lesson_totalsLesson 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 rang…No findings

    Why it is in this group

    • The name "teachworks_get_lesson_totals" says "get": a word for reading.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • title: Get lesson totals
    • readOnlyHint: true
  • teachworks_get_paymentRetrieve one payment with its refunds and the invoices it is allocated to.No findings

    Why it is in this group

    • The name "teachworks_get_payment" says "get": a word for reading.
    Description, as the server wrote it
    Retrieve one payment with its refunds and the invoices it is allocated to. GET /payments/{id}.

    Annotations the server declares

    • title: Get payment
    • readOnlyHint: true
  • teachworks_get_studentRetrieve one student profile: contact details, school/grade, billing, custom fields, default teachers/services.No findings

    Why it is in this group

    • The name "teachworks_get_student" says "get": a word for reading.
    Description, as the server wrote it
    Retrieve one student profile: contact details, school/grade, billing, custom fields, default teachers/services. GET /students/{id}.

    Annotations the server declares

    • title: Get student
    • readOnlyHint: true
  • teachworks_list_availabilitiesList teachers' weekly availability slots (day of week + start/end time).No findings

    Why it is in this group

    • The name "teachworks_list_availabilities" says "list": a word for reading.
    Description, as the server wrote it
    List teachers' weekly availability slots (day of week + start/end time). Use before scheduling a lesson. GET /availabilities.

    Annotations the server declares

    • title: List teacher availability
    • readOnlyHint: true
  • teachworks_list_customersList or search customers — the billed profiles: families (with child students) and independent students.No findings

    Why it is in this group

    • The name "teachworks_list_customers" says "list": a word for reading.
    Description, as the server wrote it
    List or search customers — the billed profiles: families (with child students) and independent students. Returns contact details, status and last invoice date. GET /customers.

    Annotations the server declares

    • title: List customers
    • readOnlyHint: true
  • teachworks_list_employeesList or search employees — teachers/tutors and administrative staff — with subjects, status and wage settings.No findings

    Why it is in this group

    • The name "teachworks_list_employees" says "list": a word for reading.
    Description, as the server wrote it
    List or search employees — teachers/tutors and administrative staff — with subjects, status and wage settings. GET /employees.

    Annotations the server declares

    • title: List employees
    • readOnlyHint: true
  • teachworks_list_invoicesList invoices with customer, number, dates, status (Saved, Approved, Paid, Void) and totals.No findings

    Why it is in this group

    • The name "teachworks_list_invoices" says "list": a word for reading.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • title: List invoices
    • readOnlyHint: true
  • teachworks_list_lessonsList lessons (the calendar) with teacher, service, location, start/end, duration, status and participants.No findings

    Why it is in this group

    • The name "teachworks_list_lessons" says "list": a word for reading.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • title: List lessons
    • readOnlyHint: true
  • teachworks_list_locationsList locations and sub-locations (rooms) where lessons take place.No findings

    Why it is in this group

    • The name "teachworks_list_locations" says "list": a word for reading.
    Description, as the server wrote it
    List locations and sub-locations (rooms) where lessons take place. GET /locations.

    Annotations the server declares

    • title: List locations
    • readOnlyHint: true
  • teachworks_list_other_eventsList non-lesson calendar events (meetings, open houses, staff work) with location, times and participants.No findings

    Why it is in this group

    • The name "teachworks_list_other_events" says "list": a word for reading.
    Description, as the server wrote it
    List non-lesson calendar events (meetings, open houses, staff work) with location, times and participants. GET /other_events.

    Annotations the server declares

    • title: List other events
    • readOnlyHint: true
  • teachworks_list_paymentsList customer payments (amount, method, date, refunds, invoice allocations).No findings

    Why it is in this group

    • The name "teachworks_list_payments" says "list": a word for reading.
    Description, as the server wrote it
    List customer payments (amount, method, date, refunds, invoice allocations). Filter by customer and date range. GET /payments.

    Annotations the server declares

    • title: List payments
    • readOnlyHint: true
  • teachworks_list_servicesList services (lesson types such as 'Math Tutoring') with their default cost and wage.No findings

    Why it is in this group

    • The name "teachworks_list_services" says "list": a word for reading.
    Description, as the server wrote it
    List services (lesson types such as 'Math Tutoring') with their default cost and wage. GET /services.

    Annotations the server declares

    • title: List services
    • readOnlyHint: true
  • teachworks_list_studentsList or search students (child students of families and independent students) with their school, grade, subjects, status, billing method and default teachers.No findings

    Why it is in this group

    • The name "teachworks_list_students" says "list": a word for reading.
    Description, as the server wrote it
    List or search students (child students of families and independent students) with their school, grade, subjects, status, billing method and default teachers. GET /students.

    Annotations the server declares

    • title: List students
    • readOnlyHint: true
  • teachworks_list_subjectsList standard subjects (used on student and teacher profiles).No findings

    Why it is in this group

    • The name "teachworks_list_subjects" says "list": a word for reading.
    Description, as the server wrote it
    List standard subjects (used on student and teacher profiles). GET /subjects.

    Annotations the server declares

    • title: List subjects
    • readOnlyHint: true

This is not a safety rating, and no finding is not a safety guarantee. The groups and findings come from fixed checks of the tool definitions the server returned on the date shown, not from its code or what it does when called. How the checks work.

Install

Pinned to version 1.7.3. Values in angle brackets are yours to fill in.

claude mcp add --transport http teachworks https://teachworks.usefulapi.io/mcp

Run in a terminal.

Claude Code permissions

Allow the reads, ask before a change, deny the deletes. Paste into .claude/settings.json.

.claude/settings.json
{
  "permissions": {
    "allow": [
      "mcp__teachworks__teachworks_list_students",
      "mcp__teachworks__teachworks_get_student",
      "mcp__teachworks__teachworks_list_customers",
      "mcp__teachworks__teachworks_get_customer",
      "mcp__teachworks__teachworks_list_employees",
      "mcp__teachworks__teachworks_get_employee",
      "mcp__teachworks__teachworks_get_employee_earnings",
      "mcp__teachworks__teachworks_get_lesson_totals",
      "mcp__teachworks__teachworks_list_lessons",
      "mcp__teachworks__teachworks_get_lesson",
      "mcp__teachworks__teachworks_list_other_events",
      "mcp__teachworks__teachworks_list_availabilities",
      "mcp__teachworks__teachworks_list_invoices",
      "mcp__teachworks__teachworks_get_invoice",
      "mcp__teachworks__teachworks_list_payments",
      "mcp__teachworks__teachworks_get_payment",
      "mcp__teachworks__teachworks_list_locations",
      "mcp__teachworks__teachworks_list_services",
      "mcp__teachworks__teachworks_list_subjects"
    ],
    "ask": [],
    "deny": [
      "mcp__teachworks__teachworks_create_family",
      "mcp__teachworks__teachworks_create_child_student",
      "mcp__teachworks__teachworks_create_lesson",
      "mcp__teachworks__teachworks_add_student_to_lesson",
      "mcp__teachworks__teachworks_create_payment"
    ]
  }
}

Tools that only read are allowed, tools that change things ask first, tools that delete or cancel are denied. It assumes the server is installed as teachworks. Review it before you use it.