Search clients, appointments, intakes, notes and invoices in IntakeQ, and book or cancel visits. Hosted by usefulapi — connect from Claude, Cursor, or any MCP client.
Add to your MCP config, then reload & authorize:
{
"mcpServers": {
"intakeq": {
"url": "https://intakeq.usefulapi.io/mcp"
}
}
}| Tool | Type | What it does |
|---|---|---|
intakeq_list_clients | read | Search clients 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. |
intakeq_get_client_diagnoses | read | Get a client's diagnoses List the diagnoses recorded for one client: code, description, start/end date and the treatment note they came from. IntakeQ: GET /client/{clientId}/diagnoses. |
intakeq_list_appointments | read | List appointments Query appointments by client name/email, date range, status, practitioner or last-modified date. Max 100 per page. IntakeQ: GET /appointments. |
intakeq_get_appointment | read | Get one appointment Fetch one appointment: client, practitioner, service, location, start/end, status, price, invoice, telehealth link and cancellation details. IntakeQ: GET /appointments/{id}. |
intakeq_get_booking_settings | read | Get booking settings List the scheduler's locations, services (with duration and price) and practitioners — the ids you need to create an appointment. IntakeQ: GET /appointments/settings. |
intakeq_list_intakes | read | List intake forms 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. |
intakeq_get_intake | read | Get a full intake form Fetch one intake questionnaire with every question and answer, its consent forms and linked appointment. IntakeQ: GET /intakes/{id}. |
intakeq_list_questionnaires | read | List questionnaire templates List the intake questionnaire templates in the account (id, name, archived, anonymous) — the ids you need to send one. IntakeQ: GET /questionnaires. |
intakeq_list_practitioners | read | List practitioners List the practitioners in the account (id, name, email, external id). IntakeQ: GET /practitioners. |
intakeq_list_notes | read | List treatment notes Query treatment note summaries by client, lock status, date range or last-updated date. Max 100 per page. IntakeQ: GET /notes/summary. |
intakeq_get_note | read | Get a full treatment note Fetch one treatment note with every question and answer and its linked appointment. IntakeQ: GET /notes/{id}. |
intakeq_list_invoices | read | List invoices 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. |
intakeq_get_invoice | read | Get one invoice Fetch one invoice: line items, taxes, discounts, payments, totals and amount due. IntakeQ: GET /invoices/{id}. |
intakeq_save_client | write | Create or update a client 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. |
intakeq_add_client_tag | write | Tag a client 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. |
intakeq_create_appointment | write | Create an appointment 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. |
intakeq_update_appointment | write | Update or reschedule an appointment 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. |
intakeq_cancel_appointment | write | Cancel an appointment 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. |
intakeq_send_questionnaire | write | Send an intake questionnaire 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. |
intakeq_usage_status | Usage status (free-tier meter) Report the caller's current free-tier usage this month: calls used, monthly limit, remaining, and whether the cap is reached. Read-only; does not count against the meter. | |
intakeq_upgrade | Upgrade to Pro (unlimited) Subscribe to the Pro plan for UNLIMITED IntakeQ tool calls (the free tier caps monthly usage). Choose monthly ($9/month) or yearly ($90/year — 2 months free) billing. Returns a Stripe Checkout link to open in your browser; after payment your account upgrades automatically. Read-only; does not count against the meter. |
| Plan | Price | Limit |
|---|---|---|
| Free | $0 | 100 tool calls / month |
| Proper user | $9/mo · $90/yr | Unlimited |
This is a Model Context Protocol endpoint — meant to be connected from an AI client, not opened in a browser. An invalid_token response at the URL is the auth gate working as designed; clients authenticate automatically.