Healthie MCP by usefulapi
Hosted MCP server for the Healthie EHR & telehealth API: patients, appointments, charting, tasks.
Should I use this
Quality & Safety
Findings (2)
- LOWin healthie_list_appointment_types
- LOWin healthie_list_form_answer_groups
Based on automated analysis of tool definitions and protocol compliance.
Context Cost
This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.
Install
One-Click Install
Add this to your `claude_desktop_config.json` file:
{
"mcpServers": {
"healthie": {
"url": "https://healthie.usefulapi.io/mcp"
}
}
}Remote endpoints
https://healthie.usefulapi.io/mcpstreamable-httpWhat it can do
Tool inventory
Tools (16)
🟢healthie_current_user
Fetch the authenticated Healthie account (the provider/user that owns the API key). Good first call to verify auth. Read-only. GraphQL: query currentUser.
Input Schema
{
"type": "object",
"properties": {},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢healthie_get_organization
Fetch the current organization / practice (name, NPI, contact, user counts). Read-only. GraphQL: query organization.
Input Schema
{
"type": "object",
"properties": {},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢healthie_list_patients(keywords, offset, page_size, active_status)
List patients/clients, optionally filtered by keyword search or active status. Read-only. GraphQL: query users(keywords, offset, page_size, should_paginate, active_status).
Input Schema
{
"type": "object",
"properties": {
"keywords": {
"description": "Free-text search over name/email.",
"type": "string"
},
"offset": {
"description": "Pagination offset. Default 0.",
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
},
"page_size": {
"description": "Results per page (max 100). Default 25.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 100
},
"active_status": {
"description": "Filter by status: \"active\" or \"archived\".",
"type": "string"
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢healthie_get_user(id)
Fetch a single user (patient or provider) by id. Read-only. GraphQL: query user(id).
Input Schema
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "The user id."
}
},
"required": [
"id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢healthie_list_appointments(user_id, provider_id, filter, startDate, endDate, ...)
List appointments, optionally filtered by patient, provider, date range, time-filter or status. Read-only. GraphQL: query appointments(user_id, provider_id, filter, startDate, endDate, filter_by_appointment_status).
Input Schema
{
"type": "object",
"properties": {
"user_id": {
"description": "Filter to appointments for this patient/client id.",
"type": "string"
},
"provider_id": {
"description": "Filter to appointments for this provider id.",
"type": "string"
},
"filter": {
"description": "Time filter: \"future\" (default), \"past\", \"ended\", \"didnt-occur\".",
"type": "string"
},
"startDate": {
"description": "Start date (YYYY-MM-DD) to bound results.",
"type": "string"
},
"endDate": {
"description": "End date (YYYY-MM-DD) to bound results.",
"type": "string"
},
"filter_by_appointment_status": {
"description": "Filter by appointment status label.",
"type": "string"
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢healthie_get_appointment(id)
Fetch a single appointment by id. Read-only. GraphQL: query appointment(id).
Input Schema
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "The appointment id."
}
},
"required": [
"id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢healthie_list_appointment_types(keywords, offset, page_size)
List the practice's appointment types (services), optionally keyword-filtered. Read-only. GraphQL: query appointmentTypes(keywords, offset, page_size, should_paginate).
Input Schema
{
"type": "object",
"properties": {
"keywords": {
"description": "Free-text search over appointment type names.",
"type": "string"
},
"offset": {
"description": "Pagination offset. Default 0.",
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
},
"page_size": {
"description": "Results per page. Default 25.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢healthie_list_forms(keywords, category, offset, page_size)
List custom module form templates (charting notes, intake forms), optionally by keyword or category. Read-only. GraphQL: query customModuleForms(keywords, category, offset, page_size, should_paginate).
Input Schema
{
"type": "object",
"properties": {
"keywords": {
"description": "Free-text search over form names.",
"type": "string"
},
"category": {
"description": "Filter by form category.",
"type": "string"
},
"offset": {
"description": "Pagination offset. Default 0.",
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
},
"page_size": {
"description": "Results per page. Default 25.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢healthie_list_form_answer_groups(user_id, custom_module_form_id, offset)
List completed form submissions (charting notes / filled intake forms), optionally scoped to a patient or a form template. Read-only. GraphQL: query formAnswerGroups(user_id, custom_module_form_id, should_paginate, offset).
Input Schema
{
"type": "object",
"properties": {
"user_id": {
"description": "Filter to submissions for this patient id.",
"type": "string"
},
"custom_module_form_id": {
"description": "Filter to submissions of this form template id.",
"type": "string"
},
"offset": {
"description": "Pagination offset. Default 0.",
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢healthie_list_documents(viewable_user_id, keywords, offset, page_size)
List documents, optionally scoped to a patient (viewable_user_id) or by keyword. Read-only. GraphQL: query documents(viewable_user_id, keywords, offset, page_size, should_paginate).
Input Schema
{
"type": "object",
"properties": {
"viewable_user_id": {
"description": "Patient id whose documents to list.",
"type": "string"
},
"keywords": {
"description": "Free-text search over document names.",
"type": "string"
},
"offset": {
"description": "Pagination offset. Default 0.",
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
},
"page_size": {
"description": "Results per page. Default 25.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢healthie_list_tasks(client_id, completed_status, offset, per_page)
List tasks, optionally scoped to a client or filtered by completion status. Read-only. GraphQL: query tasks(client_id, completed_status, offset, per_page).
Input Schema
{
"type": "object",
"properties": {
"client_id": {
"description": "Filter to tasks about this client id.",
"type": "string"
},
"completed_status": {
"description": "Completion filter, e.g. \"complete\" or \"incomplete\".",
"type": "string"
},
"offset": {
"description": "Pagination offset. Default 0.",
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
},
"per_page": {
"description": "Results per page. Default 25.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢healthie_list_goals(user_id, offset, per_page)
List goals, optionally scoped to a patient. Read-only. GraphQL: query goals(user_id, offset, per_page).
Input Schema
{
"type": "object",
"properties": {
"user_id": {
"description": "Filter to goals for this patient id.",
"type": "string"
},
"offset": {
"description": "Pagination offset. Default 0.",
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
},
"per_page": {
"description": "Results per page. Default 25.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢healthie_list_metric_entries(client_id, category, offset, page_size)
List tracked metric entries (weight, blood pressure, etc.), optionally scoped to a client or a category. Read-only. GraphQL: query entries(client_id, category, offset, page_size).
Input Schema
{
"type": "object",
"properties": {
"client_id": {
"description": "Filter to entries for this client id.",
"type": "string"
},
"category": {
"description": "Entry category, e.g. \"MetricEntry\", \"Weight\".",
"type": "string"
},
"offset": {
"description": "Pagination offset. Default 0.",
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
},
"page_size": {
"description": "Results per page (max 500). Default 25.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 500
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢healthie_list_conversations(user_id)
List messaging conversations, optionally between the current user and a given user. Read-only. GraphQL: query conversations(user_id).
Input Schema
{
"type": "object",
"properties": {
"user_id": {
"description": "Get conversations between the current user and this user id.",
"type": "string"
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🔴healthie_create_task(content, user_id, due_date, priority, created_by_id)
Creates a task in Healthie (additive). Requires content (the task text); optionally attach it to a client (user_id), set a due_date, priority, or created_by_id. GraphQL: mutation createTask(input: createTaskInput).
Input Schema
{
"type": "object",
"properties": {
"content": {
"type": "string",
"minLength": 1,
"description": "The task text/description."
},
"user_id": {
"description": "The client/user the task is about.",
"type": "string"
},
"due_date": {
"description": "Due date (YYYY-MM-DD).",
"type": "string"
},
"priority": {
"description": "Priority (integer).",
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"created_by_id": {
"description": "Id of the user creating the task.",
"type": "string"
}
},
"required": [
"content"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🔴healthie_create_note(content, user_id, org_chat)
Creates a note/chat entry in Healthie (additive). Requires content (the note text); optionally attach it to a client (user_id) or mark it as an org chat. GraphQL: mutation createNote(input: createNoteInput).
Input Schema
{
"type": "object",
"properties": {
"content": {
"type": "string",
"minLength": 1,
"description": "The note text."
},
"user_id": {
"description": "The client/user the note is about.",
"type": "string"
},
"org_chat": {
"description": "True if created in the organization chat context.",
"type": "boolean"
}
},
"required": [
"content"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}Community
Evidence