Read and write DrChrono patients, appointments, offices and clinical notes.
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.
DESTRUCTIVE: creates a new appointment on the schedule. Requires doctor, patient, office, scheduled_time (ISO datetime), and duration (minutes). DrChrono API: POST /appointments.
Doctor id (required).
Office id (required).
Patient id (required).
Duration in minutes (required).
Appointment start as an ISO datetime, e.g. 2026-08-01T09:30:00 (required).
Free-text scheduling notes.
Reason for the visit.
Exam room number.
The server marks this tool as destructive. Running it may delete or overwrite data on the server or in any account you connected with your headers.
DESTRUCTIVE: creates a new appointment on the schedule. Requires doctor, patient, office, scheduled_time (ISO datetime), and duration (minutes). DrChrono API: POST /appointments.
| Argument | Type | Description |
|---|---|---|
| notes | string | Free-text scheduling notes. |
| doctor* | integer | Doctor id (required). |
| office* | integer | Office id (required). |
| reason | string | Reason for the visit. |
| patient* | integer | Patient id (required). |
| duration* | integer | Duration in minutes (required). |
| exam_room | integer | Exam room number. |
| scheduled_time* | string | Appointment start as an ISO datetime, e.g. 2026-08-01T09:30:00 (required). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"doctor",
"patient",
"office",
"scheduled_time",
"duration"
],
"properties": {
"notes": {
"type": "string",
"description": "Free-text scheduling notes."
},
"doctor": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "Doctor id (required)."
},
"office": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "Office id (required)."
},
"reason": {
"type": "string",
"description": "Reason for the visit."
},
"patient": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "Patient id (required)."
},
"duration": {
"type": "integer",
"maximum": 9007199254740991,
"description": "Duration in minutes (required).",
"exclusiveMinimum": 0
},
"exam_room": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "Exam room number."
},
"scheduled_time": {
"type": "string",
"description": "Appointment start as an ISO datetime, e.g. 2026-08-01T09:30:00 (required)."
}
}
}DESTRUCTIVE: creates a new patient record. Requires first_name, last_name, gender, date_of_birth (yyyy-mm-dd), and doctor. DrChrono API: POST /patients.
| Argument | Type | Description |
|---|---|---|
| string | Patient email address. | |
| doctor* | integer | Primary doctor id (required). |
| gender* | string | Patient gender (required). DrChrono accepts Male, Female, Other, or Unknown/Blank. |
| last_name* | string | Patient last name (required). |
| cell_phone | string | Patient cell phone number. |
| first_name* | string | Patient first name (required). |
| date_of_birth* | string | Date of birth, yyyy-mm-dd (required). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"first_name",
"last_name",
"gender",
"date_of_birth",
"doctor"
],
"properties": {
"email": {
"type": "string",
"description": "Patient email address."
},
"doctor": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "Primary doctor id (required)."
},
"gender": {
"type": "string",
"description": "Patient gender (required). DrChrono accepts Male, Female, Other, or Unknown/Blank."
},
"last_name": {
"type": "string",
"description": "Patient last name (required)."
},
"cell_phone": {
"type": "string",
"description": "Patient cell phone number."
},
"first_name": {
"type": "string",
"description": "Patient first name (required)."
},
"date_of_birth": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "Date of birth, yyyy-mm-dd (required)."
}
}
}Fetch a single patient's full demographic record by id. DrChrono API: GET /patients/{id}.
| Argument | Type | Description |
|---|---|---|
| id* | integer | Patient id (required). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"id"
],
"properties": {
"id": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "Patient id (required)."
}
}
}List patient allergies, filterable by patient or doctor. Returns a page plus `next`/`previous`. DrChrono API: GET /allergies.
| Argument | Type | Description |
|---|---|---|
| page | integer | Page number to fetch (1-based). Default 1. |
| doctor | integer | Filter by doctor id. |
| patient | integer | Filter by patient id. |
| page_size | integer | Results per page (max 250). Default 100. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"page": {
"type": "integer",
"maximum": 9007199254740991,
"description": "Page number to fetch (1-based). Default 1.",
"exclusiveMinimum": 0
},
"doctor": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "Filter by doctor id."
},
"patient": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "Filter by patient id."
},
"page_size": {
"type": "integer",
"maximum": 250,
"description": "Results per page (max 250). Default 100.",
"exclusiveMinimum": 0
}
}
}List appointments. The DrChrono API requires at least one of `date`, `since`, or `date_range`. Further filter by doctor, patient, or office. Returns a page plus `next`/`previous`. DrChrono API: GET /appointments.
| Argument | Type | Description |
|---|---|---|
| date | string | Single day, yyyy-mm-dd. One of date / since / date_range is REQUIRED. |
| page | integer | Page number to fetch (1-based). Default 1. |
| since | string | Appointments modified at/after this ISO timestamp. One of date / since / date_range is REQUIRED. |
| doctor | integer | Filter by doctor id. |
| office | integer | Filter by office id. |
| patient | integer | Filter by patient id. |
| page_size | integer | Results per page (max 250). Default 100. |
| date_range | string | Inclusive range "start/end" as yyyy-mm-dd/yyyy-mm-dd, e.g. "2026-01-01/2026-02-01". One of date / since / date_range is REQUIRED. |
List clinical notes, filterable by patient, date, date range, or last-modified time. Returns a page plus `next`/`previous`. DrChrono API: GET /clinical_notes.
| Argument | Type | Description |
|---|---|---|
| date | string | Filter by a single day, yyyy-mm-dd. |
| page | integer | Page number to fetch (1-based). Default 1. |
| since | string | Notes modified at/after this ISO timestamp. |
| patient | integer | Filter by patient id. |
| page_size | integer | Results per page (max 250). Default 100. |
| date_range | string | Inclusive range "yyyy-mm-dd/yyyy-mm-dd", e.g. "2026-01-01/2026-02-01". |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"date": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "Filter by a single day, yyyy-mm-dd."
},
"page": {
"type": "integer",
"maximum": 9007199254740991,
"description": "Page number to fetch (1-based). Default 1.",
"exclusiveMinimum": 0
},
"since": {
"type": "string",
"description": "Notes modified at/after this ISO timestamp."
},
"patient": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "Filter by patient id."
},
"page_size": {
"type": "integer",
"maximum": 250,
"description": "Results per page (max 250). Default 100.",
"exclusiveMinimum": 0
},
"date_range": {
"type": "string",
"description": "Inclusive range \"yyyy-mm-dd/yyyy-mm-dd\", e.g. \"2026-01-01/2026-02-01\"."
}
}
}List the providers/doctors in the practice (id, name, specialty). Returns a page plus `next`/`previous`. DrChrono API: GET /doctors.
| Argument | Type | Description |
|---|---|---|
| page | integer | Page number to fetch (1-based). Default 1. |
| page_size | integer | Results per page (max 250). Default 100. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"page": {
"type": "integer",
"maximum": 9007199254740991,
"description": "Page number to fetch (1-based). Default 1.",
"exclusiveMinimum": 0
},
"page_size": {
"type": "integer",
"maximum": 250,
"description": "Results per page (max 250). Default 100.",
"exclusiveMinimum": 0
}
}
}List lab orders, filterable by doctor, patient, or last-modified time. Returns a page plus `next`/`previous`. DrChrono API: GET /lab_orders.
| Argument | Type | Description |
|---|---|---|
| page | integer | Page number to fetch (1-based). Default 1. |
| since | string | Orders modified at/after this ISO timestamp. |
| doctor | integer | Filter by doctor id. |
| patient | integer | Filter by patient id. |
| page_size | integer | Results per page (max 250). Default 100. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"page": {
"type": "integer",
"maximum": 9007199254740991,
"description": "Page number to fetch (1-based). Default 1.",
"exclusiveMinimum": 0
},
"since": {
"type": "string",
"description": "Orders modified at/after this ISO timestamp."
},
"doctor": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "Filter by doctor id."
},
"patient": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "Filter by patient id."
},
"page_size": {
"type": "integer",
"maximum": 250,
"description": "Results per page (max 250). Default 100.",
"exclusiveMinimum": 0
}
}
}List lab results, filterable by doctor, patient, or lab order. Returns a page plus `next`/`previous`. DrChrono API: GET /lab_results.
| Argument | Type | Description |
|---|---|---|
| page | integer | Page number to fetch (1-based). Default 1. |
| order | integer | Filter by lab order id. |
| doctor | integer | Filter by doctor id. |
| patient | integer | Filter by patient id. |
| page_size | integer | Results per page (max 250). Default 100. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"page": {
"type": "integer",
"maximum": 9007199254740991,
"description": "Page number to fetch (1-based). Default 1.",
"exclusiveMinimum": 0
},
"order": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "Filter by lab order id."
},
"doctor": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "Filter by doctor id."
},
"patient": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "Filter by patient id."
},
"page_size": {
"type": "integer",
"maximum": 250,
"description": "Results per page (max 250). Default 100.",
"exclusiveMinimum": 0
}
}
}List billing line items (charges/procedures), filterable by appointment, doctor, patient, or service date. Returns a page plus `next`/`previous`. DrChrono API: GET /line_items.
| Argument | Type | Description |
|---|---|---|
| page | integer | Page number to fetch (1-based). Default 1. |
| doctor | integer | Filter by doctor id. |
| patient | integer | Filter by patient id. |
| page_size | integer | Results per page (max 250). Default 100. |
| appointment | integer | Filter by appointment id. |
| service_date | string | Filter by date of service, yyyy-mm-dd. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"page": {
"type": "integer",
"maximum": 9007199254740991,
"description": "Page number to fetch (1-based). Default 1.",
"exclusiveMinimum": 0
},
"doctor": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "Filter by doctor id."
},
"patient": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "Filter by patient id."
},
"page_size": {
"type": "integer",
"maximum": 250,
"description": "Results per page (max 250). Default 100.",
"exclusiveMinimum": 0
},
"appointment": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "Filter by appointment id."
},
"service_date": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "Filter by date of service, yyyy-mm-dd."
}
}
}List patient medications, filterable by patient or doctor. Returns a page plus `next`/`previous`. DrChrono API: GET /medications.
| Argument | Type | Description |
|---|---|---|
| page | integer | Page number to fetch (1-based). Default 1. |
| doctor | integer | Filter by doctor id. |
| patient | integer | Filter by patient id. |
| page_size | integer | Results per page (max 250). Default 100. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"page": {
"type": "integer",
"maximum": 9007199254740991,
"description": "Page number to fetch (1-based). Default 1.",
"exclusiveMinimum": 0
},
"doctor": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "Filter by doctor id."
},
"patient": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "Filter by patient id."
},
"page_size": {
"type": "integer",
"maximum": 250,
"description": "Results per page (max 250). Default 100.",
"exclusiveMinimum": 0
}
}
}List the practice's offices/locations. Returns a page plus `next`/`previous`. DrChrono API: GET /offices.
| Argument | Type | Description |
|---|---|---|
| page | integer | Page number to fetch (1-based). Default 1. |
| page_size | integer | Results per page (max 250). Default 100. |
| show_archived | boolean | Include archived offices when true. Default false. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"page": {
"type": "integer",
"maximum": 9007199254740991,
"description": "Page number to fetch (1-based). Default 1.",
"exclusiveMinimum": 0
},
"page_size": {
"type": "integer",
"maximum": 250,
"description": "Results per page (max 250). Default 100.",
"exclusiveMinimum": 0
},
"show_archived": {
"type": "boolean",
"description": "Include archived offices when true. Default false."
}
}
}List patient payments (billing), filterable by doctor, patient, or last-modified time. Returns a page plus `next`/`previous`. DrChrono API: GET /patient_payments.
| Argument | Type | Description |
|---|---|---|
| page | integer | Page number to fetch (1-based). Default 1. |
| since | string | Payments modified at/after this ISO timestamp. |
| doctor | integer | Filter by doctor id. |
| patient | integer | Filter by patient id. |
| page_size | integer | Results per page (max 250). Default 100. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"page": {
"type": "integer",
"maximum": 9007199254740991,
"description": "Page number to fetch (1-based). Default 1.",
"exclusiveMinimum": 0
},
"since": {
"type": "string",
"description": "Payments modified at/after this ISO timestamp."
},
"doctor": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "Filter by doctor id."
},
"patient": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "Filter by patient id."
},
"page_size": {
"type": "integer",
"maximum": 250,
"description": "Results per page (max 250). Default 100.",
"exclusiveMinimum": 0
}
}
}List/search patients in the practice, filterable by doctor, name, gender, date of birth, or last-modified time. Returns a page of patients plus `next`/`previous` URLs. DrChrono API: GET /patients.
| Argument | Type | Description |
|---|---|---|
| page | integer | Page number to fetch (1-based). Default 1. |
| since | string | Return patients modified at/after this ISO timestamp (e.g. 2026-01-01T00:00:00). |
| doctor | integer | Filter by doctor id. |
| gender | string | Filter by gender (e.g. Male, Female, Other, Unknown/Blank). |
| last_name | string | Filter by exact last name. |
| page_size | integer | Results per page (max 250). Default 100. |
| first_name | string | Filter by exact first name. |
| date_of_birth | string | Filter by date of birth, yyyy-mm-dd. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"page": {
"type": "integer",
"maximum": 9007199254740991,
"description": "Page number to fetch (1-based). Default 1.",
"exclusiveMinimum": 0
},
"since": {
"type": "string",
"description": "Return patients modified at/after this ISO timestamp (e.g. 2026-01-01T00:00:00)."
},
"doctor": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "Filter by doctor id."
},
"gender": {
"type": "string",
"description": "Filter by gender (e.g. Male, Female, Other, Unknown/Blank)."
},
"last_name": {
"type": "string",
"description": "Filter by exact last name."
},
"page_size": {
"type": "integer",
"maximum": 250,
"description": "Results per page (max 250). Default 100.",
"exclusiveMinimum": 0
},
"first_name": {
"type": "string",
"description": "Filter by exact first name."
},
"date_of_birth": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "Filter by date of birth, yyyy-mm-dd."
}
}
}List problem-list entries (diagnoses), filterable by patient or doctor. Returns a page plus `next`/`previous`. DrChrono API: GET /problems.
| Argument | Type | Description |
|---|---|---|
| page | integer | Page number to fetch (1-based). Default 1. |
| doctor | integer | Filter by doctor id. |
| patient | integer | Filter by patient id. |
| page_size | integer | Results per page (max 250). Default 100. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"page": {
"type": "integer",
"maximum": 9007199254740991,
"description": "Page number to fetch (1-based). Default 1.",
"exclusiveMinimum": 0
},
"doctor": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "Filter by doctor id."
},
"patient": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "Filter by patient id."
},
"page_size": {
"type": "integer",
"maximum": 250,
"description": "Results per page (max 250). Default 100.",
"exclusiveMinimum": 0
}
}
}{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"date": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "Single day, yyyy-mm-dd. One of date / since / date_range is REQUIRED."
},
"page": {
"type": "integer",
"maximum": 9007199254740991,
"description": "Page number to fetch (1-based). Default 1.",
"exclusiveMinimum": 0
},
"since": {
"type": "string",
"description": "Appointments modified at/after this ISO timestamp. One of date / since / date_range is REQUIRED."
},
"doctor": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "Filter by doctor id."
},
"office": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "Filter by office id."
},
"patient": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "Filter by patient id."
},
"page_size": {
"type": "integer",
"maximum": 250,
"description": "Results per page (max 250). Default 100.",
"exclusiveMinimum": 0
},
"date_range": {
"type": "string",
"description": "Inclusive range \"start/end\" as yyyy-mm-dd/yyyy-mm-dd, e.g. \"2026-01-01/2026-02-01\". One of date / since / date_range is REQUIRED."
}
}
}