# splose MCP by usefulapi (remote · splose.usefulapi.io)

Read splose patients, appointments, invoices, cases; book and cancel appointments, record payments.

- Trust score: 62/100 (medium)
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-10-25

## Components

- remote · `splose.usefulapi.io`: 62/100 (this document), [markdown](https://verifymcp.io/servers/io-usefulapi-splose/splose.md), [page](https://verifymcp.io/servers/io-usefulapi-splose/splose)

## Channel facts

- Endpoint: `https://splose.usefulapi.io/mcp`
- Transports: `streamable-http`
- Auth: `required`
- Version: `1.0.3`

## Trust breakdown

How this component scores in each security and reliability category. Every signal is checked automatically against the live server, and we only credit what we can confirm. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-10-25.

- **Endpoint Security**: 78/100
  - The endpoint's TLS certificate is valid, in date, and uses a strong key.
  - Authorisation is enforced on tool calls, advertised via RFC 9728 protected-resource metadata. Discovery is public, which costs nothing: no tool can be invoked without a token.
  - HTTPS enforcement could not be verified: the plaintext port redirected somewhere other than https, so enforcement is unproven.
  - HSTS check failed: the Strict-Transport-Security header is absent.
  - DNSSEC check failed: this domain isn't protected by DNSSEC.
  - The authorisation server offers only Dynamic Client Registration (RFC 7591), which MCP 2026-07-28 deprecated in favour of Client ID Metadata Documents.
- **Transport & Reachability**: 0/100
  - Transport check failed: declared streamable-http, but the endpoint redirected instead of responding directly.
- **Schema Quality & AI Usability**: 78/100
  - 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).
  - AI-judged instruction clarity (good).
  - Context-footprint check failed: tool/resource definitions use about 5624 tokens (~156/item across 36 items; 36 tools + 0 resources), over budget; trim descriptions and params.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 3/100
  - Stability observed for 1 of 30 days with no destabilising changes; credit accrues until the full window elapses.
- **Tool Coverage**: 95/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 85% of tool parameters carry a description.
- **Tool Safety**: 100/100
  - No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.
  - We read all 36 captured tool definition(s), and no name or description among them implies an irreversible operation.
  - An AI judge read all 37 captured unit(s) of tool text and found none that tries to manipulate the model reading it.
- **Capabilities**: 60/100
  - Spec-recency check failed: implements MCP spec 2025-06-18; the latest is 2026-07-28.

## Install

### How do I install the splose MCP by usefulapi server?

splose MCP by usefulapi is a hosted endpoint at https://splose.usefulapi.io/mcp, so there is nothing to install locally. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

### Claude

```bash
claude mcp add --transport http io-usefulapi-splose 'https://splose.usefulapi.io/mcp'
```

### Cursor

```json
{
  "mcpServers": {
    "io-usefulapi-splose": {
      "url": "https://splose.usefulapi.io/mcp"
    }
  }
}
```

### VS Code

```json
{
  "servers": {
    "io-usefulapi-splose": {
      "type": "http",
      "url": "https://splose.usefulapi.io/mcp"
    }
  }
}
```

### Codex

```toml
[mcp_servers.io-usefulapi-splose]
url = "https://splose.usefulapi.io/mcp"
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "io-usefulapi-splose": {
      "type": "remote",
      "url": "https://splose.usefulapi.io/mcp",
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add io-usefulapi-splose --url 'https://splose.usefulapi.io/mcp' --transport streamable-http
```

### Hermes

```yaml
mcp_servers:
  io-usefulapi-splose:
    url: "https://splose.usefulapi.io/mcp"
```

### Netclaw

```json
{
  "McpServers": {
    "io-usefulapi-splose": {
      "Transport": "http",
      "Url": "https://splose.usefulapi.io/mcp"
    }
  }
}
```

### Vellum

```bash
assistant mcp add io-usefulapi-splose -t streamable-http -u 'https://splose.usefulapi.io/mcp'
```

### Other

```json
{
  "mcpServers": {
    "io-usefulapi-splose": {
      "type": "http",
      "url": "https://splose.usefulapi.io/mcp"
    }
  }
}
```

The mcpServers block is a cross-client convention. Remote transports vary, so check your client's docs.

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-10-25 (score 62, +1)

- [functional improvement] Stability: unverified → 0.03
- [functional] Server version: 1.0.0 → 1.0.3

### 2026-10-24 (score 61)

First indexed and scored.

## MCP tools (36)

### `splose_get_account` (~36 tokens)

Get the account behind the API key

The organisation and the practitioner who owns the API key, plus the key's expiry date. Good first call. GET /me.

### `splose_list_patients` (~266 tokens)

List patients

Patients (clients) of the practice, filtered, in id order, as short rows: id, name, email, birthdate, phones, tags, alert, archived. Use splose_get_patient for the full record. HEALTH DATA: only look people up when the user asks. GET /patients.

Input parameters:

- `birthdate` (string): Patient birth date, yyyy-mm-dd.
- `email` (string): Patient email.
- `firstname` (string): Patient first name.
- `id_gt` (integer): Only objects with an id greater than this: the next page (pass the previous reply's next_id_gt).
- `id_lt` (integer): Only objects with an id less than this: the previous page.
- `ids` (array): Only these patient ids (max 100).
- `include_archived` (boolean): true to include archived objects (default false).
- `lastname` (string): Patient last name.
- `patientTag` (string): A patient tag, e.g. Self-managed.
- `phoneNumber` (string): Phone number without the country code.
- `update_gt` (string): Only objects updated after this date or date-time (UTC).
- `update_lt` (string): Only objects updated before this date or date-time (UTC).

### `splose_get_patient` (~59 tokens)

Get a patient

One patient in full: contact details, address, NDIS number and plan info, Medicare/health fund, emergency contact, tags and custom fields. HEALTH DATA. GET /patients/{id}.

Input parameters:

- `patient_id` (integer, required): Patient id.

### `splose_list_appointments` (~287 tokens)

List appointments

Appointments in id order: start/end (UTC), service, location, practitioner, price, note and the per-patient status (Arrived, Did not arrive, Cancelled, Completed, cancellation reason, invoice id). Filter by time window, patient, practitioner or status. GET /appointments.

Input parameters:

- `id_gt` (integer): Only objects with an id greater than this: the next page (pass the previous reply's next_id_gt).
- `id_lt` (integer): Only objects with an id less than this: the previous page.
- `include_archived` (boolean): true to include archived objects (default false).
- `patientId` (integer): Only appointments of this patient.
- `practitionerId` (integer): Only appointments of this practitioner.
- `start_gt` (string): Only appointments starting after this date or date-time.
- `start_lt` (string): Only appointments starting before this date or date-time.
- `status` (string): Patient status of the appointment.
- `status_update_gt` (string): Only appointments whose status changed after this date or date-time.
- `status_update_lt` (string): Only appointments whose status changed before this date or date-time.
- `update_gt` (string): Only objects updated after this date or date-time (UTC).
- `update_lt` (string): Only objects updated before this date or date-time (UTC).

### `splose_get_appointment` (~44 tokens)

Get an appointment

One appointment in full, with each patient's status, case, invoice and cancellation details. GET /appointments/{id}.

Input parameters:

- `appointment_id` (integer, required): Appointment id.

### `splose_list_practitioners` (~214 tokens)

List practitioners

Practitioners (staff): name, email, profession, role, active flag, online-booking flag, timezone and their location/service connections. GET /practitioners.

Input parameters:

- `email` (string): Practitioner email.
- `firstname` (string): Practitioner first name.
- `id_gt` (integer): Only objects with an id greater than this: the next page (pass the previous reply's next_id_gt).
- `id_lt` (integer): Only objects with an id less than this: the previous page.
- `include_archived` (boolean): true to include archived objects (default false).
- `isActive` (boolean): true = only active practitioners, false = only inactive.
- `lastname` (string): Practitioner last name.
- `roleName` (string): A predefined or custom role name.
- `update_gt` (string): Only objects updated after this date or date-time (UTC).
- `update_lt` (string): Only objects updated before this date or date-time (UTC).

### `splose_get_practitioner` (~42 tokens)

Get a practitioner

One practitioner in full, including provider numbers and connections. GET /practitioners/{id}.

Input parameters:

- `practitioner_id` (integer, required): Practitioner id.

### `splose_list_locations` (~153 tokens)

List locations

Practice locations: title, address, phone, email, timezone, online-booking flag and the ids of the services offered there. GET /locations.

Input parameters:

- `id_gt` (integer): Only objects with an id greater than this: the next page (pass the previous reply's next_id_gt).
- `id_lt` (integer): Only objects with an id less than this: the previous page.
- `include_archived` (boolean): true to include archived objects (default false).
- `title` (string): Location title.
- `update_gt` (string): Only objects updated after this date or date-time (UTC).
- `update_lt` (string): Only objects updated before this date or date-time (UTC).

### `splose_get_location` (~31 tokens)

Get a location

One location in full. GET /locations/{id}.

Input parameters:

- `location_id` (integer, required): Location id.

### `splose_list_services` (~186 tokens)

List services

The service catalogue: name, type, code, duration (minutes), unit (Hour or Each), price, tax type, group size and tags. GET /services.

Input parameters:

- `code` (string): Service code.
- `id_gt` (integer): Only objects with an id greater than this: the next page (pass the previous reply's next_id_gt).
- `id_lt` (integer): Only objects with an id less than this: the previous page.
- `include_archived` (boolean): true to include archived objects (default false).
- `name` (string): Service name.
- `serviceTag` (string): A service tag.
- `type` (string): Service type.
- `update_gt` (string): Only objects updated after this date or date-time (UTC).
- `update_lt` (string): Only objects updated before this date or date-time (UTC).

### `splose_get_service` (~37 tokens)

Get a service

One service in full, including provider-travel pricing. GET /services/{id}.

Input parameters:

- `service_id` (integer, required): Service id.

### `splose_list_contacts` (~196 tokens)

List contacts

Contacts (GPs, plan managers, referrers, invoice recipients): name, type, email, address, phones and the ids of their patients, invoices and cases. GET /contacts.

Input parameters:

- `email` (string): Contact email.
- `firstname` (string): Contact first name.
- `id_gt` (integer): Only objects with an id greater than this: the next page (pass the previous reply's next_id_gt).
- `id_lt` (integer): Only objects with an id less than this: the previous page.
- `include_archived` (boolean): true to include archived objects (default false).
- `lastname` (string): Contact last name.
- `phoneNumber` (string): Phone number without the country code.
- `update_gt` (string): Only objects updated after this date or date-time (UTC).
- `update_lt` (string): Only objects updated before this date or date-time (UTC).

### `splose_get_contact` (~31 tokens)

Get a contact

One contact in full. GET /contacts/{id}.

Input parameters:

- `contact_id` (integer, required): Contact id.

### `splose_list_cases` (~221 tokens)

List cases

Cases (funding referrals and plans): case number, budget, hours or appointment allowance, issue and expiry dates, tracking type, open flag and utilisation alert. HEALTH/FUNDING DATA. GET /cases.

Input parameters:

- `contactId` (integer): Only cases referred by / billed to this contact.
- `id_gt` (integer): Only objects with an id greater than this: the next page (pass the previous reply's next_id_gt).
- `id_lt` (integer): Only objects with an id less than this: the previous page.
- `include_archived` (boolean): true to include archived objects (default false).
- `patientId` (integer): Only cases of this patient.
- `practitionerId` (integer): Only cases of this practitioner.
- `status` (string): Case status.
- `trackType` (string): How the case is tracked.
- `update_gt` (string): Only objects updated after this date or date-time (UTC).
- `update_lt` (string): Only objects updated before this date or date-time (UTC).

### `splose_get_case` (~36 tokens)

Get a case

One case in full, with its appointment connections. GET /cases/{id}.

Input parameters:

- `case_id` (integer, required): Case id.

### `splose_list_invoices` (~224 tokens)

List invoices

Invoices: number, issue/due dates, patient, contact, location, practitioner, subtotal, tax, total, paid amount, status (Draft, Awaiting Payment, Paid), line items and payment ids. Use status=Awaiting Payment for what is owed. GET /invoices.

Input parameters:

- `id_gt` (integer): Only objects with an id greater than this: the next page (pass the previous reply's next_id_gt).
- `id_lt` (integer): Only objects with an id less than this: the previous page.
- `include_archived` (boolean): true to include archived objects (default false).
- `locationId` (integer): Only invoices created at this location.
- `patientId` (integer): Only invoices of this patient.
- `practitionerId` (integer): Only invoices created by this practitioner.
- `status` (string): Invoice status.
- `update_gt` (string): Only objects updated after this date or date-time (UTC).
- `update_lt` (string): Only objects updated before this date or date-time (UTC).

### `splose_get_invoice` (~38 tokens)

Get an invoice

One invoice in full with its line items and payments. GET /invoices/{id}.

Input parameters:

- `invoice_id` (integer, required): Invoice id.

### `splose_list_payments` (~172 tokens)

List payments

Payments received: payment number, amount, date, patient, location, payment method, the invoices each payment settles and credit allocations. GET /payments.

Input parameters:

- `id_gt` (integer): Only objects with an id greater than this: the next page (pass the previous reply's next_id_gt).
- `id_lt` (integer): Only objects with an id less than this: the previous page.
- `include_archived` (boolean): true to include archived objects (default false).
- `locationId` (integer): Only payments created at this location.
- `patientId` (integer): Only payments of this patient.
- `update_gt` (string): Only objects updated after this date or date-time (UTC).
- `update_lt` (string): Only objects updated before this date or date-time (UTC).

### `splose_get_payment` (~31 tokens)

Get a payment

One payment in full. GET /payments/{id}.

Input parameters:

- `payment_id` (integer, required): Payment id.

### `splose_list_payment_methods` (~144 tokens)

List payment methods

Payment methods (cash, card, bank transfer and so on) with their ids, needed to record a payment. GET /payment-methods.

Input parameters:

- `id_gt` (integer): Only objects with an id greater than this: the next page (pass the previous reply's next_id_gt).
- `id_lt` (integer): Only objects with an id less than this: the previous page.
- `include_archived` (boolean): true to include archived objects (default false).
- `update_gt` (string): Only objects updated after this date or date-time (UTC).
- `update_lt` (string): Only objects updated before this date or date-time (UTC).

### `splose_list_credit_notes` (~179 tokens)

List credit notes

Credit notes: number, invoice, patient, subtotal, tax, total, sent status, items and allocations. GET /credit-notes.

Input parameters:

- `id_gt` (integer): Only objects with an id greater than this: the next page (pass the previous reply's next_id_gt).
- `id_lt` (integer): Only objects with an id less than this: the previous page.
- `invoiceId` (integer): Only credit notes of this invoice.
- `patientId` (integer): Only credit notes of this patient.
- `practitionerId` (integer): Only credit notes created by this practitioner.
- `sentStatus` (string): Sent status.
- `update_gt` (string): Only objects updated after this date or date-time (UTC).
- `update_lt` (string): Only objects updated before this date or date-time (UTC).

### `splose_list_waitlist` (~257 tokens)

List waitlist items

Waitlist entries: patient, practitioner, location, wanted services, preferred days and time, tags and active flag. GET /waitlists.

Input parameters:

- `dateAddedGt` (string): Only items added after this date.
- `dateAddedLt` (string): Only items added before this date.
- `id_gt` (integer): Only objects with an id greater than this: the next page (pass the previous reply's next_id_gt).
- `id_lt` (integer): Only objects with an id less than this: the previous page.
- `include_archived` (boolean): true to include archived objects (default false).
- `isActive` (boolean): true = still waiting, false = closed.
- `locationId` (integer): Only items for this location.
- `patientId` (integer): Only items of this patient.
- `practitionerId` (integer): Only items for this practitioner.
- `serviceIds` (array): Only items waiting for these services.
- `update_gt` (string): Only objects updated after this date or date-time (UTC).
- `update_lt` (string): Only objects updated before this date or date-time (UTC).
- `userGroupId` (integer): Only items for this practitioner group.

### `splose_list_patient_forms` (~178 tokens)

List patient forms

Forms sent to patients: title, status (Incomplete, In progress, Completed), patient, appointment, template and submission time. The form content is included. GET /patient-forms.

Input parameters:

- `id_gt` (integer): Only objects with an id greater than this: the next page (pass the previous reply's next_id_gt).
- `id_lt` (integer): Only objects with an id less than this: the previous page.
- `include_archived` (boolean): true to include archived objects (default false).
- `patientId` (integer): Only forms of this patient.
- `templateId` (integer): Only forms from this template.
- `update_gt` (string): Only objects updated after this date or date-time (UTC).
- `update_lt` (string): Only objects updated before this date or date-time (UTC).

### `splose_list_support_activities` (~197 tokens)

List support activities

Non-appointment billable activities (NDIS support activities): patient, practitioner, service, item code, quantity, price, invoice id. GET /support-activities.

Input parameters:

- `id_gt` (integer): Only objects with an id greater than this: the next page (pass the previous reply's next_id_gt).
- `id_lt` (integer): Only objects with an id less than this: the previous page.
- `include_archived` (boolean): true to include archived objects (default false).
- `patientId` (integer): Only activities of this patient.
- `start_gt` (string): Only activities starting after this date or date-time.
- `start_lt` (string): Only activities starting before this date or date-time.
- `update_gt` (string): Only objects updated after this date or date-time (UTC).
- `update_lt` (string): Only objects updated before this date or date-time (UTC).

### `splose_list_busy_times` (~210 tokens)

List busy times

Blocked-out time in practitioner calendars (leave, admin time): start/end, location, practitioners, type and note. GET /busy-times.

Input parameters:

- `busyTimeTypeId` (integer): Only busy times of this type.
- `id_gt` (integer): Only objects with an id greater than this: the next page (pass the previous reply's next_id_gt).
- `id_lt` (integer): Only objects with an id less than this: the previous page.
- `include_archived` (boolean): true to include archived objects (default false).
- `practitionerId` (integer): Only busy times of this practitioner.
- `start_gt` (string): Only busy times starting after this date or date-time.
- `start_lt` (string): Only busy times starting before this date or date-time.
- `update_gt` (string): Only objects updated after this date or date-time (UTC).
- `update_lt` (string): Only objects updated before this date or date-time (UTC).

### `splose_list_cancellation_reasons` (~136 tokens)

List cancellation reasons

Cancellation reasons with their ids, needed to cancel an appointment. GET /cancellation-reasons.

Input parameters:

- `id_gt` (integer): Only objects with an id greater than this: the next page (pass the previous reply's next_id_gt).
- `id_lt` (integer): Only objects with an id less than this: the previous page.
- `include_archived` (boolean): true to include archived objects (default false).
- `update_gt` (string): Only objects updated after this date or date-time (UTC).
- `update_lt` (string): Only objects updated before this date or date-time (UTC).

### `splose_list_custom_fields` (~44 tokens)

List patient custom fields

The custom fields defined for patients: id, name, type (short text, dropdown, date and so on), required flag and options. GET /custom-field/.

### `splose_get_practitioner_availability` (~131 tokens)

Get a practitioner's availability

A practitioner's working-hours availability per date and location (start/end time, weekly or fortnightly repeat). The window is at most 100 days. This is the roster, not the open slots: use splose_find_free_slots for bookable times. GET /availabilities/{practitionerId}.

Input parameters:

- `endDate` (string, required): Last date of the window, at most 100 days after startDate.
- `locationId` (integer): Only this location.
- `practitioner_id` (integer, required): Practitioner id.
- `startDate` (string, required): First date of the window.

### `splose_find_free_slots` (~158 tokens)

Find free appointment slots

Bookable free slots for one or more practitioners at a location for one patient service, between from and to (the window is at most 7 days). Returns, per practitioner, the start/end of each open slot in UTC. Read-only. GET /free-slots.

Input parameters:

- `from` (string, required): Start of the search window (UTC).
- `interval` (integer): Slot step in minutes (default 15).
- `locationId` (integer, required): Location id (splose_list_locations).
- `practitionerIds` (array, required): One or more practitioner ids.
- `serviceId` (integer, required): Service id (splose_list_services).
- `to` (string): End of the search window, up to 7 days after from.

### `splose_create_appointment` (~175 tokens)

Create an appointment

WRITE: books ONE appointment for one patient with one practitioner, service and location, from start to end (UTC). Splose may send the patient its normal booking confirmation or reminders according to the practice's settings, and the appointment can later be invoiced. Check splose_find_free_slots first. Not idempotent: calling twice books twice. POST /appointments.

Input parameters:

- `caseId` (integer): Case (funding plan) id to attach.
- `end` (string, required): Appointment end (UTC), after start.
- `locationId` (integer, required): Location id.
- `note` (string): Appointment note.
- `patientId` (integer, required): Patient id.
- `practitionerId` (integer, required): Practitioner id.
- `serviceId` (integer, required): Service id.
- `start` (string, required): Appointment start (UTC).

### `splose_update_appointment` (~155 tokens)

Update (reschedule) an appointment

WRITE: changes the time, service, location, practitioner, case or patient of ONE existing appointment; send only the fields to change. Splose may notify the patient of a change according to the practice's settings. Same input twice gives the same result. PUT /appointments/{id}.

Input parameters:

- `appointment_id` (integer, required): Appointment id.
- `caseId` (integer): New case id.
- `end` (string): New end (UTC).
- `locationId` (integer): New location id.
- `patientId` (integer): New patient id.
- `practitionerId` (integer): New practitioner id.
- `serviceId` (integer): New service id.
- `start` (string): New start (UTC).

### `splose_cancel_appointment` (~198 tokens)

Cancel an appointment

WRITE: cancels ONE appointment with a cancellation reason (ids from splose_list_cancellation_reasons) and an optional note. The reason's billable rate may create a cancellation charge, and the patient may be notified per the practice's settings. For a group appointment pass patient_id to cancel only that patient's place; without it the whole appointment is cancelled. Cannot be undone through this server: confirm with the user first and pass confirm: true. POST /appointments/{id}/cancellation or /appointments/{id}/patients/{patientId}/cancellation.

Input parameters:

- `appointment_id` (integer, required): Appointment id.
- `confirm` (boolean, required): Must be true: the user has confirmed this cancellation (it may charge a fee and notify the patient).
- `note` (string): Optional cancellation note.
- `patient_id` (integer): Group appointments only: cancel just this patient's participation.
- `reasonId` (integer, required): Cancellation reason id.

### `splose_mark_patient_arrived` (~93 tokens)

Mark a patient as arrived

WRITE: marks the patient of ONE appointment as arrived (check-in). For a group appointment pass patient_id to mark just that patient. Marking twice has the same effect. POST /appointments/{id}/arrival or /appointments/{id}/patients/{patientId}/arrival.

Input parameters:

- `appointment_id` (integer, required): Appointment id.
- `patient_id` (integer): Group appointments only: the patient who arrived.

### `splose_create_patient` (~350 tokens)

Create a patient

WRITE: adds ONE new patient record (first and last name required). Search with splose_list_patients first to avoid a duplicate. Patient messaging follows the practice's settings and communicationPreference. Not idempotent: calling twice creates two patients. HEALTH DATA: only enter what the user supplied. POST /patients.

Input parameters:

- `addressL1` (string)
- `addressL2` (string)
- `alert` (string): Alert message shown on the patient record.
- `birthdate` (string): Birth date, yyyy-mm-dd.
- `city` (string)
- `communicationPreference` (string): Defaults to the organisation's preference.
- `country` (string)
- `email` (string)
- `emergencyContactName` (string)
- `emergencyContactNumber` (string)
- `emergencyContactRelationship` (string)
- `extraInfo` (string)
- `firstname` (string, required): First name.
- `genderIdentity` (string)
- `invoiceRecipientId` (integer): Contact id that receives the invoices.
- `irn` (string): Medicare reference number.
- `lastname` (string, required): Last name.
- `medicareNum` (string)
- `middleName` (string)
- `ndisNumber` (string): NDIS participant number.
- `phoneNumbers` (array)
- `postalCode` (string)
- `preferredName` (string)
- `pronouns` (string)
- `sex` (string)
- `state` (string)
- `timezone` (string): IANA timezone, e.g. Australia/Adelaide.
- `title` (string): e.g. Mr., Ms., Dr.

### `splose_create_contact` (~238 tokens)

Create a contact

WRITE: adds ONE contact (GP, plan manager, referrer, payer). type, name and email are required (type is Splose's contact type, e.g. Standard; see splose_list_contacts for the values in use). Not idempotent: calling twice creates two contacts. POST /contacts.

Input parameters:

- `addressL1` (string)
- `addressL2` (string)
- `companyName` (string)
- `country` (string)
- `doctorType` (string)
- `email` (string, required)
- `firstName` (string)
- `lastName` (string)
- `name` (string, required): Display name, e.g. a plan manager's business name.
- `occupation` (string)
- `phoneNumbers` (array)
- `postalCode` (string)
- `preferredName` (string)
- `providerNumber` (string)
- `state` (string)
- `suburb` (string)
- `title` (string)
- `type` (string, required): Contact type, e.g. Standard (copy the value from an existing contact).

### `splose_record_payment` (~218 tokens)

Record a payment against an invoice

WRITE, MONEY: records ONE payment received (cash, card, transfer) against ONE invoice; it moves the invoice towards Paid and is shown in the patient's account. It does NOT charge anyone's card. amount must not exceed what is owed (check splose_get_invoice). Not idempotent: calling twice records two payments, and this server cannot delete a payment, so confirm the details with the user first and pass confirm: true. Ids come from splose_get_invoice and splose_list_payment_methods. POST /payments.

Input parameters:

- `amount` (number, required): Amount paid, in dollars.
- `confirm` (boolean, required): Must be true: the user has confirmed the invoice, amount and payment method.
- `invoiceId` (integer, required): Invoice id the payment settles.
- `locationId` (integer, required): Location id.
- `patientId` (integer, required): Patient id of the invoice.
- `paymentDate` (string, required): Date the money was received.
- `paymentMethodId` (integer, required): Payment method id (splose_list_payment_methods).

## Diagnostics

Captured diagnostic sections: TLS, DNSSEC, Authorisation, Transports. The full working is on the page: https://verifymcp.io/servers/io-usefulapi-splose/splose#diagnostics

## Score history

- 2026-10-25: 62
- 2026-10-24: 61

## Common questions

### What is the splose MCP by usefulapi server?

splose MCP by usefulapi is listed in the public MCP registry as io.usefulapi/splose. Read splose patients, appointments, invoices, cases; book and cancel appointments, record payments. This page covers its hosted endpoint (https://splose.usefulapi.io/mcp).

### Is the splose MCP by usefulapi server safe to use?

splose MCP by usefulapi scores 62 out of 100 on VerifyMCP. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

### What tools does the splose MCP by usefulapi server expose?

splose MCP by usefulapi exposes 36 tools: splose_get_account, splose_list_patients, splose_get_patient, splose_list_appointments, splose_get_appointment, and 31 more. Their descriptions and schemas cost roughly 5,365 tokens of context every time the server is loaded.

### Does the splose MCP by usefulapi server require authentication?

Yes. splose MCP by usefulapi asked us for credentials when we connected, so you will need to authorise it in your MCP client before it can do anything.

### Is the splose MCP by usefulapi server still maintained?

splose MCP by usefulapi is still listed as active in the MCP registry. We last reached this channel on 25 October 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.

## Links

- Remote endpoint: https://splose.usefulapi.io/mcp
- Repository: https://github.com/m190/usefulapi-mcp
- Website: https://usefulapi.io/splose/
- Changelog RSS feed: https://verifymcp.io/servers/io-usefulapi-splose/splose.xml
- Changelog JSON feed: https://verifymcp.io/servers/io-usefulapi-splose/splose.json
- HTML version of this page: https://verifymcp.io/servers/io-usefulapi-splose/splose
