Read Akute Health patients, appointments, tasks, notes, medications, allergies and observations.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
One appointment by id: times, status, patient, practitioner and appointment type. GET /appointments/{id}.
One appointment by id: times, status, patient, practitioner and appointment type. GET /appointments/{id}.
| Argument | Type | Description |
|---|---|---|
| appointment_id* | string |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"appointment_id"
],
"properties": {
"appointment_id": {
"type": "string",
"pattern": "^[A-Za-z0-9_-]+$",
"maxLength": 64,
"minLength": 1
}
}
}Open appointment slots of one practitioner between two date-times. GET /availability.
| Argument | Type | Description |
|---|---|---|
| user_id* | string | Practitioner (user) id from akutehealth_list_practitioners. |
| end_time* | string | Window end, ISO 8601 with offset. |
| start_time* | string | Window start, ISO 8601 with offset, e.g. 2026-10-12T00:00:00-06:00. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"user_id",
"start_time",
"end_time"
],
"properties": {
"user_id": {
"type": "string",
"pattern": "^[A-Za-z0-9_-]+$",
"maxLength": 64,
"minLength": 1,
"description": "Practitioner (user) id from akutehealth_list_practitioners."
},
"end_time": {
"type": "string",
"description": "Window end, ISO 8601 with offset."
},
"start_time": {
"type": "string",
"description": "Window start, ISO 8601 with offset, e.g. 2026-10-12T00:00:00-06:00."
}
}
}One clinical note by id with all its sections (subjective, objective, assessment, plan ...). GET /notes/{id}.
| Argument | Type | Description |
|---|---|---|
| note_id* | string |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"note_id"
],
"properties": {
"note_id": {
"type": "string",
"pattern": "^[A-Za-z0-9_-]+$",
"maxLength": 64,
"minLength": 1
}
}
}One patient by id: demographics, address, status, provider, custom properties and membership billing state. GET /patients/{id}.
| Argument | Type | Description |
|---|---|---|
| patient_id* | string |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"patient_id"
],
"properties": {
"patient_id": {
"type": "string",
"pattern": "^[A-Za-z0-9_-]+$",
"maxLength": 64,
"minLength": 1
}
}
}One user by id: name, NPI and roles. GET /users/{id}.
| Argument | Type | Description |
|---|---|---|
| user_id* | string |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"user_id"
],
"properties": {
"user_id": {
"type": "string",
"pattern": "^[A-Za-z0-9_-]+$",
"maxLength": 64,
"minLength": 1
}
}
}One task by id: title, description, due date, priority, status, tags, comments and activity. GET /tasks/{id}.
| Argument | Type | Description |
|---|---|---|
| task_id* | string |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"task_id"
],
"properties": {
"task_id": {
"type": "string",
"pattern": "^[A-Za-z0-9_-]+$",
"maxLength": 64,
"minLength": 1
}
}
}A patient's allergies and intolerances: substance, reaction, type, clinical status, onset date. GET /allergies.
| Argument | Type | Description |
|---|---|---|
| patient_id* | string |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"patient_id"
],
"properties": {
"patient_id": {
"type": "string",
"pattern": "^[A-Za-z0-9_-]+$",
"maxLength": 64,
"minLength": 1
}
}
}The practice's appointment types (beta in Akute): name, duration, video flag, who can book, practitioners. GET /appointment_types.
No arguments.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {}
}Appointments by patient and/or date range, practitioner and status. Give a patient_id, or both start_range and end_range (at most 31 days apart). At most 100 are returned; narrow the dates if truncated. Room links are not returned. GET /appointments.
| Argument | Type | Description |
|---|---|---|
| status | string | |
| end_range | string | Latest start: a date (yyyy-mm-dd) or ISO date-time. |
| patient_id | string | |
| start_range | string | Earliest start: a date (yyyy-mm-dd) or ISO date-time. |
| practitioner_user_id | string | Practitioner (user) id from akutehealth_list_practitioners. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"status": {
"enum": [
"booked",
"arrived",
"fulfilled",
"cancelled",
"noshow",
"entered-in-error",
"checked-in"
],
"type": "string"
},
"end_range": {
"type": "string",
"description": "Latest start: a date (yyyy-mm-dd) or ISO date-time."
},
"patient_id": {
"type": "string",
"pattern": "^[A-Za-z0-9_-]+$",
"maxLength": 64,
"minLength": 1
},
"start_range": {
"type": "string",
"description": "Earliest start: a date (yyyy-mm-dd) or ISO date-time."
},
"practitioner_user_id": {
"type": "string",
"pattern": "^[A-Za-z0-9_-]+$",
"maxLength": 64,
"minLength": 1,
"description": "Practitioner (user) id from akutehealth_list_practitioners."
}
}
}A patient's medications: name, strength, directions, quantity, refills, status, diagnoses and prescriber. Optional date window on the start date. At most 100 are returned. GET /medications.
| Argument | Type | Description |
|---|---|---|
| end_date | string | A date, yyyy-mm-dd. |
| patient_id* | string | |
| start_date | string | A date, yyyy-mm-dd. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"patient_id"
],
"properties": {
"end_date": {
"type": "string",
"description": "A date, yyyy-mm-dd."
},
"patient_id": {
"type": "string",
"pattern": "^[A-Za-z0-9_-]+$",
"maxLength": 64,
"minLength": 1
},
"start_date": {
"type": "string",
"description": "A date, yyyy-mm-dd."
}
}
}Clinical notes (encounters) of ONE patient, newest first as Akute returns them: type, service date, status, authors and section text. A patient_id is required and pages are capped at 10. 'entered-in-error' notes appear only when asked for. GET /notes.
| Argument | Type | Description |
|---|---|---|
| limit | integer | Records per page, 1-10 (default 10). |
| offset | integer | Number of records to skip, 0-500 (default 0). Pass the previous reply's next_offset. Narrow the filters instead of paging deeper. |
| status | string | |
| patient_id* | string | |
| service_date_start | string | Only notes from this day on. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"patient_id"
],
"properties": {
"limit": {
"type": "integer",
"maximum": 10,
"description": "Records per page, 1-10 (default 10).",
"exclusiveMinimum": 0
},
"offset": {
"type": "integer",
"maximum": 500,
"minimum": 0,
"description": "Number of records to skip, 0-500 (default 0). Pass the previous reply's next_offset. Narrow the filters instead of paging deeper."
},
"status": {
"enum": [
"preliminary",
"final",
"amended",
"entered-in-error"
],
"type": "string"
},
"patient_id": {
"type": "string",
"pattern": "^[A-Za-z0-9_-]+$",
"maxLength": 64,
"minLength": 1
},
"service_date_start": {
"type": "string",
"description": "Only notes from this day on."
}
}
}A patient's vital signs (default) or laboratory results: name, value, unit, date, LOINC code. At most 100 are returned. GET /observations.
| Argument | Type | Description |
|---|---|---|
| category | string | Default vital-signs. |
| patient_id* | string |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"patient_id"
],
"properties": {
"category": {
"enum": [
"vital-signs",
"laboratory"
],
"type": "string",
"description": "Default vital-signs."
},
"patient_id": {
"type": "string",
"pattern": "^[A-Za-z0-9_-]+$",
"maxLength": 64,
"minLength": 1
}
}
}The practice's users: id, name, NPI and roles (Practitioner, Prescriber, Staff, Admin ...). Date of birth, DEA number, email and licences are not returned. GET /users.
No arguments.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {}
}Tasks filtered by patient, status, owner, priority, tag, due date or archive state; at least one filter except archived is required. Pages are capped at 25. GET /tasks.
| Argument | Type | Description |
|---|---|---|
| tags | array | |
| limit | integer | Records per page, 1-25 (default 25). |
| offset | integer | Number of records to skip, 0-500 (default 0). Pass the previous reply's next_offset. Narrow the filters instead of paging deeper. |
| status | array | Statuses, e.g. not-started, in-progress. |
| archived | boolean | |
| owner_id | string | User id of the task owner. |
| priority | string | For example p1. |
| patient_id | string | |
| due_date_end_range | string | A date, yyyy-mm-dd. |
| due_date_start_range |
Search patients by name, email, phone (with phone_type), date of birth or external id, optionally narrowed by sex and status. At least one identifying filter is required (no bulk listing); pages are capped at 25 and paging stops at offset 500. Returns demographics, address, status, provider and membership billing state. Government and insurance identifiers are never returned. GET /patients.
| Argument | Type | Description |
|---|---|---|
| sex | string | For example female or male. |
| string | ||
| limit | integer | Records per page, 1-25 (default 25). |
| phone | string | Primary phone number, digits only. Needs phone_type. |
| offset | integer | Number of records to skip, 0-500 (default 0). Pass the previous reply's next_offset. Narrow the filters instead of paging deeper. |
| status | string | Patient status, for example active. |
| last_name | string | |
| first_name | string | |
| string |
| A date, yyyy-mm-dd. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"tags": {
"type": "array",
"items": {
"type": "string",
"pattern": "^[A-Za-z0-9_-]+$",
"maxLength": 40,
"minLength": 1
},
"maxItems": 6,
"minItems": 1
},
"limit": {
"type": "integer",
"maximum": 25,
"description": "Records per page, 1-25 (default 25).",
"exclusiveMinimum": 0
},
"offset": {
"type": "integer",
"maximum": 500,
"minimum": 0,
"description": "Number of records to skip, 0-500 (default 0). Pass the previous reply's next_offset. Narrow the filters instead of paging deeper."
},
"status": {
"type": "array",
"items": {
"type": "string",
"pattern": "^[A-Za-z0-9_-]+$",
"maxLength": 40,
"minLength": 1
},
"maxItems": 6,
"minItems": 1,
"description": "Statuses, e.g. not-started, in-progress."
},
"archived": {
"type": "boolean"
},
"owner_id": {
"type": "string",
"pattern": "^[A-Za-z0-9_-]+$",
"maxLength": 64,
"minLength": 1,
"description": "User id of the task owner."
},
"priority": {
"type": "string",
"pattern": "^[A-Za-z0-9_-]+$",
"maxLength": 40,
"minLength": 1,
"description": "For example p1."
},
"patient_id": {
"type": "string",
"pattern": "^[A-Za-z0-9_-]+$",
"maxLength": 64,
"minLength": 1
},
"due_date_end_range": {
"type": "string",
"description": "A date, yyyy-mm-dd."
},
"due_date_start_range": {
"type": "string",
"description": "A date, yyyy-mm-dd."
}
}
}| phone_type |
| string |
| Type of the phone number: mobile, home or work. Required with phone (Akute ignores the number without it). |
| external_id | string | Your own id for the patient. |
| date_of_birth | string | A date, yyyy-mm-dd. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"sex": {
"type": "string",
"pattern": "^[A-Za-z-]{1,20}$",
"description": "For example female or male."
},
"email": {
"type": "string",
"maxLength": 254,
"minLength": 3
},
"limit": {
"type": "integer",
"maximum": 25,
"description": "Records per page, 1-25 (default 25).",
"exclusiveMinimum": 0
},
"phone": {
"type": "string",
"pattern": "^\\d{7,15}$",
"description": "Primary phone number, digits only. Needs phone_type."
},
"offset": {
"type": "integer",
"maximum": 500,
"minimum": 0,
"description": "Number of records to skip, 0-500 (default 0). Pass the previous reply's next_offset. Narrow the filters instead of paging deeper."
},
"status": {
"type": "string",
"pattern": "^[A-Za-z_-]{1,30}$",
"description": "Patient status, for example active."
},
"last_name": {
"type": "string",
"maxLength": 100,
"minLength": 1
},
"first_name": {
"type": "string",
"maxLength": 100,
"minLength": 1
},
"phone_type": {
"enum": [
"mobile",
"home",
"work"
],
"type": "string",
"description": "Type of the phone number: mobile, home or work. Required with phone (Akute ignores the number without it)."
},
"external_id": {
"type": "string",
"maxLength": 100,
"minLength": 1,
"description": "Your own id for the patient."
},
"date_of_birth": {
"type": "string",
"description": "A date, yyyy-mm-dd."
}
}
}