MCP reference / Catalogue
Catalogue tools
Six tools covering treatment chairs, the service catalogue and patient tags — the lists that appointments, invoices and patient records pick their values from.
How to read this
Each tool below lists its arguments exactly as the input schema declares them — the type, whether it is required, and the permitted values where the schema fixes them. There are no argument descriptions: the schemas carry types, not prose, and inventing a sentence per argument would be writing fiction about a contract.
practiceId is never an argument. It comes from your token, and the write paths strip it if a client sends one anyway.
Every example is a complete tools/call request with this tool's required arguments filled in. Errors are returned inside a 200 response with isError set — see the MCP overview for that envelope, and the full catalogue for every tool at a glance.
Catalogue
Chairs, services and tags — the lists the rest of the product picks from.
list_chairs
List the treatment chairs (bookable resources).
Example call
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "list_chairs",
"arguments": {}
}
}Result
{
"jsonrpc": "2.0",
"id": 1,
"result": {
"structuredContent": {
"status": 200,
"ok": true,
"data": { "...": "the requested records" }
}
}
}Errors
| Code | Status | When |
|---|---|---|
| unauthorized | 401 | The bearer token is missing, invalid or expired. |
list_services
List the service catalogue. Pass isPublic=true for services offered on the public booking page.
Arguments
| Tool | Type | Required? |
|---|---|---|
| isPublic | boolean | Optional |
Example call
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "list_services",
"arguments": {}
}
}Result
{
"jsonrpc": "2.0",
"id": 1,
"result": {
"structuredContent": {
"status": 200,
"ok": true,
"data": { "...": "the requested records" }
}
}
}Errors
| Code | Status | When |
|---|---|---|
| validation_failed | 400 | An argument is missing, of the wrong type, or outside its allowed values. |
| unauthorized | 401 | The bearer token is missing, invalid or expired. |
list_tags
List all tags defined for the practice.
Example call
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "list_tags",
"arguments": {}
}
}Result
{
"jsonrpc": "2.0",
"id": 1,
"result": {
"structuredContent": {
"status": 200,
"ok": true,
"data": { "...": "the requested records" }
}
}
}Errors
| Code | Status | When |
|---|---|---|
| unauthorized | 401 | The bearer token is missing, invalid or expired. |
write_chair
Create, update or delete a treatment chair. update and delete require chairId.
Arguments
| Tool | Type | Required? |
|---|---|---|
| action | create | update | delete | Required |
| chairId | string | Optional |
| title | string | Optional |
| doctorName | string | Optional |
| color | string | Optional |
| isPublic | boolean | Optional |
| position | integer | Optional |
Example call
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "write_chair",
"arguments": {
"action": "create"
}
}
}Result
{
"jsonrpc": "2.0",
"id": 1,
"result": {
"structuredContent": {
"status": 200,
"ok": true,
"data": { "...": "the written record" }
}
}
}Errors
| Code | Status | When |
|---|---|---|
| validation_failed | 400 | An argument is missing, of the wrong type, or outside its allowed values. |
| not_found | 404 | The id does not exist in your practice. A malformed id looks identical. |
| forbidden | 403 | The caller is not an owner of the practice. |
| unauthorized | 401 | The bearer token is missing, invalid or expired. |
write_service
Create, update or delete a service, or seed the vertical pack's default catalogue with action=seed_defaults. update and delete require serviceId.
Arguments
| Tool | Type | Required? |
|---|---|---|
| action | create | update | delete | seed_defaults | Required |
| serviceId | string | Optional |
| name | string | Optional |
| priceMinor | integer | Optional |
| durationMinutes | integer | Optional |
| isPublic | boolean | Optional |
Example call
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "write_service",
"arguments": {
"action": "create"
}
}
}Result
{
"jsonrpc": "2.0",
"id": 1,
"result": {
"structuredContent": {
"status": 200,
"ok": true,
"data": { "...": "the written record" }
}
}
}Errors
| Code | Status | When |
|---|---|---|
| validation_failed | 400 | An argument is missing, of the wrong type, or outside its allowed values. |
| not_found | 404 | The id does not exist in your practice. A malformed id looks identical. |
| forbidden | 403 | The caller is not an owner of the practice. |
| unauthorized | 401 | The bearer token is missing, invalid or expired. |
write_tag
Create, update or delete a patient tag. update and delete require tagId. Deleting a tag removes it from every patient carrying it.
Arguments
| Tool | Type | Required? |
|---|---|---|
| action | create | update | delete | Required |
| tagId | string | Optional |
| title | string | Optional |
| color | string | Optional |
Example call
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "write_tag",
"arguments": {
"action": "create"
}
}
}Result
{
"jsonrpc": "2.0",
"id": 1,
"result": {
"structuredContent": {
"status": 200,
"ok": true,
"data": { "...": "the written record" }
}
}
}Errors
| Code | Status | When |
|---|---|---|
| validation_failed | 400 | An argument is missing, of the wrong type, or outside its allowed values. |
| not_found | 404 | The id does not exist in your practice. A malformed id looks identical. |
| unauthorized | 401 | The bearer token is missing, invalid or expired. |
Common questions
Patient records are encrypted in transit and at rest, files are stored privately and served through short-lived signed links, and every change is written to an audit log. Staff accounts sign in with passkeys rather than shared passwords.
Yes. Every list in HyperCRM exports to CSV from the app, and your files can be downloaded at any time. Your practice data belongs to you, and there is no export fee or waiting period — on either plan, during the trial, and after you cancel.
HyperCRM is paid software. Every practice starts with a 30-day free trial of the full Complete plan, with no card required. After that, plans start at €19 and €29 a month excluding VAT, banded by how many practitioners you have. Every price is printed on the pricing page rather than quoted on a call.