Practice Better MCP by usefulapi

Read Practice Better clients, sessions, availability, services, packages, invoices and forms.

Sollte ich dies verwenden

Qualität und Sicherheit

A
Qualität der Beschreibung
100%
Vollständigkeit des Schemas
85%
Qualität der Benennung
76%
Risiko der Vergiftung
100%
Übereinstimmung der Berechtigungen
100%
Einhaltung des Protokolls
100%

Befunde (3)

  • LOWTool 'practice_better_list_practitioners' name length outside 3-30 rangein practice_better_list_practitioners
  • LOWTool 'practice_better_get_availability' name length outside 3-30 rangein practice_better_get_availability
  • LOWTool 'practice_better_list_form_requests' name length outside 3-30 rangein practice_better_list_form_requests

Basierend auf einer automatisierten Analyse der Tool-Definitionen und der Einhaltung des Protokolls.

Kontextkosten

~3,849Tokens (Tool-Definitionen)
~2.0 KBTypische Antwortgröße
Erhebliche Auswirkung auf die Aufmerksamkeit (3.01% von 128k Kontext)

Dies ist die ungefähre Anzahl der Tokens, die jedes Mal verbraucht werden, wenn die Tools des Servers in den Kontext eines Modells geladen werden. Höhere Werte verringern die Aufmerksamkeit, die für andere Aufgaben verfügbar ist.

Installieren

Installation mit einem Klick

Fügen Sie dies Ihrer Datei `claude_desktop_config.json` hinzu:

{
  "mcpServers": {
    "practice-better": {
      "url": "https://practice-better.usefulapi.io/mcp"
    }
  }
}

Remote-Endpunkte

https://practice-better.usefulapi.io/mcpstreamable-http

Was es kann

Tool-Inventar

Tools (15)

🟢 Nur lesen🟡 Schreiben🔴 Löschen⚪ Unbekannt
🟢practice_better_get_account

The practitioner (API user) behind this connection: id, name, title, timezone, default currency, role flags and the practice (company) id and name. Settings, integrations and the bio are not returned. GET /consultant/profile.

Eingabe-Schema

{
  "type": "object",
  "properties": {},
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢practice_better_list_practitioners

List the practitioners and admin users of the practice, with id, name, role flags and activation status. Use the ids to filter sessions and invoices. GET /company/administration/members.

Eingabe-Schema

{
  "type": "object",
  "properties": {},
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢practice_better_list_clients(status, has_account, child_records, modified_after, modified_before, ...)

List client records, newest first: id, status, name, email, phone, timezone and activity dates. Date of birth, address, insurance and notes are not returned. A page holds at most 100 records. To look up one person by name or email use practice_better_find_clients. GET /consultant/records.

Eingabe-Schema

{
  "type": "object",
  "properties": {
    "status": {
      "description": "Only these statuses. pendingcreate = prospective client, created = added client.",
      "minItems": 1,
      "maxItems": 2,
      "type": "array",
      "items": {
        "type": "string",
        "enum": [
          "pendingcreate",
          "created"
        ]
      }
    },
    "has_account": {
      "description": "true = only clients with an active Practice Better user account.",
      "type": "boolean"
    },
    "child_records": {
      "description": "true = only sub-records (dependants), false = only primary records.",
      "type": "boolean"
    },
    "modified_after": {
      "type": "string",
      "description": "ISO 8601 date-time with a timezone, e.g. 2026-10-01T00:00:00Z."
    },
    "modified_before": {
      "type": "string",
      "description": "ISO 8601 date-time with a timezone, e.g. 2026-10-01T00:00:00Z."
    },
    "limit": {
      "description": "Results per page, 1-100 (default 25).",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 100
    },
    "before_id": {
      "description": "Cursor: pass next_page.before_id of the previous reply to get the next page (lists are newest first).",
      "type": "string",
      "minLength": 1,
      "maxLength": 200
    },
    "after_id": {
      "description": "Cursor for lists in ascending order: return items after this id. Normally use before_id.",
      "type": "string",
      "minLength": 1,
      "maxLength": 200
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢practice_better_find_clients(query, status, max_results)

Search client records by name, preferred name or email (case-insensitive text match). Practice Better has no search endpoint, so this reads the 500 most recent records (5 pages of 100) and filters them; `complete` says whether every record was checked. Returns at most `max_results` matches with the same fields as practice_better_list_clients. GET /consultant/records.

Eingabe-Schema

{
  "type": "object",
  "properties": {
    "query": {
      "type": "string",
      "minLength": 2,
      "maxLength": 100,
      "description": "Text to look for in first name, last name, preferred name or email."
    },
    "status": {
      "description": "Only these statuses.",
      "minItems": 1,
      "maxItems": 2,
      "type": "array",
      "items": {
        "type": "string",
        "enum": [
          "pendingcreate",
          "created"
        ]
      }
    },
    "max_results": {
      "description": "Most matches to return, 1-50 (default 10).",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 50
    }
  },
  "required": [
    "query"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢practice_better_get_client(record_id)

One client record by id: status, name, preferred name, pronouns, email, phones, timezone, activity dates and tag ids. Date of birth, address, insurance, emergency contacts, notes and health history are not returned. GET /consultant/records/{recordId}.

Eingabe-Schema

{
  "type": "object",
  "properties": {
    "record_id": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200,
      "description": "Client record id."
    }
  },
  "required": [
    "record_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢practice_better_list_sessions(date_after, date_before, practitioner_ids, record_ids, service_ids, ...)

List sessions (appointments), newest first: date, duration, service, practitioner, client (id and name), status and payment status. Booking notes and session notes are not returned. Filter by date range, practitioner, client record, service or group/1-1. GET /consultant/sessions.

Eingabe-Schema

{
  "type": "object",
  "properties": {
    "date_after": {
      "description": "Sessions on or after this date-time (ISO 8601 with timezone).",
      "type": "string"
    },
    "date_before": {
      "description": "Sessions on or before this date-time (ISO 8601 with timezone).",
      "type": "string"
    },
    "practitioner_ids": {
      "description": "Only sessions of these practitioners (ids from practice_better_list_practitioners).",
      "minItems": 1,
      "maxItems": 50,
      "type": "array",
      "items": {
        "type": "string",
        "minLength": 1,
        "maxLength": 200,
        "description": "Practice Better id."
      }
    },
    "record_ids": {
      "description": "Only sessions of these client records.",
      "minItems": 1,
      "maxItems": 50,
      "type": "array",
      "items": {
        "type": "string",
        "minLength": 1,
        "maxLength": 200,
        "description": "Practice Better id."
      }
    },
    "service_ids": {
      "description": "Only sessions of these services (ids from practice_better_list_services).",
      "minItems": 1,
      "maxItems": 50,
      "type": "array",
      "items": {
        "type": "string",
        "minLength": 1,
        "maxLength": 200,
        "description": "Practice Better id."
      }
    },
    "group": {
      "description": "true = only group sessions, false = only 1-1 sessions.",
      "type": "boolean"
    },
    "limit": {
      "description": "Results per page, 1-100 (default 25).",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 100
    },
    "before_id": {
      "description": "Cursor: pass next_page.before_id of the previous reply to get the next page (lists are newest first).",
      "type": "string",
      "minLength": 1,
      "maxLength": 200
    },
    "after_id": {
      "description": "Cursor for lists in ascending order: return items after this id. Normally use before_id.",
      "type": "string",
      "minLength": 1,
      "maxLength": 200
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢practice_better_get_session(session_id, record_id)

One session (appointment) by id: date, duration, service, practitioner, client (id and name), location and status. Booking notes and session notes are not returned. For a group session pass record_id to see one client's view. GET /consultant/sessions/{sessionId}.

Eingabe-Schema

{
  "type": "object",
  "properties": {
    "session_id": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200,
      "description": "Session id."
    },
    "record_id": {
      "description": "Group sessions only: the client record id.",
      "type": "string",
      "minLength": 1,
      "maxLength": 200
    }
  },
  "required": [
    "session_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢practice_better_get_availability(practitioner_id, service_id, day, type, location_id, ...)

Open booking slots of one practitioner for one service, starting on the given day: start, end and duration of each slot. It follows the practitioner's booking settings. Needs a practitioner id and a service id. GET /consultant/availability/slots.

Eingabe-Schema

{
  "type": "object",
  "properties": {
    "practitioner_id": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200,
      "description": "Practitioner id (practice_better_list_practitioners)."
    },
    "service_id": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200,
      "description": "Service id (practice_better_list_services)."
    },
    "day": {
      "type": "string",
      "description": "The day to start from, ISO 8601 date-time with timezone, e.g. 2026-10-12T00:00:00Z."
    },
    "type": {
      "description": "Session type: face (in person), phone or virtual.",
      "type": "string",
      "enum": [
        "face",
        "phone",
        "virtual"
      ]
    },
    "location_id": {
      "description": "Only slots at this location.",
      "type": "string",
      "minLength": 1,
      "maxLength": 200
    },
    "package_id": {
      "description": "Only slots usable with this client package.",
      "type": "string",
      "minLength": 1,
      "maxLength": 200
    }
  },
  "required": [
    "practitioner_id",
    "service_id",
    "day"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢practice_better_list_services(team_for, limit, before_id, after_id)

List the services (appointment types) the practice offers: id, name, duration, group or 1-1, session types and SKU. GET /consultant/services.

Eingabe-Schema

{
  "type": "object",
  "properties": {
    "team_for": {
      "description": "Whose items: self (default), all (all team members) or other (team members except you).",
      "type": "string",
      "enum": [
        "self",
        "all",
        "other"
      ]
    },
    "limit": {
      "description": "Results per page, 1-100 (default 25).",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 100
    },
    "before_id": {
      "description": "Cursor: pass next_page.before_id of the previous reply to get the next page (lists are newest first).",
      "type": "string",
      "minLength": 1,
      "maxLength": 200
    },
    "after_id": {
      "description": "Cursor for lists in ascending order: return items after this id. Normally use before_id.",
      "type": "string",
      "minLength": 1,
      "maxLength": 200
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢practice_better_list_packages(limit, before_id, after_id)

List the package definitions (bundles of sessions or programs) the practice sells: id, name and SKU. GET /consultant/packages.

Eingabe-Schema

{
  "type": "object",
  "properties": {
    "limit": {
      "description": "Results per page, 1-100 (default 25).",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 100
    },
    "before_id": {
      "description": "Cursor: pass next_page.before_id of the previous reply to get the next page (lists are newest first).",
      "type": "string",
      "minLength": 1,
      "maxLength": 200
    },
    "after_id": {
      "description": "Cursor for lists in ascending order: return items after this id. Normally use before_id.",
      "type": "string",
      "minLength": 1,
      "maxLength": 200
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢practice_better_list_tags(limit, before_id, after_id)

List the tags the practice uses to organize clients: id and name. A client record carries tag ids. GET /tags.

Eingabe-Schema

{
  "type": "object",
  "properties": {
    "limit": {
      "description": "Results per page, 1-100 (default 25).",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 100
    },
    "before_id": {
      "description": "Cursor: pass next_page.before_id of the previous reply to get the next page (lists are newest first).",
      "type": "string",
      "minLength": 1,
      "maxLength": 200
    },
    "after_id": {
      "description": "Cursor for lists in ascending order: return items after this id. Normally use before_id.",
      "type": "string",
      "minLength": 1,
      "maxLength": 200
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢practice_better_list_invoices(payment_status, invoice_date_after, invoice_date_before, practitioner_ids, record_ids, ...)

List client invoices, newest first: number, date, totals, amount due and paid, payment status, client (id and name) and practitioner. Payment history and line items are not in the list; use practice_better_get_invoice. GET /consultant/payments/invoices.

Eingabe-Schema

{
  "type": "object",
  "properties": {
    "payment_status": {
      "description": "Only invoices with these payment statuses.",
      "minItems": 1,
      "maxItems": 3,
      "type": "array",
      "items": {
        "type": "string",
        "enum": [
          "unpaid",
          "partial",
          "paid"
        ]
      }
    },
    "invoice_date_after": {
      "description": "Invoice date on or after this date-time.",
      "type": "string"
    },
    "invoice_date_before": {
      "description": "Invoice date on or before this date-time.",
      "type": "string"
    },
    "practitioner_ids": {
      "description": "Only invoices of these practitioners.",
      "minItems": 1,
      "maxItems": 50,
      "type": "array",
      "items": {
        "type": "string",
        "minLength": 1,
        "maxLength": 200,
        "description": "Practice Better id."
      }
    },
    "record_ids": {
      "description": "Only invoices of these client records.",
      "minItems": 1,
      "maxItems": 50,
      "type": "array",
      "items": {
        "type": "string",
        "minLength": 1,
        "maxLength": 200,
        "description": "Practice Better id."
      }
    },
    "limit": {
      "description": "Results per page, 1-100 (default 25).",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 100
    },
    "before_id": {
      "description": "Cursor: pass next_page.before_id of the previous reply to get the next page (lists are newest first).",
      "type": "string",
      "minLength": 1,
      "maxLength": 200
    },
    "after_id": {
      "description": "Cursor for lists in ascending order: return items after this id. Normally use before_id.",
      "type": "string",
      "minLength": 1,
      "maxLength": 200
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢practice_better_get_invoice(invoice_id)

One invoice by id with its line items (date, quantity, amount, tax) and totals. Descriptions, payment history and billing contact are not returned. GET /consultant/payments/invoices/{invoiceId}.

Eingabe-Schema

{
  "type": "object",
  "properties": {
    "invoice_id": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200,
      "description": "Invoice id."
    }
  },
  "required": [
    "invoice_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢practice_better_list_forms(team_for, limit, before_id, after_id)

List the form templates of the practice (intake forms, questionnaires, consent forms): id and name only. GET /consultant/forms.

Eingabe-Schema

{
  "type": "object",
  "properties": {
    "team_for": {
      "description": "Whose items: self (default), all (all team members) or other (team members except you).",
      "type": "string",
      "enum": [
        "self",
        "all",
        "other"
      ]
    },
    "limit": {
      "description": "Results per page, 1-100 (default 25).",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 100
    },
    "before_id": {
      "description": "Cursor: pass next_page.before_id of the previous reply to get the next page (lists are newest first).",
      "type": "string",
      "minLength": 1,
      "maxLength": 200
    },
    "after_id": {
      "description": "Cursor for lists in ascending order: return items after this id. Normally use before_id.",
      "type": "string",
      "minLength": 1,
      "maxLength": 200
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢practice_better_list_form_requests(completed, created_after, created_before, practitioner_ids, record_ids, ...)

List forms sent to clients, newest first: which form, which client (id), practitioner, and whether it was started or completed, with dates. The answers are never returned. GET /consultant/formrequests.

Eingabe-Schema

{
  "type": "object",
  "properties": {
    "completed": {
      "description": "true = only completed requests, false = only incomplete ones.",
      "type": "boolean"
    },
    "created_after": {
      "description": "Created on or after this date-time.",
      "type": "string"
    },
    "created_before": {
      "description": "Created on or before this date-time.",
      "type": "string"
    },
    "practitioner_ids": {
      "description": "Only requests of these practitioners.",
      "minItems": 1,
      "maxItems": 50,
      "type": "array",
      "items": {
        "type": "string",
        "minLength": 1,
        "maxLength": 200,
        "description": "Practice Better id."
      }
    },
    "record_ids": {
      "description": "Only requests for these client records.",
      "minItems": 1,
      "maxItems": 50,
      "type": "array",
      "items": {
        "type": "string",
        "minLength": 1,
        "maxLength": 200,
        "description": "Practice Better id."
      }
    },
    "limit": {
      "description": "Results per page, 1-100 (default 25).",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 100
    },
    "before_id": {
      "description": "Cursor: pass next_page.before_id of the previous reply to get the next page (lists are newest first).",
      "type": "string",
      "minLength": 1,
      "maxLength": 200
    },
    "after_id": {
      "description": "Cursor for lists in ascending order: return items after this id. Normally use before_id.",
      "type": "string",
      "minLength": 1,
      "maxLength": 200
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}

Community

Diesen Server bewerten

Nachweis

Aktuelle Beobachtungen

verifiziertVersion nicht aufgezeichnet15 Tools