Aller à la documentation
DocumentationRecettes de services

Recettes

Une recette dit à Sallyport comment joindre un service : ses hôtes, la clé qu’il prend et la classe de chaque appel.

Sur cette page

Ce que décide une recette

Le catalogue compte une recette par service : GitHub, Stripe, Cloudflare, AWS et plus d’une centaine d’autres. Une recette dit où va la clé, quels hôtes elle peut atteindre et si un appel lit, écrit ou détruit.

Une connexion utilise la recette dont elle est issue. Sinon, Sallyport choisit la recette dont l’hôte correspond, et l’hôte le plus précis l’emporte. Un hôte qu’aucune recette ne revendique fonctionne aussi, classé par sa méthode.

Lire le catalogue

GET /v1/recipes liste le catalogue, avec les filtres q (nom, clé ou fournisseur), vendor ou host. GET /v1/recipes/{key} en renvoie une. Les deux prennent une clé de console, voir API REST.

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"
}
ChampSignification
hostsHôtes sur lesquels répond le service. Un *. en tête couvre tous les sous-domaines.
connection_hosts, connection_domainsHôtes auxquels une nouvelle clé se connecte tels quels, et domaines sous lesquels vous donnez votre propre adresse, comme acme.zendesk.com.
adapter, adaptersComment la clé est présentée : bearer, basic, header, api_key, aws-sigv4, oauth2-ac pour la connexion chez le fournisseur, et quelques autres.
credential_fieldsCe qu’une personne saisit. secret dit si la valeur est un mot de passe. sent_as nomme les en-têtes et paramètres de requête dans lesquels un champ de réglage part à chaque appel, et reste vide pour tout autre champ.
methodsToutes les façons de connecter le service, dans l’ordre où la console les propose. Une méthode avec provider est une connexion chez le fournisseur.
create_url, revoke_url, docs_urlOù émettre la clé, où la révoquer, et la référence de l’API du fournisseur.
default_profileLa règle de départ d’une nouvelle paire agent et connexion. Toutes les recettes disent direct : lecture, écriture et destruction passent sans demander.

Les règles de classe et l’emplacement de la clé restent dans Sallyport et ne font pas partie de cette réponse.

Comment un appel est classé

Chaque appel est read, write ou destructive. La règle de l’agent pour cette classe sur la connexion décide : l’exécuter, demander à une personne ou refuser.

  • La méthode fixe le plancher : GET, HEAD et OPTIONS lisent ; POST, PUT et PATCH écrivent ; DELETE et toute autre méthode sont destructifs.
  • Les règles de la recette sont essayées dans l’ordre et la première qui correspond l’emporte. Une règle ne fait que relever la classe, et d’une seule façon : un GET avec lequel le fournisseur modifie quelque chose devient une écriture. Aucune règle de recette ne rend un appel destructif.
  • Un segment de chemin qui commence par webhook, hooks, build, trigger, send, invoke, execute, exec ou run fait de l’appel au moins une écriture. Une règle de recette qui correspond au chemin l’annule.
  • Une recette peut lister des opérations de lecture exactes envoyées en POST, comme DescribeInstances chez AWS ou une requête GraphQL. Elles comptent comme lectures seulement si toute la requête se lit d’une seule façon.
  • Les requêtes GraphQL, JSON-RPC et par lot prennent la classe la plus haute de leurs parties.
  • Les substitutions de méthode comme _method et X-HTTP-Method-Override sont retirées avant le classement et l’envoi.

Les outils d’un serveur MCP sont classés par leurs propres readOnlyHint et destructiveHint, et un outil qui ne déclare ni l’un ni l’autre est une écriture. Les commandes SSH sont des écritures, sauf une courte liste de lectures exactes, et des commandes comme rm ou dd sont destructives. Voir Commandes SSH. Les opérations sur les fichiers d’un hôte SSH sont classées selon ce qu’elles font : list, stat et read sont des lectures, write, mkdir et rename des écritures, delete et rmdir sont destructives. Voir Fichiers en SFTP.

Vérifier une clé

Certaines recettes, dont GitHub, nomment une lecture sans risque qui prouve qu’une clé fonctionne : GET /user pour GitHub. Sallyport l’exécute quand une clé est enregistrée, quand elle est remplacée et quand vous cliquez sur Vérifier à nouveau.

Une clé refusée par le service est signalée sur sa page avec le message du fournisseur lui-même. Une réponse qui ne prouve rien, comme une permission manquante, ne change rien.