> ## 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.

# Servidor MCP

> Conecta Tess AI con Claude, Cursor, Codex y cualquier plataforma compatible con MCP — de forma segura, usando tu propio token de API.

El **Servidor MCP de Tess AI** convierte tus agentes, ejecuciones y memorias de Tess en herramientas que cualquier cliente del **Model Context Protocol (MCP)** puede invocar. Es un **endpoint alojado y gestionado**: no hay nada que instalar, empaquetar ni ejecutar.

Apunta tu plataforma de IA a una única URL, autentícate con tu **token de API de Tess** y tu equipo podrá listar, ejecutar y orquestar agentes de Tess directamente desde las herramientas que ya usa.

<Note>
  **Endpoint:** `https://mcp.tess.im` — un servidor MCP remoto que usa el transporte **Streamable HTTP**. Sin `npx`, sin proceso local, sin necesidad de Node.js.
</Note>

## Por qué conectar mediante MCP

<CardGroup cols={2}>
  <Card title="Usa Tess donde tu equipo ya trabaja" icon="plug">
    Ejecuta agentes de Tess dentro de Claude, Cursor, Codex o tus propias herramientas internas — sin cambiar de contexto, sin copiar y pegar.
  </Card>

  <Card title="Cero instalación, siempre actualizado" icon="cloud">
    Un endpoint gestionado por Tess. Las nuevas capacidades aparecen automáticamente; no hay cliente que actualizar.
  </Card>

  <Card title="Gobernado por tu workspace" icon="shield-check">
    Cada llamada se ejecuta con el token y el workspace de quien la realiza, heredando tus roles, permisos y límites de créditos existentes.
  </Card>

  <Card title="Estándar y portátil" icon="arrows-rotate">
    Construido sobre el protocolo abierto MCP. El mismo endpoint funciona en todas las plataformas compatibles — sin integración por proveedor.
  </Card>
</CardGroup>

## Qué expone el servidor

El conjunto de herramientas se **genera automáticamente a partir de la API de Tess** — cada endpoint se convierte en una herramienta MCP, así que las nuevas capacidades de la API aparecen sin ningún cambio en el servidor. Todas las herramientas están listadas abajo, agrupadas por dominio, cada una con su propia entrada enlazable en [Referencia de herramientas](#tools-reference).

| Dominio                  | Herramientas                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    |
| ------------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Agentes**              | [`list_agents`](#list-agents) · [`get_agent`](#get-agent) · [`execute_agent`](#execute-agent) · [`list_files_agent`](#list-files-agent) · [`link_files_agent`](#link-files-agent) · [`delete_file_link_agent`](#delete-file-link-agent) · [`list_agent_responses`](#list-agent-responses) · [`get_agent_response`](#get-agent-response) · [`list_agent_webhooks`](#list-agent-webhooks) · [`create_agent_webhook`](#create-agent-webhook) · [`agent_chat_completions`](#agent-chat-completions) |
| **Archivos**             | [`list_files`](#list-files) · [`upload_file`](#upload-file) · [`get_file`](#get-file) · [`delete_file`](#delete-file) · [`process_file`](#process-file) · [`resolve_durable_file_reference`](#resolve-durable-file-reference)                                                                                                                                                                                                                                                                   |
| **Memorias**             | [`list_memories`](#list-memories) · [`create_memory`](#create-memory) · [`update_memory`](#update-memory) · [`delete_memory`](#delete-memory) · [`import_memories_text`](#import-memories-text) · [`get_memory_import_status_result`](#get-memory-import-status-result)                                                                                                                                                                                                                         |
| **Webhooks**             | [`list_webhooks`](#list-webhooks) · [`delete_webhook`](#delete-webhook)                                                                                                                                                                                                                                                                                                                                                                                                                         |
| **Créditos y workspace** | [`deduct_credits_user`](#deduct-credits-user) · [`get_workspace_usage`](#get-workspace-usage)                                                                                                                                                                                                                                                                                                                                                                                                   |

<Info>
  Esta lista cubre todas las herramientas relevantes para una integración de terceros. También existen herramientas de organización de carpetas/chats (usadas internamente por la interfaz web de Tess), pero no se documentan aquí — pídele a tu asistente que "liste las herramientas disponibles" para ver el conjunto completo y actual directamente desde tu cliente MCP.
</Info>

## Antes de empezar

Necesitas dos datos de la plataforma Tess:

<Steps>
  <Step title="Tu token de API">
    Genera un token de acceso personal en **[Tess AI → Tokens de API](https://tess.im/dashboard/user/tokens)**. Es el mismo token usado en toda la API de Tess — consulta el [Quickstart](https://docs.tess.im/api/get-started/quickstart) para más detalles.
  </Step>

  <Step title="El ID de tu workspace">
    El servidor MCP está **delimitado por workspace**. Encuentra el ID de tu workspace en la URL del panel de Tess o en la configuración del workspace, y usa el del workspace cuyos agentes quieres alcanzar. Cada llamada queda aislada a ese workspace.
  </Step>
</Steps>

<Warning>
  Trata tu token de API como una contraseña. Otorga acceso a los agentes y ejecuciones de tu workspace, que pueden consumir créditos. Prefiere un token dedicado por integración para poder revocarlo de forma independiente.
</Warning>

## Autenticación

Las credenciales se envían **solo como encabezados HTTP** — nunca como parámetros de URL, para que los tokens no terminen en logs ni en el historial del navegador:

```
Authorization: Bearer TU_TOKEN_DE_API
x-workspace-id: TU_WORKSPACE_ID
```

Ambos encabezados son obligatorios en cada solicitud. **Obligatorio a partir del 01/09/2026** para el alcance de workspace de la API Tess (misma política del header de la API REST). No hay alternativa mediante parámetros de URL — tu cliente MCP debe admitir el envío de encabezados personalizados.

## Conecta tu plataforma

<Tabs>
  <Tab title="Claude Code">
    ```bash theme={null}
    claude mcp add tess --transport http https://mcp.tess.im \
      --header "Authorization: Bearer TU_TOKEN_DE_API" \
      --header "x-workspace-id: TU_WORKSPACE_ID"
    ```

    Luego, en una sesión: *"Usa Tess para ejecutar el agente de Code Review en este diff."*
  </Tab>

  <Tab title="Cursor / VS Code">
    Agrega Tess a tu configuración MCP (en Cursor: **Tools & Integrations → MCP Tools**, o `~/.cursor/mcp.json`):

    ```json theme={null}
    {
      "mcpServers": {
        "tess": {
          "url": "https://mcp.tess.im",
          "headers": {
            "Authorization": "Bearer TU_TOKEN_DE_API",
            "x-workspace-id": "TU_WORKSPACE_ID"
          }
        }
      }
    }
    ```
  </Tab>

  <Tab title="Codex CLI">
    Agrega un servidor MCP remoto con encabezados en `~/.codex/config.toml`:

    ```toml theme={null}
    [mcp_servers.tess]
    url = "https://mcp.tess.im"
    headers = { Authorization = "Bearer TU_TOKEN_DE_API", "x-workspace-id" = "TU_WORKSPACE_ID" }
    ```

    <Note>La sintaxis de configuración puede cambiar entre versiones de Codex CLI — consulta `codex mcp --help` o la documentación actual de Codex si esto no coincide con lo que ves.</Note>
  </Tab>

  <Tab title="Claude Desktop / ChatGPT / otros">
    Estas plataformas se conectan a servidores MCP remotos mediante una interfaz de "conector personalizado". Para funcionar con Tess, la configuración del conector debe permitir definir **dos** cosas:

    * La URL del endpoint: `https://mcp.tess.im`
    * **Dos** encabezados personalizados: `Authorization: Bearer TU_TOKEN_DE_API` y `x-workspace-id: TU_WORKSPACE_ID`

    Algunas interfaces de conector solo exponen un único campo de bearer token y no admiten agregar un segundo encabezado personalizado — consulta la documentación actual de tu plataforma para saber si admite encabezados personalizados (además de un bearer token) para conectores MCP remotos. Si tu plataforma solo admite un encabezado de autenticación, usa uno de los clientes con soporte de encabezados anteriores (Claude Code, Cursor, Codex CLI) o una integración personalizada.
  </Tab>
</Tabs>

## Cómo funciona la autenticación

El servidor MCP es una **puerta de enlace sin estado**. No almacena tus credenciales. En cada solicitud:

1. Lee tu token de API y el ID del workspace desde los encabezados de la solicitud.
2. Reenvía la llamada a la API de Tess **como tú**, exactamente como lo haría una llamada directa a la API.
3. Devuelve el resultado a tu cliente MCP.

Esto significa que el servidor hereda **todos** los controles existentes de tu plataforma:

<CardGroup cols={2}>
  <Card title="Identidad y permisos" icon="user-shield">
    Las llamadas se ejecutan con la identidad del propietario del token. La visibilidad de agentes, los roles y los permisos de funciones los aplica Tess, sin atajos.
  </Card>

  <Card title="Aislamiento de workspace" icon="building-lock">
    Cada solicitud se vincula al `x-workspace-id` enviado. Un token no puede alcanzar datos de otro workspace.
  </Card>

  <Card title="Gobernanza de créditos" icon="coins">
    Las ejecuciones consumen créditos según los límites y la facturación de tu workspace — igual que la API de Tess.
  </Card>

  <Card title="Acceso revocable" icon="key">
    Revoca un token en el panel para cortar al instante cualquier plataforma conectada que lo use. Sin necesidad de redeploy.
  </Card>
</CardGroup>

## Referencia de herramientas

<h3 id="list-agents">
  list\_agents
</h3>

Lista los agentes disponibles en el workspace, con búsqueda y paginación.

<ParamField path="q" type="string">Busca agentes por título, descripción y descripción larga.</ParamField>
<ParamField path="type" type="string">Filtra por tipo de agente.</ParamField>
<ParamField path="page" type="integer" default="1">Número de página para la paginación.</ParamField>
<ParamField path="per_page" type="integer" default="15">Cantidad de agentes por página.</ParamField>

<h3 id="get-agent">
  get\_agent
</h3>

Devuelve los detalles completos de un agente (entradas, tipo, descripción).

<ParamField path="id" type="string | integer" required>El ID del agente.</ParamField>

<h3 id="execute-agent">
  execute\_agent
</h3>

Ejecuta un agente con las entradas indicadas y, opcionalmente, espera el resultado.

<ParamField path="id" type="string | integer" required>El ID del agente.</ParamField>
<ParamField path="body" type="object" required>Las respuestas del agente. Para agentes de tipo chat, incluye un array `messages` (pares `role`/`content`, con el mismo formato que OpenAI Chat Completions).</ParamField>
<ParamField path="wait_execution" type="boolean" default="false">Cuando es `true`, espera a que termine la ejecución y devuelve la salida final. Cuando es `false`, devuelve de inmediato para que consultes la ejecución después.</ParamField>

<h3 id="list-files-agent">
  list\_files\_agent
</h3>

Obtiene la lista de archivos asociados a un agente específico.

<ParamField path="agentId" type="integer" required>ID del agente para el cual recuperar los archivos.</ParamField>

<h3 id="link-files-agent">
  link\_files\_agent
</h3>

Asocia uno o más archivos a un agente específico.

<ParamField path="agentId" type="integer" required>ID del agente al que vincular los archivos.</ParamField>
<ParamField path="file_ids" type="integer[]" required>Array de IDs de archivos a vincular al agente.</ParamField>

<h3 id="delete-file-link-agent">
  delete\_file\_link\_agent
</h3>

Elimina la asociación entre un archivo específico y un agente.

<ParamField path="agentId" type="integer" required>ID del agente del que eliminar el vínculo del archivo.</ParamField>
<ParamField path="fileId" type="integer" required>ID del archivo a desvincular del agente.</ParamField>

<h3 id="list-agent-responses">
  list\_agent\_responses
</h3>

Lista respuestas de ejecuciones de agentes, con filtros y paginación.

<ParamField path="q" type="string">Busca agentes por título.</ParamField>
<ParamField path="root_id" type="integer">Filtra por el ID de ejecución raíz.</ParamField>
<ParamField path="agent_id" type="integer">Filtra por el ID del agente.</ParamField>
<ParamField path="type" type="string">Filtra por tipo de agente.</ParamField>
<ParamField path="sort" type="string" default="asc">Ordena de forma ascendente o descendente (`asc`/`desc`).</ParamField>
<ParamField path="page" type="integer" default="1">Página actual.</ParamField>
<ParamField path="per_page" type="integer" default="15">Cantidad de elementos por página.</ParamField>

<h3 id="get-agent-response">
  get\_agent\_response
</h3>

Obtiene una respuesta de ejecución de agente específica por ID.

<ParamField path="id" type="string | integer" required>El ID de la ejecución del agente.</ParamField>

<h3 id="list-agent-webhooks">
  list\_agent\_webhooks
</h3>

Lista los webhooks registrados para un agente específico.

<ParamField path="id" type="integer" required>ID del agente.</ParamField>
<ParamField path="page" type="integer" default="1">Página actual.</ParamField>
<ParamField path="per_page" type="integer" default="15">Cantidad de elementos por página.</ParamField>

<h3 id="create-agent-webhook">
  create\_agent\_webhook
</h3>

Registra un nuevo webhook en un agente específico.

<ParamField path="id" type="string | integer" required>El ID del agente.</ParamField>
<ParamField path="url" type="string">La URL de destino del webhook.</ParamField>
<ParamField path="method" type="string" default="POST">Método HTTP usado en la llamada del webhook.</ParamField>
<ParamField path="status" type="string" default="active">Estado del webhook (`active`/inactivo).</ParamField>

<h3 id="agent-chat-completions">
  agent\_chat\_completions
</h3>

Ejecuta un agente a través de una interfaz compatible con OpenAI Chat Completions — útil para clientes ya integrados con el formato de la API de OpenAI.

<ParamField path="id" type="string | integer" required>El ID del agente.</ParamField>
<ParamField path="body" type="object" required>Un cuerpo de solicitud con el formato de OpenAI Chat Completions.</ParamField>

<h3 id="list-files">
  list\_files
</h3>

Obtiene una lista paginada de archivos del workspace, con opciones de ordenación.

<ParamField path="page" type="integer" default="1">Número de página para la paginación.</ParamField>
<ParamField path="per_page" type="integer" default="15">Cantidad de elementos por página (máx. 100).</ParamField>
<ParamField path="order" type="string" default="desc">Orden de clasificación por el campo `created_at` (`asc`/`desc`).</ParamField>

<h3 id="upload-file">
  upload\_file
</h3>

Sube un nuevo archivo al workspace y opcionalmente lo procesa.

<ParamField path="file" type="binary" required>El archivo a subir.</ParamField>
<ParamField path="process" type="boolean" default="false">Si el archivo debe procesarse inmediatamente después de subirlo.</ParamField>

<h3 id="get-file">
  get\_file
</h3>

Devuelve los detalles de un archivo específico.

<ParamField path="fileId" type="integer" required>El ID del archivo.</ParamField>

<h3 id="delete-file">
  delete\_file
</h3>

Elimina un archivo del workspace.

<ParamField path="fileId" type="integer" required>El ID del archivo.</ParamField>

<h3 id="process-file">
  process\_file
</h3>

Activa (o reactiva) el procesamiento de un archivo ya subido.

<ParamField path="fileId" type="integer" required>El ID del archivo.</ParamField>

<h3 id="resolve-durable-file-reference">
  resolve\_durable\_file\_reference
</h3>

Resuelve una referencia de artefacto durable `doc://<universal_id>` (devuelta como `ref_url`) en una URL de descarga firmada, recién generada y de corta duración. La identidad y el alcance del workspace provienen de tu token de API.

<ParamField path="ref" type="string" required>La referencia de artefacto durable a resolver.</ParamField>

<h3 id="list-memories">
  list\_memories
</h3>

Lista las memorias almacenadas en el workspace.

<ParamField path="collection_id" type="integer">Filtra por colección de memorias.</ParamField>
<ParamField path="page" type="integer" default="1">Número de página para la paginación.</ParamField>
<ParamField path="per_page" type="integer" default="10">Elementos por página (máx. 50).</ParamField>

<h3 id="create-memory">
  create\_memory
</h3>

Guarda una nueva memoria en una colección.

<ParamField path="collection_id" type="integer">La colección de memorias donde almacenarla.</ParamField>
<ParamField path="memory" type="string">El texto de la memoria a almacenar (máx. 32.000 caracteres).</ParamField>

<h3 id="update-memory">
  update\_memory
</h3>

Edita una memoria existente.

<ParamField path="memory_id" type="integer" required>La memoria a actualizar.</ParamField>
<ParamField path="memory" type="string">Nuevo texto de la memoria.</ParamField>
<ParamField path="collection_id" type="integer">Mueve la memoria a otra colección.</ParamField>

<h3 id="delete-memory">
  delete\_memory
</h3>

Elimina una memoria existente.

<ParamField path="memory_id" type="integer" required>La memoria a eliminar.</ParamField>

<h3 id="import-memories-text">
  import\_memories\_text
</h3>

Activa una importación masiva de memorias desde texto libre. Asíncrono por defecto.

<ParamField path="wait" type="boolean" default="false">Si debe bloquear hasta que la importación se complete (con tiempo límite acotado) en lugar de devolver de inmediato.</ParamField>

<h3 id="get-memory-import-status-result">
  get\_memory\_import\_status\_result
</h3>

Devuelve el estado y el resumen de una ejecución de importación de memorias.

<ParamField path="id" type="string | integer" required>El ID de la ejecución de importación.</ParamField>

<h3 id="list-webhooks">
  list\_webhooks
</h3>

Lista todos los webhooks del workspace.

<ParamField path="page" type="integer" default="1">Página actual.</ParamField>
<ParamField path="per_page" type="integer" default="15">Cantidad de elementos por página.</ParamField>

<h3 id="delete-webhook">
  delete\_webhook
</h3>

Elimina un webhook por ID.

<ParamField path="id" type="integer" required>El ID del webhook.</ParamField>

<h3 id="deduct-credits-user">
  deduct\_credits\_user
</h3>

Deduce créditos de un usuario específico según el factor base del sistema de créditos y los parámetros de cálculo. Pensado para integraciones a nivel de plataforma que miden el uso de un recurso personalizado.

<ParamField path="tess_external_identifier" type="integer" required>Identificador del usuario/workspace del que se deducirán los créditos.</ParamField>
<ParamField path="resource_type" type="string" required>Tipo de recurso que se está midiendo (por ejemplo, `image`).</ParamField>
<ParamField path="resource_amount" type="number" required>Valor numérico positivo usado en el cálculo de créditos.</ParamField>
<ParamField path="workspace_id" type="integer">El ID del workspace.</ParamField>
<ParamField path="resource_id" type="string">ID del recurso que se está midiendo.</ParamField>
<ParamField path="inputs" type="object">Entradas adicionales para el cálculo de créditos.</ParamField>

<h3 id="get-workspace-usage">
  get\_workspace\_usage
</h3>

Devuelve el uso del workspace desglosado por tipo y rango de fechas.

<ParamField path="range" type="string">Filtro de rango de fechas predefinido (`1d`/`7d`/`30d`).</ParamField>
<ParamField path="start_date" type="string">Fecha de inicio personalizada (`YYYY-MM-DD`). Úsala con `end_date`; sobrescribe `range`.</ParamField>
<ParamField path="end_date" type="string">Fecha de fin personalizada (`YYYY-MM-DD`). Úsala con `start_date`; sobrescribe `range`.</ParamField>
<ParamField path="user_id" type="integer">Filtra por ID de usuario (requiere el permiso `WORKSPACE_DOCUMENTS_READ`).</ParamField>
<ParamField path="type" type="string">Filtra por tipo de uso (`chat`, `image`, `text`, `tool_execution`, `connector_calls`, entre otros).</ParamField>
<ParamField path="page" type="integer" default="1">Número de página para la paginación.</ParamField>

## Ejemplo: ejecuta un agente de principio a fin

Una vez conectado, puedes conducir un flujo completo en lenguaje natural:

<Steps>
  <Step title="Descubre los agentes">
    *"Lista mis agentes de Tess"* → el asistente invoca [`list_agents`](#list-agents) y muestra lo disponible.
  </Step>

  <Step title="Captura contexto como memoria">
    *"Guarda en mi colección 'Estándares de Ingeniería': escribe siempre pruebas unitarias con BDD"* → [`create_memory`](#create-memory).
  </Step>

  <Step title="Ejecuta un agente">
    *"Usa el agente de Code Review para revisar esta función, y espera el resultado"* → [`execute_agent`](#execute-agent) devuelve la salida al instante.
  </Step>

  <Step title="Reutiliza más tarde">
    *"Lista mis memorias"* → [`list_memories`](#list-memories) confirma lo almacenado para futuras ejecuciones.
  </Step>
</Steps>

## Gobernanza y cumplimiento

* **Privilegio mínimo** — conéctate con un token delimitado a un único workspace y solo con los permisos que esa integración necesita.
* **Auditabilidad** — las ejecuciones disparadas vía MCP aparecen en el historial y el uso de tu workspace en Tess, como cualquier llamada a la API.
* **Sin almacenamiento de credenciales** — la puerta de enlace no tiene estado; los tokens viven solo en la configuración de tu cliente MCP.
* **Revocación centralizada** — desactivar un token en el panel bloquea de inmediato todas las plataformas que lo usan.

## Solución de problemas

<AccordionGroup>
  <Accordion title="El cliente conecta pero no aparece ninguna herramienta">
    Confirma que tu cliente usa el transporte **Streamable HTTP** (remoto) en lugar de un comando local/stdio, y que apunta directamente a `https://mcp.tess.im` (sin ruta adicional).
  </Accordion>

  <Accordion title="Errores 401 / 'no autorizado'">
    Ambos encabezados son obligatorios en cada solicitud — `Authorization: Bearer TU_TOKEN_DE_API` y `x-workspace-id: TU_WORKSPACE_ID`. No hay opción mediante parámetros de URL; confirma que tu cliente admite el envío de encabezados personalizados y que el token está activo en el panel.
  </Accordion>

  <Accordion title="Errores 404 o de 'workspace'">
    Falta el ID del workspace, está mal formado, o el token no tiene acceso a él. Confirma que el encabezado `x-workspace-id` esté definido y corresponda a un workspace accesible por tu token.
  </Accordion>

  <Accordion title="Un agente falla al ejecutarse">
    Algunos agentes requieren entradas específicas. Los agentes de tipo chat, por ejemplo, esperan un array `messages` dentro de `body`. Pide al asistente que inspeccione los campos del agente ([`get_agent`](#get-agent)), o revisa el agente en la plataforma Tess.
  </Accordion>
</AccordionGroup>

## Recursos

* [Model Context Protocol — sitio oficial](https://modelcontextprotocol.io)
* [Cómo crear un Token de API en Tess AI](https://docs.tess.im/api/get-started/quickstart)
