simplepractice-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| SIMPLEPRACTICE_PRACTICE | Yes | Portal slug or host (required) | |
| SIMPLEPRACTICE_SESSION_FILE | No | Session path (default ~/.simplepractice-mcp/session.json) | ~/.simplepractice-mcp/session.json |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| simplepractice_session_statusA | Report whether this server holds a Client Portal session, for which practice, and how that practice was determined (from a sign-in link, from SIMPLEPRACTICE_PRACTICE, or remembered from the stored session). Reads local state only — makes no network call. |
| simplepractice_request_sign_in_linkA | Ask SimplePractice to email a sign-in link to a Client Portal address. The portal has no password — this is how you sign in. Sends a real email and is rate-limited per email address AND per IP, so it asks the user to confirm first: a confirmation prompt where the client supports one; otherwise the first call returns a preview and a confirmToken, and only a repeat call with that token proceeds (see MCP_CONFIRM_MODE). A success does not prove the address has an account: the API answers identically for unknown addresses by design. |
| simplepractice_verify_sign_in_tokenA | Exchange an emailed sign-in link (or the token in it) for a Client Portal session. Accepts the whole link or just the part after the "#". Prefer passing the WHOLE link: its address names the practice, so no practice has to be configured, and this server remembers it afterwards. Tokens are single-use and last 24 hours. |
| simplepractice_verify_sign_in_pinA | Exchange a 6-digit Client Portal sign-in PIN for a session, for practices that email a code instead of a link. Single-use. |
| simplepractice_sign_outA | Discard the stored Client Portal session from local state. |
| simplepractice_get_accountA | The practice, the signed-in client, and every client this login can see. One portal login is a "client access" and may cover more than one client — a parent seeing two children, say — so clients is always a list. |
| simplepractice_list_appointmentsA | Appointments from the Client Portal. status "scheduled" returns confirmed/upcoming ones; "requested" returns those still awaiting the practice's confirmation. Pages by number. |
| simplepractice_list_billing_itemsA | Invoices, statements, superbills, receipts, or account history from the Client Portal. An empty list is a real answer — many practices bill entirely outside the portal. Pages by cursor: pass the returned nextCursor as "before". |
| simplepractice_get_billing_overviewA | Balance due and per-category counts for the Client Portal account. Cheaper than paging the billing collections just to find out whether anything is there. |
| simplepractice_list_payment_methodsA | Payment methods saved to the Client Portal — brand, last four digits, and expiry. No full card numbers. |
| simplepractice_list_document_requestsA | Paperwork the practice has sent — consents, questionnaires, contact and insurance forms, Good Faith Estimates, shared files. Use outstandingOnly to see just what still needs the client's attention. |
| simplepractice_get_document_requestA | One document request in full, including its body or its questions and the answers already given. |
| simplepractice_list_documentsB | Files the practice has shared through the Client Portal. |
| simplepractice_list_announcementsB | Announcements the practice has posted to the Client Portal. readAt is null on unread ones. |
| simplepractice_healthcheckA | Resolves the credential the way real tools do, then makes one authenticated request to clientsecure.me. Reports which source supplied the credential, whether clientsecure.me accepted it, the round-trip time, and a plain-English hint distinguishing 'no credential' from 'credential rejected' from 'a clientsecure.me-side problem'. Read-only; never returns the credential itself. Call this when a real tool fails and you want to know which hop broke. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 15 tools
Most tools target clearly distinct resources and actions, but list_documents vs list_document_requests could be confused by name, and healthcheck vs session_status both feel like status checks. Descriptions are strong enough to resolve these in practice.
All tools share the simplepractice_ prefix and mostly follow a verb_noun pattern like list_*, get_*, and verify_sign_in_*. healthcheck and session_status break the pattern slightly, but overall naming is readable and predictable.
15 tools is at the upper edge of the ideal range, but each tool covers a meaningful portal area: authentication, account, appointments, billing, documents, document requests, and announcements. There is no obvious redundancy.
The toolset provides solid read-only coverage of Client Portal workflows, including auth lifecycle, account details, and list/get operations across major data categories. It lacks write/submit actions like completing a document request or paying an invoice, and some lists have no detail getter, but those are workable gaps rather than fatal ones.