Ir a la documentación
DocumentaciónRecetas de servicios

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.

En esta página

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.

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.

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"
}
CampoSignificado
hostsHosts en los que responde el servicio. Un *. inicial cubre todos los subdominios.
connection_hosts, connection_domainsHosts 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, adaptersCómo se presenta la clave: bearer, basic, header, api_key, aws-sigv4, oauth2-ac para iniciar sesión, y unos pocos más.
credential_fieldsLo 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.
methodsTodas 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_urlDónde emitir la clave, dónde revocarla y la referencia de la API del proveedor.
default_profileLa 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, HEAD y OPTIONS leen; POST, PUT y PATCH escriben; DELETE y 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 GET con 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, exec o run convierte 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, como DescribeInstances de 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 _method y X-HTTP-Method-Override se 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.