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 range在 practice_better_list_practitioners 中
  • LOWTool 'practice_better_get_availability' name length outside 3-30 range在 practice_better_get_availability 中
  • LOWTool 'practice_better_list_form_requests' name length outside 3-30 range在 practice_better_list_form_requests 中

根據工具定義與協定合規性的自動化分析。

上下文成本

~3,849Token(工具定義)
~2.0 KB典型回應大小
顯著的注意力影響(128k 上下文的 3.01%)

這是每次將伺服器的工具載入模型上下文時所消耗的約略 token 數量。數量越高,可用於其他工作的注意力就越少。

安裝

一鍵安裝

將以下內容加入你的 `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 個工具