Akute Health MCP by usefulapi
Read Akute Health patients, appointments, tasks, notes, medications, allergies and observations.
Should I use this
Quality & Safety
Findings (1)
- LOWin akutehealth_list_appointment_types
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": {
"akute-health": {
"url": "https://akute-health.usefulapi.io/mcp"
}
}
}Remote endpoints
https://akute-health.usefulapi.io/mcpstreamable-httpWhat it can do
Tool inventory
Tools (15)
🟢akutehealth_search_patients(first_name, last_name, email, phone, phone_type, ...)
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.
Input Schema
{
"type": "object",
"properties": {
"first_name": {
"type": "string",
"minLength": 1,
"maxLength": 100
},
"last_name": {
"type": "string",
"minLength": 1,
"maxLength": 100
},
"email": {
"type": "string",
"minLength": 3,
"maxLength": 254
},
"phone": {
"description": "Primary phone number, digits only. Needs phone_type.",
"type": "string",
"pattern": "^\\d{7,15}$"
},
"phone_type": {
"description": "Type of the phone number: mobile, home or work. Required with phone (Akute ignores the number without it).",
"type": "string",
"enum": [
"mobile",
"home",
"work"
]
},
"date_of_birth": {
"type": "string",
"description": "A date, yyyy-mm-dd."
},
"sex": {
"description": "For example female or male.",
"type": "string",
"pattern": "^[A-Za-z-]{1,20}$"
},
"status": {
"description": "Patient status, for example active.",
"type": "string",
"pattern": "^[A-Za-z_-]{1,30}$"
},
"external_id": {
"description": "Your own id for the patient.",
"type": "string",
"minLength": 1,
"maxLength": 100
},
"limit": {
"description": "Records per page, 1-25 (default 25).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 25
},
"offset": {
"description": "Number of records to skip, 0-500 (default 0). Pass the previous reply's next_offset. Narrow the filters instead of paging deeper.",
"type": "integer",
"minimum": 0,
"maximum": 500
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢akutehealth_get_patient(patient_id)
One patient by id: demographics, address, status, provider, custom properties and membership billing state. GET /patients/{id}.
Input Schema
{
"type": "object",
"properties": {
"patient_id": {
"type": "string",
"minLength": 1,
"maxLength": 64,
"pattern": "^[A-Za-z0-9_-]+$"
}
},
"required": [
"patient_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢akutehealth_list_appointments(patient_id, practitioner_user_id, start_range, end_range, status)
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.
Input Schema
{
"type": "object",
"properties": {
"patient_id": {
"type": "string",
"minLength": 1,
"maxLength": 64,
"pattern": "^[A-Za-z0-9_-]+$"
},
"practitioner_user_id": {
"description": "Practitioner (user) id from akutehealth_list_practitioners.",
"type": "string",
"minLength": 1,
"maxLength": 64,
"pattern": "^[A-Za-z0-9_-]+$"
},
"start_range": {
"description": "Earliest start: a date (yyyy-mm-dd) or ISO date-time.",
"type": "string"
},
"end_range": {
"description": "Latest start: a date (yyyy-mm-dd) or ISO date-time.",
"type": "string"
},
"status": {
"type": "string",
"enum": [
"booked",
"arrived",
"fulfilled",
"cancelled",
"noshow",
"entered-in-error",
"checked-in"
]
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢akutehealth_get_appointment(appointment_id)
One appointment by id: times, status, patient, practitioner and appointment type. GET /appointments/{id}.
Input Schema
{
"type": "object",
"properties": {
"appointment_id": {
"type": "string",
"minLength": 1,
"maxLength": 64,
"pattern": "^[A-Za-z0-9_-]+$"
}
},
"required": [
"appointment_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢akutehealth_list_appointment_types
The practice's appointment types (beta in Akute): name, duration, video flag, who can book, practitioners. GET /appointment_types.
Input Schema
{
"type": "object",
"properties": {},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢akutehealth_get_availability(user_id, start_time, end_time)
Open appointment slots of one practitioner between two date-times. GET /availability.
Input Schema
{
"type": "object",
"properties": {
"user_id": {
"type": "string",
"minLength": 1,
"maxLength": 64,
"pattern": "^[A-Za-z0-9_-]+$",
"description": "Practitioner (user) id from akutehealth_list_practitioners."
},
"start_time": {
"type": "string",
"description": "Window start, ISO 8601 with offset, e.g. 2026-10-12T00:00:00-06:00."
},
"end_time": {
"type": "string",
"description": "Window end, ISO 8601 with offset."
}
},
"required": [
"user_id",
"start_time",
"end_time"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢akutehealth_list_tasks(patient_id, status, owner_id, priority, tags, ...)
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.
Input Schema
{
"type": "object",
"properties": {
"patient_id": {
"type": "string",
"minLength": 1,
"maxLength": 64,
"pattern": "^[A-Za-z0-9_-]+$"
},
"status": {
"description": "Statuses, e.g. not-started, in-progress.",
"maxItems": 6,
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 40,
"pattern": "^[A-Za-z0-9_-]+$"
}
},
"owner_id": {
"description": "User id of the task owner.",
"type": "string",
"minLength": 1,
"maxLength": 64,
"pattern": "^[A-Za-z0-9_-]+$"
},
"priority": {
"description": "For example p1.",
"type": "string",
"minLength": 1,
"maxLength": 40,
"pattern": "^[A-Za-z0-9_-]+$"
},
"tags": {
"maxItems": 6,
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 40,
"pattern": "^[A-Za-z0-9_-]+$"
}
},
"due_date_start_range": {
"type": "string",
"description": "A date, yyyy-mm-dd."
},
"due_date_end_range": {
"type": "string",
"description": "A date, yyyy-mm-dd."
},
"archived": {
"type": "boolean"
},
"limit": {
"description": "Records per page, 1-25 (default 25).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 25
},
"offset": {
"description": "Number of records to skip, 0-500 (default 0). Pass the previous reply's next_offset. Narrow the filters instead of paging deeper.",
"type": "integer",
"minimum": 0,
"maximum": 500
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢akutehealth_get_task(task_id)
One task by id: title, description, due date, priority, status, tags, comments and activity. GET /tasks/{id}.
Input Schema
{
"type": "object",
"properties": {
"task_id": {
"type": "string",
"minLength": 1,
"maxLength": 64,
"pattern": "^[A-Za-z0-9_-]+$"
}
},
"required": [
"task_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢akutehealth_list_notes(patient_id, status, service_date_start, limit, offset)
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.
Input Schema
{
"type": "object",
"properties": {
"patient_id": {
"type": "string",
"minLength": 1,
"maxLength": 64,
"pattern": "^[A-Za-z0-9_-]+$"
},
"status": {
"type": "string",
"enum": [
"preliminary",
"final",
"amended",
"entered-in-error"
]
},
"service_date_start": {
"description": "Only notes from this day on.",
"type": "string"
},
"limit": {
"description": "Records per page, 1-10 (default 10).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 10
},
"offset": {
"description": "Number of records to skip, 0-500 (default 0). Pass the previous reply's next_offset. Narrow the filters instead of paging deeper.",
"type": "integer",
"minimum": 0,
"maximum": 500
}
},
"required": [
"patient_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢akutehealth_get_note(note_id)
One clinical note by id with all its sections (subjective, objective, assessment, plan ...). GET /notes/{id}.
Input Schema
{
"type": "object",
"properties": {
"note_id": {
"type": "string",
"minLength": 1,
"maxLength": 64,
"pattern": "^[A-Za-z0-9_-]+$"
}
},
"required": [
"note_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢akutehealth_list_medications(patient_id, start_date, end_date)
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.
Input Schema
{
"type": "object",
"properties": {
"patient_id": {
"type": "string",
"minLength": 1,
"maxLength": 64,
"pattern": "^[A-Za-z0-9_-]+$"
},
"start_date": {
"type": "string",
"description": "A date, yyyy-mm-dd."
},
"end_date": {
"type": "string",
"description": "A date, yyyy-mm-dd."
}
},
"required": [
"patient_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢akutehealth_list_allergies(patient_id)
A patient's allergies and intolerances: substance, reaction, type, clinical status, onset date. GET /allergies.
Input Schema
{
"type": "object",
"properties": {
"patient_id": {
"type": "string",
"minLength": 1,
"maxLength": 64,
"pattern": "^[A-Za-z0-9_-]+$"
}
},
"required": [
"patient_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢akutehealth_list_observations(patient_id, category)
A patient's vital signs (default) or laboratory results: name, value, unit, date, LOINC code. At most 100 are returned. GET /observations.
Input Schema
{
"type": "object",
"properties": {
"patient_id": {
"type": "string",
"minLength": 1,
"maxLength": 64,
"pattern": "^[A-Za-z0-9_-]+$"
},
"category": {
"description": "Default vital-signs.",
"type": "string",
"enum": [
"vital-signs",
"laboratory"
]
}
},
"required": [
"patient_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢akutehealth_list_practitioners
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.
Input Schema
{
"type": "object",
"properties": {},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢akutehealth_get_practitioner(user_id)
One user by id: name, NPI and roles. GET /users/{id}.
Input Schema
{
"type": "object",
"properties": {
"user_id": {
"type": "string",
"minLength": 1,
"maxLength": 64,
"pattern": "^[A-Za-z0-9_-]+$"
}
},
"required": [
"user_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}Community
Evidence