Practice Better MCP by usefulapi

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

사용해야 할까요

품질 및 안전성

A
설명 품질
100%
스키마 완전성
85%
이름 품질
76%
오염 위험
100%
권한 일치
100%
프로토콜 준수
100%

발견 사항 (3)

  • LOWTool 'practice_better_list_practitioners' name length outside 3-30 rangepractice_better_list_practitioners에서
  • LOWTool 'practice_better_get_availability' name length outside 3-30 rangepractice_better_get_availability에서
  • LOWTool 'practice_better_list_form_requests' name length outside 3-30 rangepractice_better_list_form_requests에서

도구 정의와 프로토콜 준수에 대한 자동 분석을 기반으로 합니다.

컨텍스트 비용

~3,849토큰 (도구 정의)
~2.0 KB일반적인 응답 크기
상당한 주의 영향 (128k 컨텍스트의 3.01%)

이는 서버의 도구가 모델의 컨텍스트에 로드될 때마다 소비되는 대략적인 토큰 수입니다. 수치가 높을수록 다른 작업에 사용할 수 있는 주의가 줄어듭니다.

설치

원클릭 설치

`claude_desktop_config.json` 파일에 다음을 추가하세요:

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

원격 엔드포인트

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

할 수 있는 일

도구 목록

도구 (15)

🟢 읽기 전용🟡 쓰기🔴 삭제⚪ 알 수 없음
🟢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.

입력 스키마

{
  "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.

입력 스키마

{
  "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.

입력 스키마

{
  "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.

입력 스키마

{
  "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}.

입력 스키마

{
  "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.

입력 스키마

{
  "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}.

입력 스키마

{
  "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.

입력 스키마

{
  "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.

입력 스키마

{
  "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.

입력 스키마

{
  "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.

입력 스키마

{
  "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.

입력 스키마

{
  "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}.

입력 스키마

{
  "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.

입력 스키마

{
  "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.

입력 스키마

{
  "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"
}

커뮤니티

이 서버 평가하기

증거

최근 관측

검증됨버전이 기록되지 않음도구 15개