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.
19 tools: 6 can delete or cancel things and 13 only read.
Scanned Oct 21, 2026
- Deletes or cancels6Claude Code: deny: see these tools
- Can't be undone0Claude Code: ask
- Changes things0Claude Code: ask
- Only reads13Claude Code: allow: see these tools
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/mcpTools
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/mcpRun in a terminal.
Claude Code permissions
Allow the reads, ask before a change, deny the deletes. Paste into .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.