Recettes
Une recette dit à Sallyport comment joindre un service : ses hôtes, la clé qu’il prend et la classe de chaque appel.
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.
{
"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"
}| Champ | Signification |
|---|---|
hosts | Hôtes sur lesquels répond le service. Un *. en tête couvre tous les sous-domaines. |
connection_hosts, connection_domains | Hôtes auxquels une nouvelle clé se connecte tels quels, et domaines sous lesquels vous donnez votre propre adresse, comme acme.zendesk.com. |
adapter, adapters | Comment 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_fields | Ce 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. |
methods | Toutes 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_url | Où émettre la clé, où la révoquer, et la référence de l’API du fournisseur. |
default_profile | La 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,HEADetOPTIONSlisent ;POST,PUTetPATCHécrivent ;DELETEet 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
GETavec 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,execourunfait 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, commeDescribeInstanceschez 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
_methodetX-HTTP-Method-Overridesont 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.