Μετάβαση στο περιεχόμενο

Τεκμηρίωση / MCP

Ο διακομιστής MCP

Το HyperCRM εκθέτει το API του μέσω του Model Context Protocol ως ένα endpoint JSON-RPC, ώστε ένας MCP client να δουλεύει με ασθενείς, ραντεβού, χρεώσεις, φόρμες, αρχεία και αναφορές — με την ίδια εμβέλεια ιατρείου και τους ίδιους ρόλους που ισχύουν στο REST API.

Αλλαγές που σπάνε συμβατότητα στην 0.2.0

Τρία εργαλεία μετονομάστηκαν όταν καθιερώθηκε η σύμβαση write_*, και δεν υπάρχουν εναλλακτικά ονόματα: τα create_patient και update_patient έγιναν write_patient με action=create ή update, και το add_patient_note έγινε write_patient_note με action=create. Δύο τρόποι για το ίδιο πράγμα βλάπτουν μετρήσιμα την επιλογή εργαλείου, οπότε τα παλιά ονόματα καταργήθηκαν.

Ποιο πακέτο χρειάζεται

Το REST API και ο MCP server περιλαμβάνονται στο πακέτο Complete και δεν διατίθενται στο Essential — οι ενσωματώσεις είναι ανάγκη μεγαλύτερων ιατρείων και πραγματικό φορτίο υποστήριξης, οπότε βρίσκονται στο πακέτο που τις πληρώνει. Η σελίδα τιμών έχει κάθε κλιμάκιο. Οι OAuth clients δημιουργούνται από τις ρυθμίσεις του ιατρείου μόλις βρεθείτε στο Complete.

Τι περιλαμβάνει

60 εργαλεία — 38 αναγνώσεις, 22 εγγραφές, για ασθενείς, ραντεβού, χρεώσεις, αποδείξεις και τιμολόγια, φόρμες, αρχεία, καταλόγους (έδρες, υπηρεσίες, ετικέτες), ιατρείο και προσωπικό, αναφορές και αναζήτηση, ειδοποιήσεις, και τον κατασκευαστή ιστοσελίδας. Καθένα στηρίζεται στις ίδιες υπηρεσίες, επικυρώσεις και άδειες με το REST API, οπότε ένας agent δεν φτάνει πουθενά όπου δεν θα έφτανε ένα συνδεδεμένο μέλος του ιατρείου.

Δεν εκτίθενται resources ούτε prompts — τα resources/list και prompts/list επιστρέφουν κενά. Τα εργαλεία είναι όλη η επιφάνεια.

Σύνδεση

Ένα endpoint, POST /api/v1/mcp, με JSON-RPC 2.0 πάνω από streamable HTTP:

{
  "mcpServers": {
    "hypercrm": {
      "type": "http",
      "url": "https://your-hypercrm-origin/api/v1/mcp"
    }
  }
}

Το OPTIONS /api/v1/mcp απαντά στο preflight CORS. Το endpoint δεν στέλνει κεφαλίδα Access-Control-Allow-Credentials, και αυτό είναι ασφαλές ακριβώς επειδή κάθε κλήση απαιτεί ρητό bearer token και όχι cookie — μια σελίδα άλλης προέλευσης δεν μπορεί να εκμεταλλευτεί τη συνεδρία ενός συνδεδεμένου χρήστη.

Εξουσιοδότηση

Κάθε κλήση εργαλείου απαιτεί Authorization: Bearer <token>. Ο διακομιστής υλοποιεί την προδιαγραφή εξουσιοδότησης MCP: OAuth 2.1 με υποχρεωτικό PKCE (S256), έγγραφα μεταδεδομένων για τον προστατευόμενο πόρο και τον διακομιστή εξουσιοδότησης, και δυναμική καταχώριση client. Γίνεται επίσης δεκτό ένα Firebase ID token, που είναι ο απλούστερος δρόμος αν έχετε ήδη ένα.

Τα access token διαρκούν περίπου μία ώρα και τα refresh token 30 ημέρες· το refresh token εναλλάσσεται σε κάθε χρήση, οπότε ένα διαρρεύσαν token δουλεύει μόνο μία φορά. Τα token είναι αδιαφανείς τυχαίες συμβολοσειρές, ποτέ JWT, και αποθηκεύεται μόνο το hash τους.

Εμβέλεια ιατρείου

Το practiceId προέρχεται πάντα από το token και ποτέ από παράμετρο εργαλείου. Κανένα σχήμα εισόδου δεν το δηλώνει, και οι διαδρομές εγγραφής αφαιρούν οποιοδήποτε practiceId στείλει ο client πριν φτάσει σε υπηρεσία. Αυτό επιβάλλεται από τεστ σε όλα τα 60 εργαλεία και δεν αφήνεται στην προσοχή του αναθεωρητή: ένα μόνο εργαλείο που δεχόταν practice id θα μετέτρεπε τον διακομιστή σε ανάγνωση άλλων ιατρείων.

Ρόλοι

Το MCP επιβάλλει τους ίδιους περιορισμούς ιδιοκτήτη με το REST API. Οι αναφορές, το ιστορικό ελέγχου, όλα τα εργαλεία φορμών (και οι αναγνώσεις), οι ρυθμίσεις ιατρείου, οι προσκλήσεις, οι αλλαγές προσωπικού και κάθε εγγραφή στην ιστοσελίδα απαιτούν ρόλο ιδιοκτήτη· οι ασθενείς, τα ραντεβού, τα αρχεία, οι ειδοποιήσεις και οι αναγνώσεις καταλόγων είναι ανοιχτά σε κάθε μέλος. Ο κατάλογος εργαλείων το σημειώνει ανά εργαλείο.

Σφάλματα

Ένα εργαλείο που αποτυγχάνει επιστρέφει και πάλι HTTP 200 με έγκυρο φάκελο JSON-RPC. Η αποτυχία αναφέρεται μέσα στο αποτέλεσμα:

{
  "jsonrpc": "2.0",
  "id": 1,
  "result": {
    "isError": true,
    "structuredContent": {
      "status": 400,
      "ok": false,
      "error": {
        "code": "validation_failed",
        "message": "Request validation failed.",
        "details": [{ "path": ["firstName"], "message": "firstName is required" }]
      }
    }
  }
}

Είναι το ίδιο σχήμα σφάλματος που επιστρέφει το REST API, οπότε ένας χειριστής σφαλμάτων καλύπτει και τις δύο επιφάνειες. Τα προβλήματα σε επίπεδο μεταφοράς — κακοσχηματισμένο JSON, άγνωστη μέθοδος, λανθασμένες παράμετροι — επιστρέφουν HTTP 400 με αντικείμενο σφάλματος JSON-RPC (-32700, -32600, -32601, -32602, -32603).

Η μόνη εξαίρεση είναι ένα διαπιστευτήριο που λείπει, είναι άκυρο ή έχει λήξει: σύμφωνα με την προδιαγραφή λαμβάνει HTTP 401 με κεφαλίδα WWW-Authenticate που δείχνει στο έγγραφο μεταδεδομένων, και αυτό επιτρέπει στον client να ξεκινήσει μόνος του τη ροή OAuth.

Τι δεν εκτίθεται σκόπιμα

Δεν είναι διαθέσιμο μέσω MCPΓιατί
Τα endpoints OAuthΚυκλικό — από αυτά παίρνει ο client το token του.
Τελετουργίες passkey/WebAuthnΜόνο για browser, και η ανάκληση διαπιστευτηρίου ρισκάρει κλείδωμα λογαριασμού.
Δημόσια κράτηση, δημόσια υποβολή φόρμας, φόρμα επικοινωνίαςWidgets χωρίς ταυτοποίηση. Ένας agent που υποβάλλει φόρμες επικοινωνίας είναι φορέας spam.
Αποδοχή πρόσκλησης προσωπικούΡοή browser που ανήκει στο προσκεκλημένο πρόσωπο, όχι στον καλούντα.
Ανέβασμα αρχείων και υλικούΤα bytes πηγαίνουν από τον browser στην αποθήκευση και δεν περνούν από τον διακομιστή.
Εξαγωγή CSVΤα εργαλεία επιστρέφουν πάντα JSON.

Η ροή OAuth από την αρχή στο τέλος

Τι κάνει ο client την πρώτη φορά που συνδέεται, και τι βλέπει ο χρήστης σας.

  1. Ανακάλυψη

    Ο client καλεί το endpoint χωρίς token, λαμβάνει 401 που ονομάζει το έγγραφο μεταδεδομένων του προστατευόμενου πόρου, και το κατεβάζει μαζί με τα μεταδεδομένα του διακομιστή εξουσιοδότησης.

  2. Καταχώριση

    Ο client καταχωρείται με ένα όνομα και τα redirect URIs του και λαμβάνει client id. Δεν εκδίδεται μυστικό — οι MCP clients είναι δημόσιοι clients.

  3. Ερώτηση στον χρήστη

    Ο client ανοίγει browser στο endpoint εξουσιοδότησης με παραμέτρους PKCE. Μετά τη σύνδεση, ο χρήστης βλέπει οθόνη συναίνεσης που ονομάζει τον client και τον λογαριασμό, με Έγκριση και Άρνηση.

  4. Έγκριση

    Η έγκριση εκδίδει έναν κωδικό εξουσιοδότησης μίας χρήσης και επιστρέφει τον χρήστη στον client μαζί με αυτόν.

  5. Ανταλλαγή

    Ο client ανταλλάσσει τον κωδικό και τον PKCE verifier για access token (περίπου μία ώρα) και refresh token (30 ημέρες).

  6. Ανανέωση

    Στη λήξη, ο client ανταλλάσσει το refresh token για νέο ζεύγος. Το παλιό ακυρώνεται με τη χρήση, οπότε κάθε ένα δουλεύει ακριβώς μία φορά.

Επόμενα

Και τα 60 εργαλεία

Κάθε εργαλείο ανά τομέα, με τις παραμέτρους του, αν γράφει ή διαγράφει, αν βγαίνει έξω από το HyperCRM, και ποιος ρόλος μπορεί να το καλέσει.

Αναφορά REST API

Οι ίδιες δυνατότητες μέσω HTTP, με πλήρη αναφορά πεδίων για ασθενείς και ραντεβού.

Εργαλεία ασθενών

Δέκα εργαλεία για τον φάκελο ασθενή, σημειώσεις, αρχεία, χρεώσεις, αποδείξεις και τιμολόγια.

Εργαλεία ραντεβού

Τέσσερα εργαλεία για κρατήσεις, δεσμεύσεις έδρας και διαθεσιμότητα.

Εργαλεία χρεώσεων

Πέντε εργαλεία για το καθολικό χρεώσεων, τις αποδείξεις και τα τιμολόγια.

Εργαλεία φορμών

Πέντε εργαλεία μόνο για ιδιοκτήτη, για φόρμες και υποβολές.

Εργαλεία αρχείων

Δύο εργαλεία: ανάγνωση με υπογεγραμμένο σύνδεσμο ή μόνιμη διαγραφή.

Εργαλεία αναφορών

Έξι εργαλεία για δείκτες, τρεις αναφορές, ιστορικό ελέγχου και αναζήτηση.

Εργαλεία ειδοποιήσεων

Δύο εργαλεία για τα εισερχόμενα του ίδιου του χρήστη.

Εργαλεία ιατρείου

Οκτώ εργαλεία για το προφίλ, τα μέλη και τις προσκλήσεις.

Εργαλεία ιστοσελίδας

Δέκα εργαλεία για την ιστοσελίδα και το ιστολόγιό της, μαζί με τη δημοσίευση.

Εργαλεία καταλόγων

Έξι εργαλεία για έδρες, υπηρεσίες και ετικέτες.

Συχνές ερωτήσεις

Τα αρχεία ασθενών κρυπτογραφούνται κατά τη μεταφορά και την αποθήκευση, τα αρχεία φυλάσσονται ιδιωτικά και σερβίρονται μέσω συνδέσμων περιορισμένης διάρκειας, ενώ κάθε αλλαγή καταγράφεται. Το προσωπικό συνδέεται με passkeys αντί για κοινούς κωδικούς.

Όχι. Το ιατρείο προκύπτει από το token και ποτέ από παράμετρο εργαλείου, και κανένα σχήμα εισόδου δεν δέχεται practice id — τεστ το επιβεβαιώνει σε όλα τα 60. Ένας agent φτάνει ό,τι θα έφτανε ένα συνδεδεμένο μέλος του ιατρείου σας, και τίποτα άλλο.

Κάθε εργαλείο δηλώνει σημάνσεις MCP και το tools/list τις επιστρέφει, οπότε ο client διακρίνει αναγνώσεις από εγγραφές και εγγραφές από διαγραφές χωρίς να καλέσει τίποτα. Δεκαπέντε εργαλεία μπορούν να διαγράψουν ή να ακυρώσουν δεδομένα και τρία βγαίνουν έξω: αποστολή πρόσκλησης, δημοσίευση ιστοσελίδας, και δημιουργία δημόσιου συνδέσμου φόρμας.

Όχι. Τα create_patient, update_patient και add_patient_note καταργήθηκαν στην 0.2.0 αντί να διατηρηθούν ως εναλλακτικά, επειδή δύο τρόποι για το ίδιο πράγμα χειροτερεύουν μετρήσιμα την επιλογή εργαλείου από ένα μοντέλο. Χρησιμοποιήστε τα write_patient και write_patient_note με παράμετρο action.

Όχι σήμερα. Τα resources/list και prompts/list επιστρέφουν κενά και τα εργαλεία είναι όλη η επιφάνεια. Μια όψη των δεδομένων του ιατρείου σε μορφή resource ή prompt δεν εκτίθεται σήμερα από τον server, οπότε κάθε ενσωμάτωση περνά από τη λίστα εργαλείων.