splose MCP by usefulapi
io.usefulapi/sploseusefulapi.iostreamable-httpv1.0.0Scanned
Read splose patients, appointments, invoices, cases; book and cancel appointments, record payments.
36 tools: 4 can delete or cancel things, 1 do something that can't be undone, 4 change things and 27 only read.
- Reads private data · 10
- Reads text others write · 6
- Can send data out · 2
- 2 findings
Anlyon alternative
9 of these tools change something. Run those as governed actions.
Declare what an action changes, and Anlyon puts it under a shared limit, binds every approval to the exact request, and grades the outcome. It works on any HTTPS API you can describe as an action.
Anlyon does not run, proxy or govern this MCP server. A tool your own code calls directly is not routed through Anlyon and is not governed by it.
Import an OpenAPI spec →Tools
Grouped by what each tool does, most consequential first. Open one for its reasons and full description; descriptions are the publisher's own words.
36 tools
Deletes or cancels 4Claude Code: deny
splose_cancel_appointmentWRITE: cancels ONE appointment with a cancellation reason (ids from splose_list_cancellation_reasons) and an optional note.No findings
Why it is in this group
- The name "splose_cancel_appointment" says "cancel": a word for removing or ending something.
- The description says "Cannot be undone".
- The server marks it destructive (destructiveHint: true).
Description, as the server wrote it 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.
Annotations the server declares
- title: Cancel an appointment
- destructiveHint: true
splose_create_appointmentWRITE: books ONE appointment for one patient with one practitioner, service and location, from start to end (UTC).No findings
Why it is in this group
- The name "splose_create_appointment" says "create": a word for a change.
- The server marks it destructive (destructiveHint: true).
Description, as the server wrote it 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.
Annotations the server declares
- title: Create an appointment
- destructiveHint: true
splose_record_paymentWRITE, 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.No findings
Why it is in this group
- The name "splose_record_payment" says "payment": a word that usually means money moves, which cannot be taken back.
- The server marks it destructive (destructiveHint: true).
Description, as the server wrote it 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.
Annotations the server declares
- title: Record a payment against an invoice
- destructiveHint: true
splose_update_appointmentWRITE: changes the time, service, location, practitioner, case or patient of ONE existing appointment; send only the fields to change.No findings
Why it is in this group
- The name "splose_update_appointment" says "update": a word for a change.
- The server marks it destructive (destructiveHint: true).
Description, as the server wrote it 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}.
Annotations the server declares
- title: Update (reschedule) an appointment
- destructiveHint: true
- idempotentHint: true
Can't be undone 1Claude Code: ask
splose_list_paymentsPayments received: payment number, amount, date, patient, location, payment method, the invoices each payment settles and credit allocations.1 finding
Why it is in this group
- The name "splose_list_payments" says "list": a word for reading.
- The description's first verb is "payment": a word that usually means money moves, which cannot be taken back.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
Findings
- Warn
The server marks "splose_list_payments" read-only (readOnlyHint: true), and its own name, description or input give the class "irreversible".
What this check looks forMatched text
annotations: {"readOnlyHint":true}; The name "splose_list_payments" says "list": a word for reading.
Description, as the server wrote it Payments received: payment number, amount, date, patient, location, payment method, the invoices each payment settles and credit allocations. GET /payments.
Annotations the server declares
- title: List payments
- readOnlyHint: true
Changes things 4Claude Code: ask
splose_create_contactWRITE: adds ONE contact (GP, plan manager, referrer, payer).Can send data outNo findings
Why it is in this group
- The name "splose_create_contact" says "create": a word for a change.
What it can reach
- outboundThe input takes a destination (input.phoneNumbers): what the tool writes goes there.
Description, as the server wrote it 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.
Annotations the server declares
- title: Create a contact
- destructiveHint: false
splose_create_patientWRITE: adds ONE new patient record (first and last name required).Can send data outNo findings
Why it is in this group
- The name "splose_create_patient" says "create": a word for a change.
What it can reach
- outboundThe input takes a destination (input.phoneNumbers): what the tool writes goes there.
Description, as the server wrote it 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.
Annotations the server declares
- title: Create a patient
- destructiveHint: false
splose_list_servicesThe service catalogue: name, type, code, duration (minutes), unit (Hour or Each), price, tax type, group size and tags.1 finding
Why it is in this group
- The name "splose_list_services" says "list": a word for reading.
- The input takes a statement or command to run (input.code), which can change anything it can reach.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
Findings
- Warn
The server marks "splose_list_services" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true}; The name "splose_list_services" says "list": a word for reading.
Description, as the server wrote it The service catalogue: name, type, code, duration (minutes), unit (Hour or Each), price, tax type, group size and tags. GET /services.
Annotations the server declares
- title: List services
- readOnlyHint: true
splose_mark_patient_arrivedWRITE: marks the patient of ONE appointment as arrived (check-in).No findings
Why it is in this group
- The name "splose_mark_patient_arrived" says "mark": a word for a change.
Description, as the server wrote it 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.
Annotations the server declares
- title: Mark a patient as arrived
- destructiveHint: false
- idempotentHint: true
Only reads 27Show 27 read-only tools
splose_find_free_slotsBookable 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).No findings
Why it is in this group
- The name "splose_find_free_slots" says "find": a word for reading.
Description, as the server wrote it 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.
Annotations the server declares
- title: Find free appointment slots
- readOnlyHint: true
splose_get_accountThe organisation and the practitioner who owns the API key, plus the key's expiry date.No findings
Why it is in this group
- The name "splose_get_account" says "get": a word for reading.
Description, as the server wrote it The organisation and the practitioner who owns the API key, plus the key's expiry date. Good first call. GET /me.
Annotations the server declares
- title: Get the account behind the API key
- readOnlyHint: true
splose_get_appointmentOne appointment in full, with each patient's status, case, invoice and cancellation details.No findings
Why it is in this group
- The name "splose_get_appointment" says "get": a word for reading.
Description, as the server wrote it One appointment in full, with each patient's status, case, invoice and cancellation details. GET /appointments/{id}.
Annotations the server declares
- title: Get an appointment
- readOnlyHint: true
splose_get_caseOne case in full, with its appointment connections.No findings
Why it is in this group
- The name "splose_get_case" says "get": a word for reading.
Description, as the server wrote it One case in full, with its appointment connections. GET /cases/{id}.
Annotations the server declares
- title: Get a case
- readOnlyHint: true
splose_get_contactOne contact in full.Reads private dataNo findings
Why it is in this group
- The name "splose_get_contact" says "get": a word for reading.
What it can reach
- private-dataThe name "splose_get_contact" says "get" and "contact": it reads contacts.
- private-dataThe description's first sentence says "contact": it reads contacts.
Description, as the server wrote it One contact in full. GET /contacts/{id}.
Annotations the server declares
- title: Get a contact
- readOnlyHint: true
splose_get_invoiceOne invoice in full with its line items and payments.No findings
Why it is in this group
- The name "splose_get_invoice" says "get": a word for reading.
Description, as the server wrote it One invoice in full with its line items and payments. GET /invoices/{id}.
Annotations the server declares
- title: Get an invoice
- readOnlyHint: true
splose_get_locationOne location in full.No findings
Why it is in this group
- The name "splose_get_location" says "get": a word for reading.
Description, as the server wrote it One location in full. GET /locations/{id}.
Annotations the server declares
- title: Get a location
- readOnlyHint: true
splose_get_patientOne patient in full: contact details, address, NDIS number and plan info, Medicare/health fund, emergency contact, tags and custom fields.Reads private dataNo findings
Why it is in this group
- The name "splose_get_patient" says "get": a word for reading.
What it can reach
- private-dataThe description's first sentence says "contact": it reads contacts.
Description, as the server wrote it 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}.
Annotations the server declares
- title: Get a patient
- readOnlyHint: true
splose_get_paymentOne payment in full.No findings
Why it is in this group
- The name "splose_get_payment" says "get": a word for reading.
Description, as the server wrote it One payment in full. GET /payments/{id}.
Annotations the server declares
- title: Get a payment
- readOnlyHint: true
splose_get_practitionerOne practitioner in full, including provider numbers and connections.No findings
Why it is in this group
- The name "splose_get_practitioner" says "get": a word for reading.
Description, as the server wrote it One practitioner in full, including provider numbers and connections. GET /practitioners/{id}.
Annotations the server declares
- title: Get a practitioner
- readOnlyHint: true
splose_get_practitioner_availabilityA practitioner's working-hours availability per date and location (start/end time, weekly or fortnightly repeat).No findings
Why it is in this group
- The name "splose_get_practitioner_availability" says "get": a word for reading.
Description, as the server wrote it 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}.
Annotations the server declares
- title: Get a practitioner's availability
- readOnlyHint: true
splose_get_serviceOne service in full, including provider-travel pricing.No findings
Why it is in this group
- The name "splose_get_service" says "get": a word for reading.
Description, as the server wrote it One service in full, including provider-travel pricing. GET /services/{id}.
Annotations the server declares
- title: Get a service
- readOnlyHint: true
splose_list_appointmentsAppointments in id order: start/end (UTC), service, location, practitioner, price, note and the per-patient status (Arrived, Did not arrive, Cancelled, Completed, cancellation reas…Reads private dataNo findings
Why it is in this group
- The name "splose_list_appointments" says "list": a word for reading.
What it can reach
- private-dataThe description's first sentence says "note": it reads notes.
Description, as the server wrote it 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.
Annotations the server declares
- title: List appointments
- readOnlyHint: true
splose_list_busy_timesBlocked-out time in practitioner calendars (leave, admin time): start/end, location, practitioners, type and note.Reads private dataNo findings
Why it is in this group
- The name "splose_list_busy_times" says "list": a word for reading.
What it can reach
- private-dataThe description's first sentence says "calendar": it reads calendars.
Description, as the server wrote it Blocked-out time in practitioner calendars (leave, admin time): start/end, location, practitioners, type and note. GET /busy-times.
Annotations the server declares
- title: List busy times
- readOnlyHint: true
splose_list_cancellation_reasonsCancellation reasons with their ids, needed to cancel an appointment.No findings
Why it is in this group
- The name "splose_list_cancellation_reasons" says "list": a word for reading.
Description, as the server wrote it Cancellation reasons with their ids, needed to cancel an appointment. GET /cancellation-reasons.
Annotations the server declares
- title: List cancellation reasons
- readOnlyHint: true
splose_list_casesCases (funding referrals and plans): case number, budget, hours or appointment allowance, issue and expiry dates, tracking type, open flag and utilisation alert.Reads text others writeNo findings
Why it is in this group
- The name "splose_list_cases" says "list": a word for reading.
What it can reach
- untrusted-inputThe description's first sentence says "issue": it reads issues, which other people can write.
Description, as the server wrote it 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.
Annotations the server declares
- title: List cases
- readOnlyHint: true
splose_list_contactsContacts (GPs, plan managers, referrers, invoice recipients): name, type, email, address, phones and the ids of their patients, invoices and cases.Reads private dataReads text others writeNo findings
Why it is in this group
- The name "splose_list_contacts" says "list": a word for reading.
What it can reach
- private-dataThe name "splose_list_contacts" says "list" and "contact": it reads contacts.
- private-dataThe description's first sentence says "contact": it reads contacts.
- untrusted-inputThe description's first sentence says "email": it reads inbound email, which other people can write.
Description, as the server wrote it Contacts (GPs, plan managers, referrers, invoice recipients): name, type, email, address, phones and the ids of their patients, invoices and cases. GET /contacts.
Annotations the server declares
- title: List contacts
- readOnlyHint: true
splose_list_credit_notesCredit notes: number, invoice, patient, subtotal, tax, total, sent status, items and allocations.Reads private dataNo findings
Why it is in this group
- The name "splose_list_credit_notes" says "list": a word for reading.
What it can reach
- private-dataThe name "splose_list_credit_notes" says "list" and "note": it reads notes.
- private-dataThe description's first sentence says "note": it reads notes.
Description, as the server wrote it Credit notes: number, invoice, patient, subtotal, tax, total, sent status, items and allocations. GET /credit-notes.
Annotations the server declares
- title: List credit notes
- readOnlyHint: true
splose_list_custom_fieldsThe custom fields defined for patients: id, name, type (short text, dropdown, date and so on), required flag and options.No findings
Why it is in this group
- The name "splose_list_custom_fields" says "list": a word for reading.
Description, as the server wrote it The custom fields defined for patients: id, name, type (short text, dropdown, date and so on), required flag and options. GET /custom-field/.
Annotations the server declares
- title: List patient custom fields
- readOnlyHint: true
splose_list_invoicesInvoices: number, issue/due dates, patient, contact, location, practitioner, subtotal, tax, total, paid amount, status (Draft, Awaiting Payment, Paid), line items and payment ids.Reads private dataReads text others writeNo findings
Why it is in this group
- The name "splose_list_invoices" says "list": a word for reading.
What it can reach
- private-dataThe description's first sentence says "contact": it reads contacts.
- untrusted-inputThe description's first sentence says "issue": it reads issues, which other people can write.
Description, as the server wrote it 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.
Annotations the server declares
- title: List invoices
- readOnlyHint: true
splose_list_locationsPractice locations: title, address, phone, email, timezone, online-booking flag and the ids of the services offered there.Reads private dataReads text others writeNo findings
Why it is in this group
- The name "splose_list_locations" says "list": a word for reading.
What it can reach
- private-dataThe description's first sentence says "email": it reads mail.
- untrusted-inputThe description's first sentence says "email": it reads inbound email, which other people can write.
Description, as the server wrote it Practice locations: title, address, phone, email, timezone, online-booking flag and the ids of the services offered there. GET /locations.
Annotations the server declares
- title: List locations
- readOnlyHint: true
splose_list_patient_formsForms sent to patients: title, status (Incomplete, In progress, Completed), patient, appointment, template and submission time.No findings
Why it is in this group
- The name "splose_list_patient_forms" says "list": a word for reading.
Description, as the server wrote it Forms sent to patients: title, status (Incomplete, In progress, Completed), patient, appointment, template and submission time. The form content is included. GET /patient-forms.
Annotations the server declares
- title: List patient forms
- readOnlyHint: true
splose_list_patientsPatients (clients) of the practice, filtered, in id order, as short rows: id, name, email, birthdate, phones, tags, alert, archived.Reads private dataReads text others writeNo findings
Why it is in this group
- The name "splose_list_patients" says "list": a word for reading.
What it can reach
- private-dataThe description's first sentence says "email": it reads mail.
- untrusted-inputThe description's first sentence says "email": it reads inbound email, which other people can write.
Description, as the server wrote it 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.
Annotations the server declares
- title: List patients
- readOnlyHint: true
splose_list_payment_methodsPayment methods (cash, card, bank transfer and so on) with their ids, needed to record a payment.No findings
Why it is in this group
- The name "splose_list_payment_methods" says "list": a word for reading.
Description, as the server wrote it Payment methods (cash, card, bank transfer and so on) with their ids, needed to record a payment. GET /payment-methods.
Annotations the server declares
- title: List payment methods
- readOnlyHint: true
splose_list_practitionersPractitioners (staff): name, email, profession, role, active flag, online-booking flag, timezone and their location/service connections.Reads private dataReads text others writeNo findings
Why it is in this group
- The name "splose_list_practitioners" says "list": a word for reading.
What it can reach
- private-dataThe description's first sentence says "email": it reads mail.
- untrusted-inputThe description's first sentence says "email": it reads inbound email, which other people can write.
Description, as the server wrote it Practitioners (staff): name, email, profession, role, active flag, online-booking flag, timezone and their location/service connections. GET /practitioners.
Annotations the server declares
- title: List practitioners
- readOnlyHint: true
splose_list_support_activitiesNon-appointment billable activities (NDIS support activities): patient, practitioner, service, item code, quantity, price, invoice id.No findings
Why it is in this group
- The name "splose_list_support_activities" says "list": a word for reading.
Description, as the server wrote it Non-appointment billable activities (NDIS support activities): patient, practitioner, service, item code, quantity, price, invoice id. GET /support-activities.
Annotations the server declares
- title: List support activities
- readOnlyHint: true
splose_list_waitlistWaitlist entries: patient, practitioner, location, wanted services, preferred days and time, tags and active flag.No findings
Why it is in this group
- The name "splose_list_waitlist" says "list": a word for reading.
Description, as the server wrote it Waitlist entries: patient, practitioner, location, wanted services, preferred days and time, tags and active flag. GET /waitlists.
Annotations the server declares
- title: List waitlist items
- readOnlyHint: true
This is not a safety rating, and no finding is not a safety guarantee. The groups and findings come from fixed checks of the tool definitions the server returned on the date shown, not from its code or what it does when called. How the checks work.
Exfil surface
Which tools read private data, which read text someone else can write, and which can send data out. One of each is a path a prompt injection can use.
120 paths in this server alone from private data, through text someone else wrote, to a way out. Denying 2 outbound tools breaks every one.
- Reads private data10
- Reads files, mail, messages, databases, secrets, calendars or repositories.
- Reads text others write6
- Brings in text someone else can write: web pages, inbound email, messages, issues and comments.
- Can send data out2
- Can carry data to people or systems: it sends, posts or publishes, or takes a recipient, channel or URL.
{
"permissions": {
"deny": [
"mcp__splose__splose_create_contact",
"mcp__splose__splose_create_patient"
]
}
}Other servers in the same agent add their own tools to these paths. Audit your whole setup to see them together.
Findings
Matches of fixed checks, with the text they matched.
The server marks "splose_list_services" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true}; The name "splose_list_services" says "list": a word for reading.
The server marks "splose_list_payments" read-only (readOnlyHint: true), and its own name, description or input give the class "irreversible".
What this check looks forMatched text
annotations: {"readOnlyHint":true}; The name "splose_list_payments" says "list": a word for reading.
History
Changes to its tool definitions and to its remote endpoint, newest first.
No change seen yet. Its tools are rescanned every day, and a remote endpoint is looked at once a week.
Install
Pinned to version 1.0.0. Values in angle brackets are yours to fill in.
claude mcp add --transport http splose https://splose.usefulapi.io/mcpclaude mcp add --transport http splose https://splose.usefulapi.io/mcpRun in a terminal.
Claude Code permissions
Allow the reads, ask before a change or a way out, deny the deletes. Paste into .claude/settings.json.
{
"permissions": {
"allow": [
"mcp__splose__splose_get_account",
"mcp__splose__splose_list_patients",
"mcp__splose__splose_get_patient",
"mcp__splose__splose_list_appointments",
"mcp__splose__splose_get_appointment",
"mcp__splose__splose_list_practitioners",
"mcp__splose__splose_get_practitioner",
"mcp__splose__splose_list_locations",
"mcp__splose__splose_get_location",
"mcp__splose__splose_get_service",
"mcp__splose__splose_list_contacts",
"mcp__splose__splose_get_contact",
"mcp__splose__splose_list_cases",
"mcp__splose__splose_get_case",
"mcp__splose__splose_list_invoices",
"mcp__splose__splose_get_invoice",
"mcp__splose__splose_get_payment",
"mcp__splose__splose_list_payment_methods",
"mcp__splose__splose_list_credit_notes",
"mcp__splose__splose_list_waitlist",
"mcp__splose__splose_list_patient_forms",
"mcp__splose__splose_list_support_activities",
"mcp__splose__splose_list_busy_times",
"mcp__splose__splose_list_cancellation_reasons",
"mcp__splose__splose_list_custom_fields",
"mcp__splose__splose_get_practitioner_availability",
"mcp__splose__splose_find_free_slots"
],
"ask": [
"mcp__splose__splose_list_services",
"mcp__splose__splose_list_payments",
"mcp__splose__splose_mark_patient_arrived",
"mcp__splose__splose_create_patient",
"mcp__splose__splose_create_contact"
],
"deny": [
"mcp__splose__splose_create_appointment",
"mcp__splose__splose_update_appointment",
"mcp__splose__splose_cancel_appointment",
"mcp__splose__splose_record_payment"
]
}
}Tools that only read are allowed, tools that change things ask first, tools that delete or cancel are denied. A read that can send data out (it takes a URL, say) asks first too. It assumes the server is installed as splose. Review it before you use it.
Capability tags behind 13 rules
- mcp__splose__splose_list_patients private-data, untrusted-input
- mcp__splose__splose_get_patient private-data
- mcp__splose__splose_list_appointments private-data
- mcp__splose__splose_list_practitioners private-data, untrusted-input
- mcp__splose__splose_list_locations private-data, untrusted-input
- mcp__splose__splose_list_contacts private-data, untrusted-input
- mcp__splose__splose_get_contact private-data
- mcp__splose__splose_list_cases untrusted-input
- mcp__splose__splose_list_invoices private-data, untrusted-input
- mcp__splose__splose_list_credit_notes private-data
- mcp__splose__splose_list_busy_times private-data
- mcp__splose__splose_create_patient outbound
- mcp__splose__splose_create_contact outbound
Pin
Keep the decision: fail CI when the tools change, follow every change, or show a badge.
Pin in CI
Fail a build when the tools you reviewed are not the tools the server serves today.
curl -s "https://anlyon.dev/api/v1/servers/io.usefulapi/splose/verify?hash=846e2e440583393f2eed7e81b19a55894894b85768d4916f86ee8d0873d6a345" | jq -e '.changed == false'Pinned hash 846e2e440583, from Oct 24, 2026, 16:21 UTC.
Watch
Get told when its tools change: a new tool, a new description, a new class.
https://anlyon.dev/servers/io.usefulapi/splose/changes.xmlAn Atom feed. Works in any feed reader or Slack's RSS app.
Badge
[](https://anlyon.dev/servers/io.usefulapi/splose)Source: MCP Registry · repository. Synced Oct 24, 2026, 17:18 UTC.