Recetas
Una receta le dice a Sallyport cómo llegar a un servicio: sus hosts, la clave que usa y la clase de cada llamada.
Qué decide una receta
El catálogo tiene una receta por servicio: GitHub, Stripe, Cloudflare, AWS y más de cien otros. Una receta dice dónde va la clave, a qué hosts puede llegar y si una llamada lee, escribe o destruye.
Una conexión usa la receta con la que se creó. Si no, Sallyport elige la receta cuyo host coincide, y gana el host más exacto. Un host que ninguna receta reclama también funciona, clasificado por su método.
Lee el catálogo
GET /v1/recipes enumera el catálogo, con filtros q (nombre, clave o proveedor), vendor o host. GET /v1/recipes/{key} devuelve una. Ambas usan una clave de consola, ver 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"
}| Campo | Significado |
|---|---|
hosts | Hosts en los que responde el servicio. Un *. inicial cubre todos los subdominios. |
connection_hosts, connection_domains | Hosts a los que una clave nueva se conecta tal cual, y dominios bajo los que das tu propia dirección, como acme.zendesk.com. |
adapter, adapters | Cómo se presenta la clave: bearer, basic, header, api_key, aws-sigv4, oauth2-ac para iniciar sesión, y unos pocos más. |
credential_fields | Lo que escribe una persona. secret dice si el valor es una contraseña. sent_as nombra las cabeceras y los parámetros de consulta en los que un campo de ajuste va en cada llamada, y está vacío en cualquier otro campo. |
methods | Todas las formas de conectar el servicio, en el orden en que las ofrece la consola. Un método con provider es iniciar sesión en el proveedor. |
create_url, revoke_url, docs_url | Dónde emitir la clave, dónde revocarla y la referencia de la API del proveedor. |
default_profile | La regla con la que empieza un par nuevo de agente y conexión. Todas las recetas dicen direct: lectura, escritura y destrucción pasan sin preguntar. |
Las reglas de clase y el lugar de la clave se quedan dentro de Sallyport y no forman parte de esta respuesta.
Cómo se clasifica una llamada
Cada llamada es read, write o destructive. La regla del agente para esa clase en la conexión decide: ejecutarla, preguntar a una persona o rechazarla.
- El método fija el mínimo:
GET,HEADyOPTIONSleen;POST,PUTyPATCHescriben;DELETEy cualquier otro método son destructivos. - Las reglas de la receta se prueban en orden y gana la primera que coincide. Una regla solo sube la clase, y solo de una forma: un
GETcon el que el proveedor cambia algo pasa a ser escritura. Ninguna regla de receta hace destructiva una llamada. - Un segmento de ruta que empieza por
webhook,hooks,build,trigger,send,invoke,execute,execorunconvierte la llamada al menos en escritura. Una regla de la receta que coincide con la ruta anula esto. - Una receta puede enumerar operaciones de lectura exactas que viajan como
POST, comoDescribeInstancesde AWS o una consulta GraphQL. Cuentan como lectura solo cuando toda la solicitud se lee de una única manera. - Las solicitudes GraphQL, JSON-RPC y por lotes toman la clase más alta de sus partes.
- Los cambios de método como
_methodyX-HTTP-Method-Overridese eliminan antes de clasificar y enviar la llamada.
Las herramientas de un servidor MCP se clasifican por su propio readOnlyHint y destructiveHint, y una herramienta que no declara ninguno es una escritura. Los comandos SSH son escrituras, salvo una lista corta de lecturas exactas, y comandos como rm o dd son destructivos. Ver Comandos SSH. Las operaciones con archivos en un host SSH se clasifican por lo que hacen: list, stat y read son lecturas, write, mkdir y rename son escrituras, delete y rmdir son destructivas. Consulta Archivos por SFTP.
Comprobar una clave
Algunas recetas, GitHub entre ellas, nombran una lectura inofensiva que demuestra que una clave funciona: GET /user para GitHub. Sallyport la ejecuta al guardar una clave, al sustituirla y cuando pulsas Volver a comprobar.
Una clave que el servicio rechaza queda marcada en su página con el propio mensaje del proveedor. Una respuesta que no demuestra nada, como un permiso que falta, no cambia nada.