> ## Documentation Index
> Fetch the complete documentation index at: https://docs.tess.im/llms.txt
> Use this file to discover all available pages before exploring further.

# Custom API

> Beta. Arma un servidor MCP desde una spec OpenAPI 3 después de que un admin active Custom API to MCP.

> [!WARNING]
>
> **Custom API** es beta. Permanece apagado hasta que un admin active **Custom API to MCP**.

Custom API arma un servidor MCP a partir de una descripción OpenAPI 3 de una API HTTP. El servidor muestra la insignia **Custom API**. Esa insignia no tiene traducción. Los chats y los agentes lo llaman como cualquier otro servidor en la pestaña **MCP**. Consulta [Custom MCP](https://docs.tess.im/es/mcp-custom.md).

## Activarlo

Abre la página de admin titulada **Feature Toggles**. Ese título no tiene traducción. El enlace de vuelta es **Volver al panel**.

Activa **Custom API to MCP**. La etiqueta no tiene traducción y lleva una insignia beta. El interruptor queda desmarcado cuando el ajuste no existe. Crear y actualizar dependen de ese interruptor. Es un feature toggle de la plataforma, no un control en los ajustes del workspace.

## Dónde armarlo

**Build from Custom API** está en el menú de agregar de MCP Plugins. La misma pantalla entra en el diálogo de Conectores, en la pestaña **MCP**.

El control de agregar cambia si ya hay algún servidor:

* Ninguno todavía: **Add custom MCP**. Esa etiqueta no tiene traducción.
* Al menos uno: **Nuevo servidor MCP**, con la línea **Agregar servidor MCP personalizado**.

El menú también ofrece **Import by JSON** y **Direct configuration**. Esas dos etiquetas no tienen traducción. **Build from Custom API** es el tercer elemento, y solo aparece con el interruptor activo y si puedes crear servidores MCP.

Creas uno si puedes escribir plugins MCP, o si puedes gestionarlos. El dueño del workspace puede gestionarlos.

## Qué completar

El título del diálogo de creación es **Build from Custom API**. **Build** permanece desactivado hasta que el nombre, la URL base, una especificación y una credencial estén completos. Mientras guarda, el botón muestra **Building...**. Las dos etiquetas del botón no tienen traducción.

| Campo | Obligatorio | Qué acepta el diálogo |
| - | - | - |
| **Server Name** | Sí | Hasta 255 caracteres. Placeholder **e.g., My Custom Server**. La etiqueta y el placeholder no tienen traducción. |
| **Base URL** | Sí | Una URL `http` o `https`, hasta 2048 caracteres. Placeholder `https://api.provider.com/v1`. Una dirección bloqueada muestra **La URL base no está permitida.** La etiqueta no tiene traducción. |
| **API specification** | Sí | **URL**, **Upload** o **Pegar**. Mira abajo. |
| **Autenticación** | Sí | Uno de cuatro tipos. El valor inicial es **Clave de API**. |
| **Notes** | No | Hasta 1000 caracteres. Placeholder **Which operations matter, what must not become a tool**. Las notas se guardan en el servidor. No quitan operaciones de la spec. La etiqueta y el placeholder no tienen traducción. |
| **Compartir con el workspace** | No | Un interruptor. Mira el uso compartido abajo. |

### Especificación de la API

Solo OpenAPI 3. El campo `openapi` tiene que ser `3` o empezar por `3.`. El documento necesita un objeto `info`, un objeto `paths` que no esté vacío y al menos una operación. Una operación es `get`, `put`, `post`, `delete`, `patch`, `head`, `options` o `trace`.

Si nunca viste uno de estos archivos, empieza por [Qué es una especificación OpenAPI y cómo conseguir la tuya](https://docs.tess.im/es/openapi-spec.md).

| Origen | Qué indicas |
| - | - |
| **URL** | **Spec URL**, una dirección `http` o `https` de hasta 2048 caracteres. Una dirección bloqueada muestra **La URL de la especificación de la API no está permitida.** **Spec URL** no tiene traducción. |
| **Upload** | `.json`, `.yaml` o `.yml`, hasta 2 MB. La zona dice **Arrastra y suelta o haz clic para elegir** y **Upload an OpenAPI/Swagger file (JSON or YAML)**. La segunda línea no tiene traducción. Una extensión incorrecta muestra **Solo se admiten archivos .json, .yaml y .yml**. Por encima de 2 MB en el navegador muestra **El archivo es demasiado grande (máx. 2 MB)**. |
| **Pegar** | El texto de la spec. Placeholder **Paste your OpenAPI/Swagger spec**, sin traducción. |

La spec guardada también tiene un límite de 2 MB. Un documento mayor muestra **El archivo supera el límite de 2 MB. Envía una versión más pequeña, solo con las partes de la API que vas a usar.**

### Autenticación

| Tipo | Qué completar |
| - | - |
| **Token Bearer** | El token, hasta 4096 caracteres. Placeholder **API key or bearer token**, sin traducción. |
| **Clave de API** | El mismo campo de secreto. Este es el valor inicial. |
| **Header Personalizado** | El secreto, más **Header name, e.g. X-API-Key**. El nombre del header es obligatorio y no tiene traducción. |
| **Token (obtenido por solicitud)** | Tess pide un token y lo renueva. Mira la sección siguiente. |

### Token obtenido por solicitud

El diálogo dice que Tess solicita un token con la solicitud de abajo y lo renueva cuando expira. Un secreto entra como `{{secret.name}}` y el token como `{{access_token}}`.

* **Secretos**. Al menos uno. Hasta 20. Cada nombre usa letras, números y guion bajo, hasta 64 caracteres. Un nombre inválido muestra **Los nombres de los secretos solo pueden tener letras, números y guion bajo (\_).** Placeholders **Nombre, ej.: api\_key** y **Valor**. **Agregar secreto** añade una fila.
* **Solicitud del token**. **Método** es **POST** o **GET**. **URL del token, ej.: /v1/auth** es una URL `http` o `https` completa, o una ruta que empieza con `/`. Una ruta inválida muestra **Usa una URL http(s) completa o una ruta que empiece con /.** Una URL bloqueada muestra **La URL del token no está permitida.** Headers opcionales, hasta 20. Cuerpo opcional, hasta 16384 caracteres.
* **Respuesta del token**. **Campo del token, ej.: access\_token** es obligatorio. **Campo de expiración (segundos), ej.: expires\_in** es obligatorio. Cada uno es un nombre con puntos, como `access_token` o `data.expires_in`.
* **Headers enviados en cada llamada**. Al menos uno, hasta 20. Uno de ellos tiene que contener `{{access_token}}`. Si no lo contiene, el diálogo muestra **Usa `{{access_token}}` en al menos un header enviado en cada llamada.** Usar `{{access_token}}` en la propia solicitud del token muestra **`{{access_token}}` solo puede usarse en los headers enviados en cada llamada.** Un placeholder que no corresponde a un secreto nombra ese placeholder.

## Qué se vuelve herramienta

Cada operación HTTP en `paths` se vuelve una herramienta. No hay una lista de permiso aparte para una spec Custom API, y **Notes** no quitan operaciones. Tess nombra la herramienta a partir de la operación. La tarjeta del servidor lista esas herramientas, y enciendes o apagas cada una para ti.

## Una spec pequeña

Pega esto en **Pegar**, con **Base URL** `https://api.example.com`. Es un GET. **Autenticación** sigue pidiendo una credencial, aunque la API sea pública. Usa un valor que la API ignore, o el header que la API realmente comprueba.

```json theme={null}
{
  "openapi": "3.0.3",
  "info": { "title": "Status", "version": "1.0.0" },
  "paths": {
    "/status": {
      "get": {
        "operationId": "getStatus",
        "summary": "Read the service status",
        "responses": { "200": { "description": "OK" } }
      }
    }
  }
}
```

## Uso compartido

Al crear, **Compartir con el workspace** empieza **activado** si puedes gobernar MCP (dueño del workspace, o permiso para gestionar plugins MCP). Empieza **apagado**, y el control queda desactivado, si no puedes. La ayuda del control desactivado es **Compartir con el workspace requiere permiso de gobernanza de MCP**.

Lo cambias después en la tarjeta del servidor, no en **Editar**. La ayuda de la tarjeta, para quien puede cambiarlo, es **Compartido — clic para cambiar** o **Personal — clic para compartir**. Confirmar el uso compartido dice **Todos los miembros del workspace podrán usar ":name".** El botón es **Compartir**. Hacerlo personal dice **Otros miembros perderán el acceso a ":name".** El botón es **Hacer personal**.

Un servidor personal se queda con quien lo creó. Un servidor compartido lo pueden usar los miembros del workspace. La inscripción en el chat es la misma que en los demás servidores Custom MCP: [Custom MCP](https://docs.tess.im/es/mcp-custom.md).

## Usarlo

En el chat, abre Conectores y la pestaña **MCP**. Activa el servidor y activa las herramientas que quieras. En Agent Studio, añade ese servidor MCP a la política de conectores del agente igual que cualquier otro servidor Custom MCP.

## Editar y eliminar

El botón del menú en la tarjeta se titula **Más acciones**. **Editar** abre un diálogo titulado **Configuración del MCP**. **Eliminar** quita el servidor. **Eliminar** aparece cuando puedes eliminar: quien creó un servidor personal, si aún puede crear servidores MCP, o quien puede gobernar MCP. Quien gobierna también puede eliminar el servidor personal de otra persona.

En la edición cambias el nombre, el icono, la URL base, la autenticación, la especificación y la credencial.

* Deja la especificación vacía: **Déjalo vacío para conservar la especificación actual.**
* Cambia la dirección o la autenticación: hay que enviar la especificación de nuevo. **Vuelve a enviar la especificación de la API para cambiar la dirección o la autenticación.**
* Deja la credencial en blanco: **Déjalo en blanco para conservar la credencial actual.** Pasar a **Token (obtenido por solicitud)** y enviar una spec nueva exige completar los secretos y la solicitud del token de nuevo: **Para enviar una nueva especificación, vuelve a completar los secretos y la solicitud del token.**
* **Icono** (**opcional**). Placeholder **Pega la URL**. Una dirección HTTPS, o vacío para quitarla. Cualquier otra muestra **El icono tiene que ser una dirección HTTPS.**

**Editar** no incluye **Compartir con el workspace**. Más sobre la edición: [Editar un servidor Custom MCP](https://docs.tess.im/es/mcp-custom.md#editar-un-servidor-custom-mcp).

## Cuando se rechaza una spec

Una lista en lenguaje sencillo está en [Qué es una especificación OpenAPI y cómo conseguir la tuya](https://docs.tess.im/es/openapi-spec.md).

| Qué ves | Qué cambiar |
| - | - |
| **Este archivo usa un formato antiguo (Swagger 2.0). Envía la versión OpenAPI 3 o pide a quien ofrece la API que la actualice.** | El archivo es Swagger 2. Envía OpenAPI 3. |
| **Este archivo no parece ser una documentación de API válida (OpenAPI). Revisa que hayas enviado el archivo correcto.** | No es OpenAPI 3, falta `info`, no hay `paths`, o no hay operaciones. También cubre una spec que no es un objeto JSON o YAML, JSON o YAML inválido, o un anidamiento de más de 64 niveles. |
| **No pudimos leer este archivo. Usa un atajo del formato YAML que todavía no admitimos. Envía la versión JSON de la documentación de la API: normalmente un enlace o archivo que termina en openapi.json o swagger.json. Si no la encuentras, pide a quien ofrece la API que exporte la documentación en JSON.** | El YAML usa anclas o alias. Envía JSON. |
| **El archivo supera el límite de 2 MB. Envía una versión más pequeña, solo con las partes de la API que vas a usar.** | Reduce la spec. |
| **La dirección de la API no es válida o no se puede acceder a ella desde internet. Revisa la dirección que ingresaste.** | Corrige **Base URL**. |
| **La URL base no está permitida.** o **La URL de la especificación de la API no está permitida.** | La dirección no pasó el control de salida. Usa una URL `http` o `https` pública. |


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.