Zur Dokumentation springen
DokumentationDienstrezepte

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.

JSON · GET /v1/recipes/github
{
  "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"
}
FeldBedeutung
hostsHosts, auf denen der Dienst antwortet. Ein führendes *. deckt jede Subdomain ab.
connection_hosts, connection_domainsHosts, mit denen sich ein neuer Schlüssel direkt verbindet, und Domains, unter denen Sie Ihre eigene Adresse angeben, etwa acme.zendesk.com.
adapter, adaptersWie der Schlüssel vorgelegt wird: bearer, basic, header, api_key, aws-sigv4, oauth2-ac für die Anmeldung beim Anbieter und einige mehr.
credential_fieldsWas 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.
methodsJeder 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_urlWo man den Schlüssel ausstellt, wo man ihn widerruft, und die API-Referenz des Anbieters.
default_profileDie 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, HEAD und OPTIONS lesen; POST, PUT und PATCH schreiben; DELETE und 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, exec oder run beginnt, macht den Aufruf mindestens zum Schreibzugriff. Eine Rezeptregel, die auf den Pfad passt, hebt das auf.
  • Ein Rezept kann genaue Leseoperationen nennen, die als POST reisen, etwa DescribeInstances bei 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 _method und X-HTTP-Method-Override werden 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.