TherapyNotes client portal: appointments, documents, billing, messages; confirm-gated sends, uploads
Connect Runs on your machine
claude mcp add therapyportal-mcp -e THERAPYPORTAL_PRACTICE=<THERAPYPORTAL_PRACTICE> -e THERAPYPORTAL_EMAIL=<THERAPYPORTAL_EMAIL> -e THERAPYPORTAL_PASSWORD=<THERAPYPORTAL_PASSWORD> -e THERAPYPORTAL_DOB=<THERAPYPORTAL_DOB> -e THERAPYPORTAL_TRANSPORT=<THERAPYPORTAL_TRANSPORT> -e THERAPYPORTAL_WS_PORT=<THERAPYPORTAL_WS_PORT> -e THERAPYPORTAL_OUTPUT_DIR=<THERAPYPORTAL_OUTPUT_DIR> -e THERAPYPORTAL_INLINE_DOWNLOADS=<THERAPYPORTAL_INLINE_DOWNLOADS> -e THERAPYPORTAL_UPLOAD_DIR=<THERAPYPORTAL_UPLOAD_DIR> -e MCP_CONFIRM_MODE=<MCP_CONFIRM_MODE> -e MCP_CONFIRM_ELICITATION=<MCP_CONFIRM_ELICITATION> -e FETCHPROXY_WS_HOST=<FETCHPROXY_WS_HOST> -e FETCHPROXY_IDENTITY_DIR=<FETCHPROXY_IDENTITY_DIR> -- npx -y @chrischall/[email protected]
{
"mcpServers": {
"therapyportal-mcp": {
"command": "npx",
"args": [
"-y",
"@chrischall/[email protected]"
],
"env": {
"THERAPYPORTAL_PRACTICE": "<THERAPYPORTAL_PRACTICE>",
"THERAPYPORTAL_EMAIL": "<THERAPYPORTAL_EMAIL>",
"THERAPYPORTAL_PASSWORD": "<THERAPYPORTAL_PASSWORD>",
"THERAPYPORTAL_DOB": "<THERAPYPORTAL_DOB>",
"THERAPYPORTAL_TRANSPORT": "<THERAPYPORTAL_TRANSPORT>",
"THERAPYPORTAL_WS_PORT": "<THERAPYPORTAL_WS_PORT>",
"THERAPYPORTAL_OUTPUT_DIR": "<THERAPYPORTAL_OUTPUT_DIR>",
"THERAPYPORTAL_INLINE_DOWNLOADS": "<THERAPYPORTAL_INLINE_DOWNLOADS>",
"THERAPYPORTAL_UPLOAD_DIR": "<THERAPYPORTAL_UPLOAD_DIR>",
"MCP_CONFIRM_MODE": "<MCP_CONFIRM_MODE>",
"MCP_CONFIRM_ELICITATION": "<MCP_CONFIRM_ELICITATION>",
"FETCHPROXY_WS_HOST": "<FETCHPROXY_WS_HOST>",
"FETCHPROXY_IDENTITY_DIR": "<FETCHPROXY_IDENTITY_DIR>"
}
}
}
}
{
"mcpServers": {
"therapyportal-mcp": {
"command": "npx",
"args": [
"-y",
"@chrischall/[email protected]"
],
"env": {
"THERAPYPORTAL_PRACTICE": "<THERAPYPORTAL_PRACTICE>",
"THERAPYPORTAL_EMAIL": "<THERAPYPORTAL_EMAIL>",
"THERAPYPORTAL_PASSWORD": "<THERAPYPORTAL_PASSWORD>",
"THERAPYPORTAL_DOB": "<THERAPYPORTAL_DOB>",
"THERAPYPORTAL_TRANSPORT": "<THERAPYPORTAL_TRANSPORT>",
"THERAPYPORTAL_WS_PORT": "<THERAPYPORTAL_WS_PORT>",
"THERAPYPORTAL_OUTPUT_DIR": "<THERAPYPORTAL_OUTPUT_DIR>",
"THERAPYPORTAL_INLINE_DOWNLOADS": "<THERAPYPORTAL_INLINE_DOWNLOADS>",
"THERAPYPORTAL_UPLOAD_DIR": "<THERAPYPORTAL_UPLOAD_DIR>",
"MCP_CONFIRM_MODE": "<MCP_CONFIRM_MODE>",
"MCP_CONFIRM_ELICITATION": "<MCP_CONFIRM_ELICITATION>",
"FETCHPROXY_WS_HOST": "<FETCHPROXY_WS_HOST>",
"FETCHPROXY_IDENTITY_DIR": "<FETCHPROXY_IDENTITY_DIR>"
}
}
}
}
{
"servers": {
"therapyportal-mcp": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"@chrischall/[email protected]"
],
"env": {
"THERAPYPORTAL_PRACTICE": "<THERAPYPORTAL_PRACTICE>",
"THERAPYPORTAL_EMAIL": "<THERAPYPORTAL_EMAIL>",
"THERAPYPORTAL_PASSWORD": "<THERAPYPORTAL_PASSWORD>",
"THERAPYPORTAL_DOB": "<THERAPYPORTAL_DOB>",
"THERAPYPORTAL_TRANSPORT": "<THERAPYPORTAL_TRANSPORT>",
"THERAPYPORTAL_WS_PORT": "<THERAPYPORTAL_WS_PORT>",
"THERAPYPORTAL_OUTPUT_DIR": "<THERAPYPORTAL_OUTPUT_DIR>",
"THERAPYPORTAL_INLINE_DOWNLOADS": "<THERAPYPORTAL_INLINE_DOWNLOADS>",
"THERAPYPORTAL_UPLOAD_DIR": "<THERAPYPORTAL_UPLOAD_DIR>",
"MCP_CONFIRM_MODE": "<MCP_CONFIRM_MODE>",
"MCP_CONFIRM_ELICITATION": "<MCP_CONFIRM_ELICITATION>",
"FETCHPROXY_WS_HOST": "<FETCHPROXY_WS_HOST>",
"FETCHPROXY_IDENTITY_DIR": "<FETCHPROXY_IDENTITY_DIR>"
}
}
}
}
Replace the values in angle brackets with your own. Keys stay on your machine; we never see them.
Tools
This server runs locally, so its tools are listed by your MCP client once it starts.
Environment variables
| Name | Description |
|---|---|
THERAPYPORTAL_PRACTICERequired | Your practice's portal code: the part after /p/ in its TherapyPortal URL (www.therapyportal.com/p/<code>/). |
THERAPYPORTAL_EMAILOptional | The email you sign in to TherapyPortal with. Set with the password to sign in server-side; leave both empty to relay through your signed-in browser tab. |
THERAPYPORTAL_PASSWORDOptional, secret | Your TherapyPortal password. A rejected sign-in is never retried automatically. |
THERAPYPORTAL_DOBOptional, secret | Only if the portal asks for a date of birth at sign-in: that date, as MM/DD/YYYY. Tried once; never retried, because the portal limits attempts. |
THERAPYPORTAL_TRANSPORTOptional | server or fetchproxy. Default: server when email and password are both set, otherwise fetchproxy. |
THERAPYPORTAL_WS_PORTOptional | fetchproxy concentrator port (fetchproxy transport only, default 37149). The whole fleet shares this one port; override only when hosting. |
THERAPYPORTAL_OUTPUT_DIROptional | Where downloaded files are written on the server transport (a path-delimiter list; ~ expands). Default ~/Downloads and ~/Documents. A per-call dest must resolve inside one of these. |
THERAPYPORTAL_INLINE_DOWNLOADSOptional | true returns downloaded bytes inline (base64) instead of writing to disk, for a hosted runner whose disk you cannot reach. Default false. |
THERAPYPORTAL_UPLOAD_DIROptional | Folders an upload's file_path must be inside (a path-delimiter list; ~ expands). Default ~/Downloads, ~/Documents and ~/Desktop. Local installs only: a hosted server refuses file_path and takes uploads by upload slot or inline base64. |
MCP_CONFIRM_MODEOptional | Confirm-gate mode for every write (secure messages, document uploads). ask-user (default) returns a preview + confirmToken and needs a second call with that token; auto lets a capable host confirm in one step; an unrecognised value fails closed (refuse). |
MCP_CONFIRM_ELICITATIONOptional | on (default) lets the host confirm a write interactively; off forces the confirmToken round-trip. |
FETCHPROXY_WS_HOSTOptional | Bind interface for the fetchproxy concentrator, a literal IP only (default 127.0.0.1). Keep on loopback; it exists for hosted deployments that run each MCP in its own network namespace. |
FETCHPROXY_IDENTITY_DIROptional | Absolute path where the fetchproxy long-term identity keypair is stored (default ~/.fetchproxy/identity/). |
Details
| Package | @chrischall/[email protected] (NPM, stdio) |
| First published | 11 Nov 2026 |
| Last updated | 11 Nov 2026 |
| Registry name | io.github.chrischall/therapyportal-mcp |
More communication servers See all
Listing data from the official MCP registry. Status and tools from NestDaddy's daily check. Browse all MCP servers.
