Rezepte
Ein Rezept sagt Sallyport, wie es einen Dienst erreicht: seine Hosts, den Schlüssel, den er nimmt, und die Klasse jedes Aufrufs.
Auf dieser Seite
Was ein Rezept entscheidet
Der Katalog hat ein Rezept pro Dienst: GitHub, Stripe, Cloudflare, AWS und mehr als hundert weitere. Ein Rezept sagt, wohin der Schlüssel gehört, welche Hosts er erreichen darf und ob ein Aufruf liest, schreibt oder zerstört.
Eine Verbindung nutzt das Rezept, aus dem sie entstanden ist. Sonst wählt Sallyport das Rezept mit passendem Host, und der genaueste Host gewinnt. Ein Host, den kein Rezept beansprucht, funktioniert auch und wird nach seiner Methode eingestuft.
Den Katalog lesen
GET /v1/recipes listet den Katalog, gefiltert nach q (Name, Schlüssel oder Anbieter), vendor oder host. GET /v1/recipes/{key} liefert eines. Beide nehmen einen Konsolenschlüssel, siehe REST-API.
{
"data": {
"key": "github",
"name": "GitHub API",
"vendor": "GitHub",
"hosts": ["api.github.com"],
"connection_hosts": ["api.github.com"],
"connection_domains": [],
"channel": "http",
"adapter": "bearer",
"adapters": ["bearer", "oauth2-ac"],
"credential_fields": [
{ "name": "value", "label": "Personal access token or installation token", "secret": true, "required": true, "sent_as": [] }
],
"methods": [
{
"adapter": "bearer",
"fields": [
{ "name": "value", "label": "Personal access token or installation token", "secret": true, "required": true, "sent_as": [] }
],
"provider": "",
"sallyport_app": false,
"redirect_uri": ""
},
{
"adapter": "oauth2-ac",
"fields": [],
"provider": "GitHub",
"sallyport_app": false,
"redirect_uri": "https://mcp.sallyport.cloud/callback/upstream"
}
],
"notes": null,
"docs_url": "https://docs.github.com/en/rest",
"create_url": "https://github.com/settings/personal-access-tokens/new",
"revoke_url": "https://github.com/settings/tokens",
"scopes_recommended": [],
"default_profile": "direct",
"oauth": true,
"version": 2
},
"request_id": "5d0c2f7e8a1b4c6d9e0f1a2b3c4d5e6f"
}| Feld | Bedeutung |
|---|---|
hosts | Hosts, auf denen der Dienst antwortet. Ein führendes *. deckt jede Subdomain ab. |
connection_hosts, connection_domains | Hosts, mit denen sich ein neuer Schlüssel direkt verbindet, und Domains, unter denen Sie Ihre eigene Adresse angeben, etwa acme.zendesk.com. |
adapter, adapters | Wie der Schlüssel vorgelegt wird: bearer, basic, header, api_key, aws-sigv4, oauth2-ac für die Anmeldung beim Anbieter und einige mehr. |
credential_fields | Was ein Mensch eingibt. secret sagt, ob der Wert ein Passwort ist. sent_as nennt die Header und Query-Parameter, in denen ein Einstellungsfeld bei jedem Aufruf mitgeht, und ist bei jedem anderen Feld leer. |
methods | Jeder Weg, den Dienst zu verbinden, in der Reihenfolge, in der die Konsole sie anbietet. Eine Methode mit provider ist die Anmeldung beim Anbieter. |
create_url, revoke_url, docs_url | Wo man den Schlüssel ausstellt, wo man ihn widerruft, und die API-Referenz des Anbieters. |
default_profile | Die Regel, mit der ein neues Paar aus Agent und Verbindung startet. Jedes Rezept sagt direct: Lesen, Schreiben und Löschen laufen ohne Nachfrage. |
Die Klassenregeln und die Stelle des Schlüssels bleiben in Sallyport und sind nicht Teil dieser Antwort.
Wie ein Aufruf eingestuft wird
Jeder Aufruf ist read, write oder destructive. Die Regel des Agenten für diese Klasse auf der Verbindung entscheidet: ausführen, einen Menschen fragen oder ablehnen.
- Die Methode setzt die Untergrenze:
GET,HEADundOPTIONSlesen;POST,PUTundPATCHschreiben;DELETEund jede andere Methode sind destruktiv. - Die Regeln des Rezepts werden der Reihe nach geprüft, und die erste passende gewinnt. Eine Regel hebt nur an, und zwar nur so: Ein
GET, mit dem der Anbieter etwas ändert, wird zum Schreibzugriff. Keine Rezeptregel macht einen Aufruf destruktiv. - Ein Pfadsegment, das mit
webhook,hooks,build,trigger,send,invoke,execute,execoderrunbeginnt, macht den Aufruf mindestens zum Schreibzugriff. Eine Rezeptregel, die auf den Pfad passt, hebt das auf. - Ein Rezept kann genaue Leseoperationen nennen, die als
POSTreisen, etwaDescribeInstancesbei AWS oder eine GraphQL-Abfrage. Sie zählen nur als Lesen, wenn sich die ganze Anfrage eindeutig lesen lässt. - GraphQL-, JSON-RPC- und Batch-Anfragen erhalten die höchste Klasse ihrer Teile.
- Methodenüberschreibungen wie
_methodundX-HTTP-Method-Overridewerden vor dem Einstufen und Senden entfernt.
Werkzeuge eines MCP-Servers werden nach ihren eigenen readOnlyHint und destructiveHint eingestuft, ein Werkzeug ohne beide Angaben ist ein Schreibzugriff. SSH-Befehle sind Schreibzugriffe, außer einer kurzen Liste genauer Lesebefehle, und Befehle wie rm oder dd sind destruktiv. Siehe SSH-Befehle. Dateioperationen auf einem SSH-Host werden nach ihrer Wirkung eingestuft: list, stat und read sind Lesezugriffe, write, mkdir und rename Schreibzugriffe, delete und rmdir destruktiv. Siehe Dateien per SFTP.
Einen Schlüssel prüfen
Manche Rezepte, darunter GitHub, nennen einen harmlosen Lesezugriff, der beweist, dass ein Schlüssel funktioniert: GET /user bei GitHub. Sallyport führt ihn aus, wenn ein Schlüssel gespeichert oder ersetzt wird und wenn Sie auf „Erneut prüfen“ klicken.
Ein Schlüssel, den der Dienst ablehnt, wird auf seiner Seite mit der Meldung des Anbieters markiert. Eine Antwort, die nichts beweist, etwa eine fehlende Berechtigung, ändert nichts.