nessie

MCP και συνδεδεμένα εργαλεία

Συνδέστε το Nessie με διακομιστές MCP και αντιστοιχίστε έναν εξωτερικό πράκτορα, ώστε να δουλεύει μέσα στο Nessie εκ μέρους σας.

Τι είναι το MCP

Το Model Context Protocol είναι μια μικρή, ανοιχτή σύμβαση για την περιγραφή εργαλείων σε ένα γλωσσικό μοντέλο και για την κλήση τους. Ένας διακομιστής δηλώνει τι μπορεί να κάνει — μια λίστα ονομασμένων εργαλείων, το καθένα με ένα σχήμα JSON για τα ορίσματά του — και ένας πελάτης ανακαλύπτει αυτή τη λίστα και τα καλεί για λογαριασμό του μοντέλου. Είναι σκόπιμα απλό: η αξία είναι ότι μία ενσωμάτωση γραμμένη μία φορά δουλεύει με κάθε μοντέλο και κάθε προϊόν που μιλά το πρωτόκολλο.

Το Nessie βρίσκεται και στις δύο πλευρές του

Αξίζει να είμαστε ακριβείς σε αυτό, επειδή οι δύο πλευρές μπερδεύονται εύκολα, και βρίσκονται σε σκόπιμα διαφορετικές διαδρομές.

  • Εξερχόμενη. Το Nessie είναι πελάτης MCP. Συνδέετε διακομιστές που τρέχει κάποιος άλλος, και τα εργαλεία που εκθέτουν γίνονται εργαλεία που μπορούν να χρησιμοποιούν οι πράκτορές σας. Η επιφάνεια διαχείρισης είναι η /api/mcp/*.
  • Εισερχόμενη. Το Nessie είναι επίσης διακομιστής MCP. Ένας πράκτορας που τρέχει αλλού — το Claude Code ή το Codex στον υπολογιστή ενός προγραμματιστή — μπορεί να καλέσει τους πίνακές σας και τα έγγραφά σας. Αυτό το τελικό σημείο είναι το POST /mcp, έξω από το /api σκόπιμα, ώστε οι δύο αντίθετες σημασίες να μην βρίσκονται σε απόσταση ενός τμήματος διαδρομής.

Σύνδεση ενός διακομιστή MCP με το Nessie

Καταχωρίσεις καταλόγου και στιγμιότυπα

Υπάρχουν δύο αντικείμενα, και η διάκριση έχει σημασία:

  • Μια καταχώριση καταλόγου είναι ο ορισμός ενός διακομιστή — το όνομά του, η μεταφορά του και ο τρόπος ταυτοποίησής του. Γράφεται μία φορά και μπορεί να μοιραστεί.
  • Ένα στιγμιότυπο είναι αυτή η καταχώριση εγκατεστημένη σε ένα επίπεδο, με τα διαπιστευτήρια που φτάνουν σε αυτήν. Η εγκατάσταση της ίδιας καταχώρισης για δύο διαφορετικές ομάδες δίνει δύο στιγμιότυπα.

Οι περισσότεροι δεν αγγίζουν ποτέ κανένα από τα δύο απευθείας. Η είσοδος στο admin είναι το κατάστημα εφαρμογών στο /admin/apps: εμφανίζει τον ίδιο κατάλογο με κρυμμένα τα στοιχεία σύνδεσης, και το Connect σε μια καταχώριση δημιουργεί ένα στιγμιότυπο. Όσοι διαχειρίζονται την εγκατάσταση και θέλουν τα αντικείμενα ακατέργαστα χρησιμοποιούν τα /api/mcp/catalog και /api/mcp/instances.

Αν ένας διακομιστής δεν υπάρχει ακόμα στον κατάλογο, το POST /api/mcp/discover δέχεται ένα URL και επιστρέφει όσα λέει ο ίδιος ο διακομιστής για τον εαυτό του, και το POST /api/mcp/library/import τραβά μια καταχώριση από τη δημόσια βιβλιοθήκη διακομιστών. Μια σύνδεση πρώτης εκτέλεσης μπορεί επίσης να δημιουργηθεί απευθείας από ένα URL με το POST /api/apps/custom.

Μεταφορές

Το Nessie συνδέεται με απομακρυσμένους διακομιστές μέσω HTTP. Δουλεύουν δύο μεταφορές: το streamable HTTP (η τρέχουσα μεταφορά του MCP) και η παλαιότερη μεταφορά HTTP+SSE. Επιλέξτε http, εκτός αν ο διακομιστής προσφέρει μόνο sse.

Η μεταφορά stdio απορρίπτεται για τους connectors που γράφετε εσείς. Το stdio σημαίνει ότι ο διακομιστής MCP είναι μια τοπική διεργασία που ξεκινά ο φιλοξενητής (host), και η εκτέλεση αυθαίρετων προγραμμάτων μέσα στον διακομιστή του Nessie δεν είναι κάτι που ένας διαχειριστής μπορεί να ελέγξει με νόημα. Οι διακομιστές που δημοσιεύονται μόνο ως πακέτο για τοπική εκτέλεση αφαιρούνται από τις εισαγωγές της βιβλιοθήκης για τον ίδιο λόγο. Η τιμή ws υπάρχει στο πεδίο του πρωτοκόλλου και δεν έχει υλοποιηθεί — μια σύνδεση που τη χρησιμοποιεί αποτυγχάνει όταν το Nessie προσπαθήσει να την ανοίξει.

Πώς το Nessie ταυτοποιείται στον διακομιστή

Μια καταχώριση καταλόγου δηλώνει μία από πέντε μεθόδους: none, api_key, bearer, basic ή oauth2.

Το api_key είναι εισαγωγή κεφαλίδας, και η καταχώριση λέει ποια κεφαλίδα και ποιο πρόθεμα χρησιμοποιεί. Άρα τα Authorization: Bearer …, X-API-Key: … και X-Auth-Token: Token … είναι όλα η ίδια μέθοδος, ρυθμισμένη διαφορετικά. Το κλειδί επικολλάται μία φορά με το POST /api/mcp/instances/:instanceId/secret και δεν ξαναδιαβάζεται ποτέ· καμία απάντηση από τις διαδρομές των στιγμιοτύπων δεν μεταφέρει αναφορά διαπιστευτηρίου.

Το oauth2 έχει δύο μορφές. Ένας διακομιστής με σταθερά τελικά σημεία τα έχει στην καταχώρισή του. Ένας διακομιστής που δημοσιεύει τυπικά μεταδεδομένα δεν χρειάζεται τίποτα ρυθμισμένο: το Nessie διαβάζει τα έγγραφα του προστατευόμενου πόρου και του διακομιστή εξουσιοδότησης, και φτιάχνει μόνο του έναν πελάτη, είτε μέσω δυναμικής εγγραφής πελάτη (dynamic client registration) είτε μέσω του εγγράφου μεταδεδομένων client ID που δημοσιεύει στη δική του διαδρομή well-known. Με οποιονδήποτε τρόπο, η χειραψία είναι η POST /api/mcp/instances/:instanceId/oauth/start, ακολουθούμενη από την ανακατεύθυνση του παρόχου πίσω στο GET /api/mcp/oauth/callback. Το διακριτικό κατάστασης (state) χρησιμοποιείται μία φορά, αποθηκεύεται στη βάση δεδομένων και ισχύει για δέκα λεπτά, και το PKCE χρησιμοποιείται πάντα.

Ένας κανόνας εκπλήσσει τους περισσότερους: ούτε ο ιδιοκτήτης ενός οργανισμού δεν μπορεί να συνδέσει προσωπικό ή OAuth διακριτικό σε κάποιον άλλο. Κοινόχρηστο διαπιστευτήριο είναι δυνατό μόνο για καταχώριση τύπου API key που έχει επικυρωθεί ως τέτοια· οτιδήποτε άλλο απορρίπτεται. Ένα διαπιστευτήριο που ανήκει σε ένα πρόσωπο παραμένει διαπιστευτήριο αυτού του προσώπου.

Πού φυλάσσονται τα διαπιστευτήρια

Τα μυστικά των connectors και τα δέματα διακριτικών OAuth αποθηκεύονται στη δική σας βάση Postgres, σε φακέλους AES-256-GCM με συγκεκριμένο σκοπό, κάτω από το ανεξάρτητα εκδοσιοποιημένο δακτύλιο κλειδιών κρυπτογράφησης της εγκατάστασης, και αναφέρονται μόνο μέσω αδιαφανών αναφορών secret_*. Σκόπιμα δεν βρίσκονται στο εξωτερικό secret vault που κρατά τα υπόλοιπα μυστικά του Nessie. Μια παραγωγική εγκατάσταση που δεν έχει ρυθμίσει το κρυπτογραφημένο store αρνείται να ξεκινήσει, αντί να ολοκληρώσει μια χειραψία OAuth που θα έπεφτε μετά στο κενό.

Πού φτάνει μια σύνδεση

Ένα στιγμιότυπο εγκαθίσταται σε ένα από έξι πεδία (scope): system, organization, project, team, channel ή user. Το πεδίο είναι σκληρό όριο για το ποιες εκτελέσεις μπορούν να το χρησιμοποιήσουν, και οι χορηγήσεις μπορούν μόνο να το περιορίσουν περαιτέρω, ποτέ να το διευρύνουν — άρα ένας connector που εγκαταστήσατε με τον δικό σας λογαριασμό δεν μπορεί να γίνει αθόρυβα ένας connector για ολόκληρο τον οργανισμό.

Το ποιος μπορεί να εγκαθιστά πού ακολουθεί το ίδιο σχήμα: οι ιδιοκτήτες και οι διαχειριστές του οργανισμού διαχειρίζονται εγκαταστάσεις σε οποιοδήποτε πεδίο· όλοι οι υπόλοιποι εγκαθιστούν connectors στο δικό τους πεδίο user και μπορούν να δουν τις κοινές εγκαταστάσεις στις οποίες έχουν δικαίωμα πρόσβασης.

Η παροχή εργαλείου σε πράκτορα

Η σύνδεση ενός διακομιστή δεν παραδίδει τα εργαλεία του σε κανέναν. Όταν εγκαθίσταται ένα στιγμιότυπο, το Nessie το ελέγχει και προβάλλει κάθε εργαλείο που διαφημίζει στο μητρώο εργαλείων — αυτό που βλέπει ο admin στο /admin/advanced/tools: εργαλεία ενσωματωμένα, εργαλεία MCP, εργαλεία δέσμης (bundle) και εργαλεία εκτελεστή σε μία λίστα, το καθένα με την πηγή και την κατάστασή του.

Ένα προβαλλόμενο εργαλείο έχει μία από τρεις καταστάσεις: active, pending_review ή disabled. Τα εργαλεία από εγκατάσταση κοινού πεδίου φτάνουν ως pending_review και πρέπει να εγκριθούν σε εκείνη τη σελίδα πριν τα δει ένας πράκτορας. Τα εργαλεία από τη δική σας εγκατάσταση user είναι ενεργά αμέσως, επειδή το μόνο πρόσωπο που εκτίθεται είστε εσείς. Ο έλεγχος επαναλαμβάνεται και δεν είναι εφάπαξ τελετή: αν μια μεταγενέστερη ανίχνευση βρει ότι η περιγραφή ή το σχήμα ενός εργαλείου έχει αλλάξει, το εργαλείο επιστρέφει σε pending_review και δεν προσφέρεται πια, μέχρι να το εξετάσει κάποιος.

Ποιοι πράκτορες μπορούν μετά να καλούν ένα ενεργό εργαλείο αποφασίζεται με έναν από δύο τρόπους:

  • Μια σύνδεση που δημιουργείται μέσω του καταστήματος εφαρμογών απαιτεί ρητή χορήγηση. Ένας πράκτορας παίρνει το εργαλείο μόνο όταν μια χορήγηση το ονομάζει, και η χορήγηση ελέγχεται έναντι του τρέχοντος αποτυπώματος (fingerprint) του εργαλείου, οπότε ένα αλλαγμένο εργαλείο χρειάζεται νέα απόφαση.
  • Αλλιώς το εργαλείο είναι ενεργό από προεπιλογή για τους πράκτορες στην εμβέλεια του πεδίου του, και οι μεμονωμένοι πράκτορες απενεργοποιούνται από τον πίνακα λεπτομερειών του εργαλείου.

Μια χορήγηση ονομάζει ακριβώς έναν αποδέκτη (principal) — έναν ρόλο ή έναν πράκτορα, ποτέ και τα δύο — και η άρνηση υπερισχύει της άδειας. Για σύνδεση πεδίου user το ερώτημα δεν τίθεται: κάθε πράκτορας με τον οποίο μιλά αυτό το πρόσωπο μπορεί να τη χρησιμοποιήσει, και το μόνο που την αποκλείει είναι μια ρητή απενεργοποίηση.

Κάτι που είναι εύκολο να ψάξετε στο λάθος μέρος: το /settings/accounts στο admin είναι οι συνδεδεμένοι λογαριασμοί — Slack, γραμματοκιβώτια, συνδρομές μοντέλων και οι συνδέσεις OAuth με Linear, Jira, GitHub και Trello που υποστηρίζουν εξωτερικούς πίνακες. Οι connectors MCP βρίσκονται στο /admin/apps, και τα εργαλεία που παράγουν στο /admin/advanced/tools.

Πύλες έγκρισης στις κλήσεις εργαλείων

Ορισμένες κλήσεις εργαλείων σταματούν και περιμένουν έναν άνθρωπο. Όταν συμβαίνει αυτό, η εκτέλεση δεν αποτυγχάνει: η κλήση παγώνει — το όνομα του εργαλείου, ένα hash των ορισμάτων του και αρκετή κατάσταση για να συνεχιστεί — και ένα αίτημα έγκρισης εμφανίζεται στο /api/approvals για να απαντήσει κάποιος. Η συνέχιση είναι ιδεοδύναμη, οπότε μια διπλή έγκριση δεν μπορεί να εκτελέσει την κλήση δύο φορές. Το πρόσωπο που αποφασίζει βλέπει μια περιορισμένη περίληψη του τι ζητείται· τα ακριβή ορίσματα και η εκτέλεση προέλευσης μένουν στον διακομιστή.

Υπάρχουν δύο διακριτές πύλες, και ρυθμίζονται διαφορετικά.

  • Δομικές πύλες είναι ιδιότητα ορισμένων ενσωματωμένων εργαλείων και δεν ρυθμίζονται. Η αποστολή email από το γραμματοκιβώτιο ενός πράκτορα ή από ένα συνδεδεμένο, η αποστολή προσχεδίου Gmail, η αποσύνδεση λογαριασμού αλληλογραφίας, η δημιουργία, αλλαγή ή ακύρωση συμβάντος ημερολογίου, και μια ενέργεια στον browser που θα έγραφε σε ιστότοπο στον οποίο ο browser δεν είναι συνδεδεμένος, υπάγονται όλα σε αυτόν τον έλεγχο. Έχουν παράθυρο 24 ωρών για απάντηση, αντί για τα συνηθισμένα 30 λεπτά.
  • Πύλες πολιτικής προέρχονται από κανόνες πολιτικής στο ζεύγος tool/invoke. Ένας κανόνας που επιτρέπει μια κλήση μπορεί να φέρει requiresApproval, και χωρίς επαληθευμένη έγκριση η αξιολόγηση επιστρέφει APPROVAL_REQUIRED αντί να εκτελέσει την κλήση. Οι κανόνες αξιολογούνται με πρώτα τις απορρίψεις και ταξινομούνται ανά πεδίο.

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


Σύνδεση ενός εξωτερικού πράκτορα με το Nessie

Η αντίθετη κατεύθυνση. Το Nessie τρέχει δικό του διακομιστή MCP στο POST /mcp, μέσω streamable HTTP, και είναι χωρίς κατάσταση (stateless): κάθε κλήση φέρει τα δικά της διαπιστευτήρια και επιλύει τον δικό της δρώντα (actor), οπότε δεν υπάρχει συνεδρία στην οποία να καρφιτσωθεί ένας πελάτης σε ένα replica. Το ChatGPT, το Claude, το Claude Code, το Codex ή ένας πράκτορας στον φορητό υπολογιστή κάποιου μπορούν να δουλέψουν στους πίνακές σας, στα έγγραφά σας και στους πελάτες σας, μέσα από όποιο εργαλείο χρησιμοποιεί ήδη αυτό το πρόσωπο. Τα βήματα για κάθε εφαρμογή είναι στο Σύνδεση ChatGPT, Claude και άλλων εφαρμογών AI.

Τι είναι στην πραγματικότητα ένα συζευγμένο διαπιστευτήριο

Αυτό πρέπει να το καταλάβετε σωστά, επειδή το προφανές μοντέλο — ένα κλειδί API με δικαιώματα επισυναμένα — είναι το λάθος.

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

Η ζωντάνια ελέγχεται ξανά σε κάθε μεμονωμένη κλήση και ποτέ δεν εμπιστεύεται από το διακριτικό: ανάκληση, λήξη, η έκδοση διακριτικού του χρήστη, η συμμετοχή του στον οργανισμό και ο τρέχων ρόλος του. Μια υποβάθμιση, μια απενεργοποίηση ή ένα «αποσύνδεση από παντού» φτάνει στην επόμενη κλήση του πράκτορα, αντί να περιμένει τη λήξη του διαπιστευτηρίου.

Το διακριτικό είναι αδιαφανές, με πρόθεμα nag1_, αποθηκεύεται μόνο ως hash SHA-256 και ισχύει 90 ημέρες. Απορρίπτεται με συγκεκριμένο 403 σε οποιαδήποτε διαδρομή εκτός του τελικού σημείου MCP — η παρουσίασή του αλλού δεν είναι μερική επιτυχία που θα ξαναδοκιμάσετε, και αυτό κρατά το «δάνεισα στον πράκτορα τους πίνακές μου» μακριά από το «δάνεισα του τον λογαριασμό μου».

Δύο τρόποι σύνδεσης

Μια εφαρμογή που μπορεί να ανοίξει browser — το ChatGPT, το Claude, το Claude Code, το Codex — χρησιμοποιεί το προφίλ εξουσιοδότησης MCP: OAuth 2.1 με PKCE (S256), δυναμική εγγραφή πελάτη στο POST /mcp/oauth/register, διακριτικά ανανέωσης και δείκτες πόρων. Η εφαρμογή στέλνει το πρόσωπο στο /settings/security, εκείνο επιλέγει τι επιτρέπεται να κάνει και ποιες από τις ομάδες του φτάνει, και ο browser επιστρέφει στην εφαρμογή με έναν κωδικό. Το διακριτικό πρόσβασης ισχύει για μία ώρα και ανανεώνεται· η σύνδεση διαρκεί 90 ημέρες.

Ένας πράκτορας γραμμής εντολών δεν ελέγχει browser και δεν μπορεί να φιλοξενήσει URL επιστροφής, οπότε συνδέεται μέσω της χορήγησης εξουσιοδότησης συσκευής (device authorization grant, RFC 8628).

  1. Ο πράκτορας καλεί το POST /mcp/auth/device με ένα clientName και τα scopes που θέλει. Παίρνει πίσω ένα device_code, έναν σύντομο user_code, ένα verification_uri και ένα verification_uri_complete με τον κωδικό ήδη στο ερώτημα, μαζί με το διάστημα ερωτημάτων interval και ένα expires_in. Τυπώνει το URI.
  2. Ένα πρόσωπο ανοίγει αυτό το URI όντας συνδεδεμένο, στο /settings/security. Βλέπει ποιος πράκτορας ζητά πρόσβαση, με ποιον λογαριασμό θα δούλευε, μέχρι πότε, και τι ακριβώς θα μπορούσε να κάνει — και επιλέγει Allow ή Don’t allow.
  3. Ο πράκτορας ερωτά επανειλημμένα το POST /mcp/auth/token με το deviceCode, σεβόμενος τις απαντήσεις authorization_pending, slow_down, expired_token και access_denied. Με επιτυχία παίρνει { access_token, token_type, scope, expires_at }.

Και στις δύο περιπτώσεις υπάρχει ένα ανθρώπινο βήμα, επειδή το διαπιστευτήριο κληρονομεί τα δικαιώματα ενός προσώπου, οπότε ένα πρόσωπο πρέπει να επιλέξει να το δανείσει. Τίποτα εδώ δεν δημιουργεί πρόσβαση από το μηδέν. Η σύνδεση μπορεί επίσης να απενεργοποιηθεί για έναν ολόκληρο οργανισμό στο /admin/security?tab=programs, και αυτή η απάντηση ελέγχεται όταν κάποιος επιτρέπει μια σύνδεση, και όχι όταν ο πράκτορας ξεκινά μία.

Ανακάλυψη

Ένα μη πιστοποιημένο POST /mcp απαντά με 401 και κεφαλίδα WWW-Authenticate που δείχνει στο /.well-known/oauth-protected-resource (RFC 9728), το οποίο ονομάζει αυτή την προέλευση ως διακομιστή εξουσιοδότησης· τα μεταδεδομένα του στο /.well-known/oauth-authorization-server (RFC 8414) ονομάζουν τα τελικά σημεία εγγραφής, εξουσιοδότησης, διακριτικού και ανάκλησης. Αυτή η αλυσίδα είναι όλα όσα χρειάζεται ένας πελάτης μόλις έχει τη διεύθυνση. Για να βρει ένας πράκτορας τη διεύθυνση από ένα domain, διαβάζει το /.well-known/ai-catalog.json, το οποίο ονομάζει την Κάρτα Διακομιστή (Server Card) στο /mcp/server-card (MCP Server Cards, SEP-2127). Τα τελικά σημεία της χορήγησης συσκευής αναφέρονται στο έγγραφο του προστατευόμενου πόρου, κάτω από το x-nessie-device-authorization.

Μια εγκατάσταση μπορεί επίσης να απαντά και σε μια δεύτερη, συντομότερη διεύθυνση: το https://nessie.works/mcp του Nessie Cloud προωθείται στο API, και ένας πελάτης που ήρθε έτσι λαμβάνει πίσω αυτή τη διεύθυνση ως resource, ενώ η σύνδεση γίνεται πάντα στο API. Ανακατεύθυνση δεν θα έκανε τη δουλειά, επειδή ένας πελάτης αρνείται μεταδεδομένα που ονομάζουν οποιαδήποτε άλλη διεύθυνση από αυτήν που του δόθηκε. Ο διαχειριστής καταχωρίζει αυτές τις προελεύσεις στο NESSIE_MCP_ALIAS_ORIGINS.

Πεδία και εργαλεία

Τα πεδία είναι σκόπιμα χονδρικά — ένα πεδίο που κανείς δεν μπορεί να εξηγήσει είναι ένα πεδίο που κανείς δεν ορίζει σωστά. Μια σύνδεση που φτάνει σε περισσότερες από μία ομάδες τις απαριθμεί με το nessie_team_list, και κάθε άλλο εργαλείο ονομάζει έπειτα το teamId του.

ΠεδίοΦτάνει σε
boards_readΈργα, πίνακες και tickets, με τα σχόλια, τα αρχεία, τις ετικέτες, τους τύπους και τις λίστες ελέγχου τους
boards_writeΔημιουργία, επεξεργασία και μετακίνηση tickets, και όλα όσα ανήκουν σε αυτά
documents_readΧώροι γνώσης, έγγραφα και υπολογιστικά φύλλα
documents_writeΣύνταξη και επεξεργασία τους, και αίτημα δημοσίευσης ενός εγγράφου
clients_readΤα εισερχόμενα πελατών, οι επαφές, οι λίστες επαφών, τα ενημερωτικά δελτία και οι φόρμες επικοινωνίας
clients_writeΣημειώσεις, ανάληψη, ανάθεση και κλείσιμο συνομιλιών, λίστες επαφών και προετοιμασία ενημερωτικών δελτίων
clients_sendΟτιδήποτε λαμβάνει πελάτης: μια απάντηση, ένα πρώτο email ή ένα SMS. Δεν ενεργοποιείται ποτέ, αν δεν το ενεργοποιήσει το ίδιο το πρόσωπο
website_toolsΤα εργαλεία σελίδας του καταχωρισμένου ιστότοπου της ομάδας σας, που χειρίζονται σε ένα φιλοξενούμενο πρόγραμμα περιήγησης το οποίο μπορείτε να ελέγχετε. Δεν ενεργοποιείται ποτέ, αν δεν το ενεργοποιήσει το ίδιο το πρόσωπο

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

Δεν υπάρχει ξεχωριστή οικογένεια εργαλείων για εξωτερικά συστήματα παρακολούθησης. Ένας πίνακας είναι πίνακας είτε οι εργασίες του προέρχονται από το Nessie είτε είναι αντίγραφο από Linear, Jira, GitHub ή Trello, οπότε ένα σύνολο εργαλείων καλύπτει και τα δύο, και κάθε εργασία δηλώνει από πού προέρχεται. Η διαφορά είναι στην εγγραφή: ένας πίνακας που είναι αντίγραφο μιας πηγής μόνο για ανάγνωση απορρίπτει την εγγραφή με λόγια, λέγοντας στον πράκτορα ότι το ticket ανήκει στο άλλο σύστημα και ότι η επανάληψη δεν θα βοηθήσει.

Η δημοσίευση εγγράφου είναι έγκριση, ποτέ πεδίο

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

Έτσι το nessie_doc_publish δεν δημοσιεύει. Ανοίγει ένα αίτημα έγκρισης knowledge.page.publish — την ίδια που ανοίγει ένας πράκτορας του Nessie — και επιστρέφει { status: "awaiting_approval", approvalId }. Η επόμενη ερώτηση επιστρέφει το ίδιο αίτημα, αντί να ανοίξει δεύτερο. Η απόφαση λαμβάνεται όπως κάθε άλλη απόφαση δημοσίευσης στο Nessie: από πρόσωπο, για αυτό το έγγραφο, τη στιγμή που υπάρχει.

Σκόπιμα δεν υπάρχει πεδίο δημοσίευσης. Υπήρχε ένα — ένα πλαίσιο επιλογής κατά τη σύζευξη που έλεγε ότι αυτός ο πράκτορας μπορεί να δημοσιεύει — και αποσύρθηκε. Αποφάσιζε, μία φορά και για ενενήντα ημέρες, ένα ερώτημα που το προϊόν θέτει ανά έγγραφο παντού αλλού, και το αποφάσιζε πριν υπάρξει το έγγραφο, οπότε το πρόσωπο που επέλεγε το πλαίσιο δεν μπορούσε να ξέρει τι συμφωνούσε να δημοσιευτεί. Το nessie_doc_publish χρειάζεται documents_write, επειδή το αίτημα έχει κόστος — διαβάζει τη σελίδα και βάζει μια απόφαση μπροστά σε κάποιον — αλλά το πεδίο αυτό δεν χορηγεί τίποτα για τη δημοσίευση.

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

Βλέποντας και ανακαλώντας ό,τι είναι συζευγμένο

Τα συζευγμένα διαπιστευτήρια ενός προσώπου εμφανίζονται στο /settings/security, με ετικέτα και κουμπί ανάκλησης για το καθένα. Ένας ιδιοκτήτης ή διαχειριστής οργανισμού βλέπει κάθε διαπιστευτήριο του οργανισμού στο /admin/security?tab=programs — πώς λέγεται το καθένα, τι μπορεί να κάνει, αν είναι ενεργό και με ποιον λογαριασμό δανείζεται — και μπορεί να ανακαλέσει οποιοδήποτε. Η προσωπική λίστα μένει μόνο για τον ίδιο· μια λίστα ζωντανών διαπιστευτηρίων είναι λίστα σημείων πρόσβασης, όχι γενική ανάγνωση.

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

Τι δεν είναι διαθέσιμο ακόμα

Το λέμε ρητά, επειδή το κενό ανάμεσα στις δυνατότητες ενός πρωτοκόλλου και σε εκείνες ενός δεδομένου διακομιστή είναι το σημείο όπου συνήθως η τεκμηρίωση λέει ψέματα:

  • Τα chat, τα κανάλια, οι εκτελέσεις και η διαχείριση πρακτόρων δεν είναι εκτεθειμένα μέσω MCP.
  • Ένα εξωτερικό πρόγραμμα ετοιμάζει ένα ενημερωτικό δελτίο και ένα πρόσωπο το στέλνει: τίποτα δεν στέλνει, δεν προγραμματίζει και δεν διαγράφει μια καμπάνια, και το ίδιο το email γράφεται στον σχεδιαστή.
  • Η σύνδεση και η συγχώνευση επαφών, οι αλλαγές στο σχήμα του CRM, οι εισαγωγές και η ρύθμιση καναλιών μένουν σε ένα πρόσωπο στον browser.
  • Ο διακόπτης για τις συνδέσεις είναι ρύθμιση σε επίπεδο οργανισμού. Ρυθμίσεις σε επίπεδο ομάδας και προσωπικές υπερκαλύψεις δεν μπορεί να ορίσει σήμερα ούτε μια ομάδα ούτε ένα πρόσωπο.