Skip to content

IntakeQ MCP by usefulapi

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

Search clients, appointments, intakes, notes and invoices in IntakeQ, and book or cancel visits.

Deletes · 6

19 tools: 6 can delete or cancel things and 13 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 intakeq https://intakeq.usefulapi.io/mcp

Tools

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

19 tools

Deletes or cancels 6Claude Code: deny
  • intakeq_add_client_tagAdd a tag to a client.No findings

    Why it is in this group

    • The name "intakeq_add_client_tag" says "add": a word for a change.
    • The server marks it destructive (destructiveHint: true).
    Description, as the server wrote it
    Add a tag to a client. The tag is created if it does not exist; adding one the client already has is a no-op. IntakeQ: POST /clientTags.

    Annotations the server declares

    • title: Tag a client
    • destructiveHint: true
  • intakeq_cancel_appointmentCancel an appointment, with an optional reason.No findings

    Why it is in this group

    • The name "intakeq_cancel_appointment" says "cancel": a word for removing or ending something.
    • The description says "cannot be undone".
    • The server marks it destructive (destructiveHint: true).
    Description, as the server wrote it
    Cancel an appointment, with an optional reason. This changes the client's booking and cannot be undone through the API — book a new appointment to replace it. IntakeQ: POST /appointments/cancellation.

    Annotations the server declares

    • title: Cancel an appointment
    • destructiveHint: true
  • intakeq_create_appointmentBook an appointment in the PracticeQ scheduler.No findings

    Why it is in this group

    • The name "intakeq_create_appointment" says "create": a word for a change.
    • The server marks it destructive (destructiveHint: true).
    Description, as the server wrote it
    Book an appointment in the PracticeQ scheduler. Get PractitionerId, ServiceId and LocationId from intakeq_get_booking_settings. All fields are required by IntakeQ. Status must be Confirmed or WaitingConfirmation; SendClientEmailNotification may be true only when Status is Confirmed. IntakeQ: POST /appointments.

    Annotations the server declares

    • title: Create an appointment
    • destructiveHint: true
  • intakeq_save_clientCreate a client, or update one.No findings

    Why it is in this group

    • The name "intakeq_save_client" says "save": a word for a change.
    • The server marks it destructive (destructiveHint: true).
    Description, as the server wrote it
    Create a client, or update one. With ClientId the existing client is updated. WITHOUT ClientId IntakeQ still tries to match an existing client by first name + email (or first name + phone) and updates that one instead of creating a duplicate. For updates, fetch the full profile first (intakeq_list_clients with include_profile=true) and send it back with your changes, so no field is unintentionally cleared. Field names are IntakeQ's own. Dates are Unix timestamps in milliseconds. IntakeQ: POST /clients.

    Annotations the server declares

    • title: Create or update a client
    • destructiveHint: true
  • intakeq_send_questionnaireSend an intake questionnaire to a client by email or SMS.No findings

    Why it is in this group

    • The name "intakeq_send_questionnaire" says "send": a word for sending, and what is sent cannot be taken back.
    • The server marks it destructive (destructiveHint: true).
    Description, as the server wrote it
    Send an intake questionnaire to a client by email or SMS. This MESSAGES THE CLIENT. Identify the client by ClientId, or by ClientName plus ClientEmail and/or ClientPhone (omit ClientEmail to force SMS). PractitionerId is optional. Returns the new intake. IntakeQ: POST /intakes/send.

    Annotations the server declares

    • title: Send an intake questionnaire
    • destructiveHint: true
  • intakeq_update_appointmentChange an appointment's time, service, location, status or reminder type.No findings

    Why it is in this group

    • The name "intakeq_update_appointment" says "update": a word for a change.
    • The server marks it destructive (destructiveHint: true).
    Description, as the server wrote it
    Change an appointment's time, service, location, status or reminder type. Id and UtcDateTime are required (send the current time to keep it); include only the other fields you are changing. The client and practitioner cannot be changed, and a Confirmed appointment cannot go back to WaitingConfirmation. IntakeQ: PUT /appointments.

    Annotations the server declares

    • title: Update or reschedule an appointment
    • destructiveHint: true
Only reads 13Claude Code: allow
  • intakeq_get_appointmentFetch one appointment: client, practitioner, service, location, start/end, status, price, invoice, telehealth link and cancellation details.No findings

    Why it is in this group

    • The name "intakeq_get_appointment" says "get": a word for reading.
    Description, as the server wrote it
    Fetch one appointment: client, practitioner, service, location, start/end, status, price, invoice, telehealth link and cancellation details. IntakeQ: GET /appointments/{id}.

    Annotations the server declares

    • title: Get one appointment
    • readOnlyHint: true
  • intakeq_get_booking_settingsList the scheduler's locations, services (with duration and price) and practitioners — the ids you need to create an appointment.No findings

    Why it is in this group

    • The name "intakeq_get_booking_settings" says "get": a word for reading.
    Description, as the server wrote it
    List the scheduler's locations, services (with duration and price) and practitioners — the ids you need to create an appointment. IntakeQ: GET /appointments/settings.

    Annotations the server declares

    • title: Get booking settings
    • readOnlyHint: true
  • intakeq_get_client_diagnosesList the diagnoses recorded for one client: code, description, start/end date and the treatment note they came from.No findings

    Why it is in this group

    • The name "intakeq_get_client_diagnoses" says "get": a word for reading.
    Description, as the server wrote it
    List the diagnoses recorded for one client: code, description, start/end date and the treatment note they came from. IntakeQ: GET /client/{clientId}/diagnoses.

    Annotations the server declares

    • title: Get a client's diagnoses
    • readOnlyHint: true
  • intakeq_get_intakeFetch one intake questionnaire with every question and answer, its consent forms and linked appointment.No findings

    Why it is in this group

    • The name "intakeq_get_intake" says "get": a word for reading.
    Description, as the server wrote it
    Fetch one intake questionnaire with every question and answer, its consent forms and linked appointment. IntakeQ: GET /intakes/{id}.

    Annotations the server declares

    • title: Get a full intake form
    • readOnlyHint: true
  • intakeq_get_invoiceFetch one invoice: line items, taxes, discounts, payments, totals and amount due.No findings

    Why it is in this group

    • The name "intakeq_get_invoice" says "get": a word for reading.
    Description, as the server wrote it
    Fetch one invoice: line items, taxes, discounts, payments, totals and amount due. IntakeQ: GET /invoices/{id}.

    Annotations the server declares

    • title: Get one invoice
    • readOnlyHint: true
  • intakeq_get_noteFetch one treatment note with every question and answer and its linked appointment.No findings

    Why it is in this group

    • The name "intakeq_get_note" says "get": a word for reading.
    Description, as the server wrote it
    Fetch one treatment note with every question and answer and its linked appointment. IntakeQ: GET /notes/{id}.

    Annotations the server declares

    • title: Get a full treatment note
    • readOnlyHint: true
  • intakeq_list_appointmentsQuery appointments by client name/email, date range, status, practitioner or last-modified date.No findings

    Why it is in this group

    • The name "intakeq_list_appointments" says "list": a word for reading.
    Description, as the server wrote it
    Query appointments by client name/email, date range, status, practitioner or last-modified date. Max 100 per page. IntakeQ: GET /appointments.

    Annotations the server declares

    • title: List appointments
    • readOnlyHint: true
  • intakeq_list_clientsSearch the practice's clients (patients) by name, email or client number, by created/updated date range, by external id, or by a custom field.No findings

    Why it is in this group

    • The name "intakeq_list_clients" says "list": a word for reading.
    Description, as the server wrote it
    Search the practice's clients (patients) by name, email or client number, by created/updated date range, by external id, or by a custom field. Without include_profile it returns Name, Email, Phone and ClientNumber; with include_profile=true it returns the full profile (address, insurance, tags, custom fields, linked clients). Max 100 per page. IntakeQ: GET /clients.

    Annotations the server declares

    • title: Search clients
    • readOnlyHint: true
  • intakeq_list_intakesQuery submitted intake questionnaires (summaries: client, status, questionnaire, practitioner, dates).No findings

    Why it is in this group

    • The name "intakeq_list_intakes" says "list": a word for reading.
    Description, as the server wrote it
    Query submitted intake questionnaires (summaries: client, status, questionnaire, practitioner, dates). By default only completed forms; set all=true for every status (Sent, Partial, Completed, Offline). Max 100 per page. IntakeQ: GET /intakes/summary.

    Annotations the server declares

    • title: List intake forms
    • readOnlyHint: true
  • intakeq_list_invoicesQuery invoices by client, issue date range, status, practitioner or last-updated range.No findings

    Why it is in this group

    • The name "intakeq_list_invoices" says "list": a word for reading.
    Description, as the server wrote it
    Query invoices by client, issue date range, status, practitioner or last-updated range. Each invoice includes items, payments and amounts due/paid. Max 100 per page. IntakeQ: GET /invoices.

    Annotations the server declares

    • title: List invoices
    • readOnlyHint: true
  • intakeq_list_notesQuery treatment note summaries by client, lock status, date range or last-updated date.No findings

    Why it is in this group

    • The name "intakeq_list_notes" says "list": a word for reading.
    Description, as the server wrote it
    Query treatment note summaries by client, lock status, date range or last-updated date. Max 100 per page. IntakeQ: GET /notes/summary.

    Annotations the server declares

    • title: List treatment notes
    • readOnlyHint: true
  • intakeq_list_practitionersList the practitioners in the account (id, name, email, external id).No findings

    Why it is in this group

    • The name "intakeq_list_practitioners" says "list": a word for reading.
    Description, as the server wrote it
    List the practitioners in the account (id, name, email, external id). IntakeQ: GET /practitioners.

    Annotations the server declares

    • title: List practitioners
    • readOnlyHint: true
  • intakeq_list_questionnairesList the intake questionnaire templates in the account (id, name, archived, anonymous) — the ids you need to send one.No findings

    Why it is in this group

    • The name "intakeq_list_questionnaires" says "list": a word for reading.
    Description, as the server wrote it
    List the intake questionnaire templates in the account (id, name, archived, anonymous) — the ids you need to send one. IntakeQ: GET /questionnaires.

    Annotations the server declares

    • title: List questionnaire templates
    • 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.16.3. Values in angle brackets are yours to fill in.

claude mcp add --transport http intakeq https://intakeq.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__intakeq__intakeq_list_clients",
      "mcp__intakeq__intakeq_get_client_diagnoses",
      "mcp__intakeq__intakeq_list_appointments",
      "mcp__intakeq__intakeq_get_appointment",
      "mcp__intakeq__intakeq_get_booking_settings",
      "mcp__intakeq__intakeq_list_intakes",
      "mcp__intakeq__intakeq_get_intake",
      "mcp__intakeq__intakeq_list_questionnaires",
      "mcp__intakeq__intakeq_list_practitioners",
      "mcp__intakeq__intakeq_list_notes",
      "mcp__intakeq__intakeq_get_note",
      "mcp__intakeq__intakeq_list_invoices",
      "mcp__intakeq__intakeq_get_invoice"
    ],
    "ask": [],
    "deny": [
      "mcp__intakeq__intakeq_save_client",
      "mcp__intakeq__intakeq_add_client_tag",
      "mcp__intakeq__intakeq_create_appointment",
      "mcp__intakeq__intakeq_update_appointment",
      "mcp__intakeq__intakeq_cancel_appointment",
      "mcp__intakeq__intakeq_send_questionnaire"
    ]
  }
}

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 intakeq. Review it before you use it.