Read Semble patients, bookings, invoices and products; create patients and tasks, label patients.
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.
Puts an existing label on a patient (label ids from semble_list_labels). Adds only; nothing is removed.
Label id (from semble_list_labels).
Patient id.
This tool isn't marked read-only, so it may change something on the server or in an account you connected.
Puts an existing label on a patient (label ids from semble_list_labels). Adds only; nothing is removed.
| Argument | Type | Description |
|---|---|---|
| label_id* | string | Label id (from semble_list_labels). |
| patient_id* | string | Patient id. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"patient_id",
"label_id"
],
"properties": {
"label_id": {
"type": "string",
"maxLength": 100,
"minLength": 1,
"description": "Label id (from semble_list_labels)."
},
"patient_id": {
"type": "string",
"maxLength": 100,
"minLength": 1,
"description": "Patient id."
}
}
}Creates a new patient record (personal data) from the details you give. It does not check for an existing patient: search with semble_list_patients first to avoid a duplicate.
| Argument | Type | Description |
|---|---|---|
| dob | string | Date of birth, YYYY-MM-DD. |
| sex | string | Sex as the practice records it. |
| city | string | City. |
| string | Email address. | |
| address | string | Street address. |
| country | string | Country. |
| comments | string | Notes. |
| postcode | string | Postcode. |
| last_name* | string | Last name. |
| first_name* | string | First name. |
| phone_type | string | Phone type, for example Mobile. |
| phone_number | string | Phone number. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"first_name",
"last_name"
],
"properties": {
"dob": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "Date of birth, YYYY-MM-DD."
},
"sex": {
"type": "string",
"maxLength": 30,
"description": "Sex as the practice records it."
},
"city": {
"type": "string",
"maxLength": 100,
"description": "City."
},
"email": {
"type": "string",
"format": "email",
"pattern": "^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$",
"maxLength": 254,
"description": "Email address."
},
"address": {
"type": "string",
"maxLength": 200,
"description": "Street address."
},
"country": {
"type": "string",
"maxLength": 100,
"description": "Country."
},
"comments": {
"type": "string",
"maxLength": 5000,
"description": "Notes."
},
"postcode": {
"type": "string",
"maxLength": 20,
"description": "Postcode."
},
"last_name": {
"type": "string",
"maxLength": 100,
"minLength": 1,
"description": "Last name."
},
"first_name": {
"type": "string",
"maxLength": 100,
"minLength": 1,
"description": "First name."
},
"phone_type": {
"type": "string",
"maxLength": 30,
"description": "Phone type, for example Mobile."
},
"phone_number": {
"type": "string",
"maxLength": 40,
"description": "Phone number."
}
}
}Creates a task in Semble assigned to a staff user (get ids from semble_list_users), optionally about a patient, with a due date, priority and type. Creates a new record each time it is called.
| Argument | Type | Description |
|---|---|---|
| subject* | string | The task text. |
| comments | string | Extra notes. |
| due_date | string | Due date, YYYY-MM-DD. |
| priority | string | Priority. |
| task_type | string | Task type. |
| patient_id | string | Patient the task is about. |
| assigned_to* | string | User id the task is assigned to. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"subject",
"assigned_to"
],
"properties": {
"subject": {
"type": "string",
"maxLength": 500,
"minLength": 1,
"description": "The task text."
},
"comments": {
"type": "string",
"maxLength": 5000,
"description": "Extra notes."
},
"due_date": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "Due date, YYYY-MM-DD."
},
"priority": {
"enum": [
"high",
"medium",
"low",
"unset"
],
"type": "string",
"description": "Priority."
},
"task_type": {
"enum": [
"general",
"recall",
"medical",
"rx",
"lab",
"vaccine",
"admin",
"invoice"
],
"type": "string",
"description": "Task type."
},
"patient_id": {
"type": "string",
"maxLength": 100,
"minLength": 1,
"description": "Patient the task is about."
},
"assigned_to": {
"type": "string",
"maxLength": 100,
"minLength": 1,
"description": "User id the task is assigned to."
}
}
}One booking by id, with patient, doctor, location, appointment type, status and journey.
| Argument | Type | Description |
|---|---|---|
| id* | string | Booking id. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"id"
],
"properties": {
"id": {
"type": "string",
"maxLength": 100,
"minLength": 1,
"description": "Booking id."
}
}
}One invoice by id, with its line items, totals and what is outstanding.
| Argument | Type | Description |
|---|---|---|
| id* | string | Invoice id. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"id"
],
"properties": {
"id": {
"type": "string",
"maxLength": 100,
"minLength": 1,
"description": "Invoice id."
}
}
}One patient by id (personal data): demographics, phones, address, numbers, custom attributes, labels, comments and status. Appointments, invoices and tasks have their own tools.
| Argument | Type | Description |
|---|---|---|
| id* | string | Patient id (from semble_list_patients). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"id"
],
"properties": {
"id": {
"type": "string",
"maxLength": 100,
"minLength": 1,
"description": "Patient id (from semble_list_patients)."
}
}
}The practice the API token belongs to: name, timezone, locations, appointment types and medical specialties. A good first call to check the connection.
No arguments.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {}
}One product, service or appointment type by id.
| Argument | Type | Description |
|---|---|---|
| id* | string | Product id. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"id"
],
"properties": {
"id": {
"type": "string",
"maxLength": 100,
"minLength": 1,
"description": "Product id."
}
}
}One staff user by id.
| Argument | Type | Description |
|---|---|---|
| id* | string | User id. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"id"
],
"properties": {
"id": {
"type": "string",
"maxLength": 100,
"minLength": 1,
"description": "User id."
}
}
}Bookings (appointments) of the whole practice. With a date range, a booking is included if it starts or ends inside it. Returns patient, doctor, location, appointment type, status and journey (arrived, consultation, departed, dna).
| Argument | Type | Description |
|---|---|---|
| end | string | Last day, YYYY-MM-DD (until 23:59 UTC, inclusive). |
| page | integer | Page number, from 1 (default 1). |
| start | string | First day, YYYY-MM-DD (from 00:00 UTC). |
| page_size | integer | Rows per page, 1-100 (default 25). |
| include_deleted | boolean | Also return deleted bookings (default false). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"end": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "Last day, YYYY-MM-DD (until 23:59 UTC, inclusive)."
},
"page": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 1,
"description": "Page number, from 1 (default 1)."
},
"start": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "First day, YYYY-MM-DD (from 00:00 UTC)."
},
"page_size": {
"type": "integer",
"maximum": 100,
"minimum": 1,
"description": "Rows per page, 1-100 (default 25)."
},
"include_deleted": {
"type": "boolean",
"description": "Also return deleted bookings (default false)."
}
}
}Contacts of the practice (referring doctors, insurers and other payors). `search` matches name, email, phone, specialty and numbers.
| Argument | Type | Description |
|---|---|---|
| page | integer | Page number, from 1 (default 1). |
| search | string | Free-text search. |
| is_payor | boolean | Only payors. |
| is_doctor | boolean | Only doctors. |
| page_size | integer | Rows per page, 1-100 (default 25). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"page": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 1,
"description": "Page number, from 1 (default 1)."
},
"search": {
"type": "string",
"maxLength": 200,
"description": "Free-text search."
},
"is_payor": {
"type": "boolean",
"description": "Only payors."
},
"is_doctor": {
"type": "boolean",
"description": "Only doctors."
},
"page_size": {
"type": "integer",
"maximum": 100,
"minimum": 1,
"description": "Rows per page, 1-100 (default 25)."
}
}
}Invoices whose invoice date is inside a date range, with patient, totals and what is outstanding. Filter by status (active or cancelled) and paid_or_outstanding. Monetary amounts are in the practice currency.
| Argument | Type | Description |
|---|---|---|
| end | string | Last invoice date, YYYY-MM-DD. |
| page | integer | Page number, from 1 (default 1). |
| start | string | First invoice date, YYYY-MM-DD. |
| status | string | Invoice status. |
| page_size | integer | Rows per page, 1-100 (default 25). |
| paid_or_outstanding | string | Filter by payment state. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"end": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "Last invoice date, YYYY-MM-DD."
},
"page": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 1,
"description": "Page number, from 1 (default 1)."
},
"start": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "First invoice date, YYYY-MM-DD."
},
"status": {
"enum": [
"active",
"cancelled"
],
"type": "string",
"description": "Invoice status."
},
"page_size": {
"type": "integer",
"maximum": 100,
"minimum": 1,
"description": "Rows per page, 1-100 (default 25)."
},
"paid_or_outstanding": {
"enum": [
"Paid",
"Outstanding",
"Void"
],
"type": "string",
"description": "Filter by payment state."
}
}
}The labels that can be put on patients (id, title, colour). Use the id with semble_add_patient_label.
| Argument | Type | Description |
|---|---|---|
| page | integer | Page number, from 1 (default 1). |
| search | string | Label title. |
| page_size | integer | Rows per page, 1-100 (default 25). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"page": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 1,
"description": "Page number, from 1 (default 1)."
},
"search": {
"type": "string",
"maxLength": 200,
"description": "Label title."
},
"page_size": {
"type": "integer",
"maximum": 100,
"minimum": 1,
"description": "Rows per page, 1-100 (default 25)."
}
}
}The bookings (appointments) of one patient between two dates, with doctor, location, appointment type and status. Both dates are required (YYYY-MM-DD).
| Argument | Type | Description |
|---|---|---|
| end* | string | Last day, YYYY-MM-DD (until 23:59 UTC, inclusive). |
| page | integer | Page number, from 1 (default 1). |
| start* | string | First day, YYYY-MM-DD (from 00:00 UTC). |
| page_size | integer | Rows per page, 1-100 (default 25). |
| patient_id* | string | Patient id. |
| only_cancelled | boolean | Return ONLY cancelled (deleted) bookings. Takes precedence over include_deleted. |
| include_deleted | boolean | Also return cancelled (deleted) bookings next to the active ones (default false). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"patient_id",
"start",
"end"
],
"properties": {
"end": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "Last day, YYYY-MM-DD (until 23:59 UTC, inclusive)."
},
"page": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 1,
"description": "Page number, from 1 (default 1)."
},
"start": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "First day, YYYY-MM-DD (from 00:00 UTC)."
},
"page_size": {
"type": "integer",
"maximum": 100,
"minimum": 1,
"description": "Rows per page, 1-100 (default 25)."
},
"patient_id": {
"type": "string",
"maxLength": 100,
"minLength": 1,
"description": "Patient id."
},
"only_cancelled": {
"type": "boolean",
"description": "Return ONLY cancelled (deleted) bookings. Takes precedence over include_deleted."
},
"include_deleted": {
"type": "boolean",
"description": "Also return cancelled (deleted) bookings next to the active ones (default false)."
}
}
}Patients of the practice (personal and health data). `search` matches name, email, phone or date of birth. Returns id, name, date of birth, contact details and status, plus pageInfo.hasMore for the next page.
| Argument | Type | Description |
|---|---|---|
| page | integer | Page number, from 1 (default 1). |
| search | string | Free-text search (name, email, phone, date of birth). |
| page_size | integer | Rows per page, 1-100 (default 25). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"page": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 1,
"description": "Page number, from 1 (default 1)."
},
"search": {
"type": "string",
"maxLength": 200,
"description": "Free-text search (name, email, phone, date of birth)."
},
"page_size": {
"type": "integer",
"maximum": 100,
"minimum": 1,
"description": "Rows per page, 1-100 (default 25)."
}
}
}The practice's price list: appointment types, services and stock items, with price, cost, duration and stock level. `search` matches the item code or name.
| Argument | Type | Description |
|---|---|---|
| page | integer | Page number, from 1 (default 1). |
| search | string | Item code or name. |
| page_size | integer | Rows per page, 1-100 (default 25). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"page": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 1,
"description": "Page number, from 1 (default 1)."
},
"search": {
"type": "string",
"maxLength": 200,
"description": "Item code or name."
},
"page_size": {
"type": "integer",
"maximum": 100,
"minimum": 1,
"description": "Rows per page, 1-100 (default 25)."
}
}
}Practice tasks, filtered by patient, status, priority, type or assignee. Returns subject, due date, priority, assignee and patient.
| Argument | Type | Description |
|---|---|---|
| page | integer | Page number, from 1 (default 1). |
| status | string | Task status. |
| priority | string | Task priority. |
| page_size | integer | Rows per page, 1-100 (default 25). |
| task_type | string | Task type. |
| patient_id | string | Only tasks about this patient id. |
| assigned_to | string | Only tasks assigned to this user id. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"page": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 1,
"description": "Page number, from 1 (default 1)."
},
"status": {
"enum": [
"open",
"processing",
"closed"
],
"type": "string",
"description": "Task status."
},
"priority": {
"enum": [
"high",
"medium",
"low",
"unset"
],
"type": "string",
"description": "Task priority."
},
"page_size": {
"type": "integer",
"maximum": 100,
"minimum": 1,
"description": "Rows per page, 1-100 (default 25)."
},
"task_type": {
"enum": [
"general",
"recall",
"medical",
"rx",
"lab",
"vaccine",
"admin",
"invoice"
],
"type": "string",
"description": "Task type."
},
"patient_id": {
"type": "string",
"maxLength": 100,
"minLength": 1,
"description": "Only tasks about this patient id."
},
"assigned_to": {
"type": "string",
"maxLength": 100,
"minLength": 1,
"description": "Only tasks assigned to this user id."
}
}
}Staff users of the practice (clinicians and admin): name, email, role, qualifications and specialties. Use the ids for bookings and tasks.
| Argument | Type | Description |
|---|---|---|
| page | integer | Page number, from 1 (default 1). |
| search | string | Free-text search. |
| page_size | integer | Rows per page, 1-100 (default 25). |
| clinicians_only | boolean | Only clinicians. |
| include_deleted | boolean | Also return deleted users (default false). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"page": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 1,
"description": "Page number, from 1 (default 1)."
},
"search": {
"type": "string",
"maxLength": 200,
"description": "Free-text search."
},
"page_size": {
"type": "integer",
"maximum": 100,
"minimum": 1,
"description": "Rows per page, 1-100 (default 25)."
},
"clinicians_only": {
"type": "boolean",
"description": "Only clinicians."
},
"include_deleted": {
"type": "boolean",
"description": "Also return deleted users (default false)."
}
}
}Changes a task: close or reopen it (status), reassign it, move the due date, or edit subject, priority and notes. Only the fields you pass are changed.
| Argument | Type | Description |
|---|---|---|
| id* | string | Task id (from semble_list_tasks). |
| status | string | New status. |
| subject | string | New subject. |
| comments | string | New notes (replace the old). |
| due_date | string | New due date, YYYY-MM-DD. |
| priority | string | New priority. |
| assigned_to | string | New assignee user id. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"id"
],
"properties": {
"id": {
"type": "string",
"maxLength": 100,
"minLength": 1,
"description": "Task id (from semble_list_tasks)."
},
"status": {
"enum": [
"open",
"processing",
"closed"
],
"type": "string",
"description": "New status."
},
"subject": {
"type": "string",
"maxLength": 500,
"minLength": 1,
"description": "New subject."
},
"comments": {
"type": "string",
"maxLength": 5000,
"description": "New notes (replace the old)."
},
"due_date": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "New due date, YYYY-MM-DD."
},
"priority": {
"enum": [
"high",
"medium",
"low",
"unset"
],
"type": "string",
"description": "New priority."
},
"assigned_to": {
"type": "string",
"maxLength": 100,
"minLength": 1,
"description": "New assignee user id."
}
}
}