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

> Conecte a Tess AI ao Claude, Cursor, Codex e qualquer plataforma compatível com MCP — com segurança, usando o seu próprio token de API.

O **Servidor MCP da Tess AI** transforma seus agentes, execuções e memórias da Tess em ferramentas que qualquer cliente do **Model Context Protocol (MCP)** pode chamar. É um **endpoint hospedado e gerenciado**: não há nada para instalar, empacotar ou executar.

Aponte sua plataforma de IA para uma única URL, autentique-se com o seu **token de API da Tess** e sua equipe poderá listar, executar e orquestrar agentes da Tess diretamente nas ferramentas que já utiliza.

<Note>
  **Endpoint:** `https://mcp.tess.im` — um servidor MCP remoto que usa o transporte **Streamable HTTP**. Sem `npx`, sem processo local, sem necessidade de Node.js.
</Note>

## Por que conectar via MCP

<CardGroup cols={2}>
  <Card title="Use a Tess onde sua equipe já trabalha" icon="plug">
    Execute agentes da Tess de dentro do Claude, Cursor, Codex ou suas próprias ferramentas internas — sem troca de contexto, sem copiar e colar.
  </Card>

  <Card title="Zero instalação, sempre atualizado" icon="cloud">
    Um endpoint gerenciado mantido pela Tess. Novos recursos aparecem automaticamente; não há cliente para atualizar.
  </Card>

  <Card title="Governado pelo seu workspace" icon="shield-check">
    Cada chamada é executada com o token e o workspace de quem chama, herdando suas funções, permissões e limites de créditos existentes.
  </Card>

  <Card title="Padronizado e portátil" icon="arrows-rotate">
    Construído sobre o protocolo aberto MCP. O mesmo endpoint funciona em todas as plataformas compatíveis — sem integração por fornecedor.
  </Card>
</CardGroup>

## O que o servidor expõe

O conjunto de ferramentas é **gerado automaticamente a partir da API da Tess** — cada endpoint vira uma ferramenta MCP, então novas capacidades da API aparecem sem qualquer alteração no servidor. Todas as ferramentas estão listadas abaixo, agrupadas por domínio, cada uma com sua própria entrada linkável em [Referência das ferramentas](#tools-reference).

| Domínio                  | Ferramentas                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     |
| ------------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **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) |
| **Arquivos**             | [`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)                                                                                                                                                                                                                                                                   |
| **Memórias**             | [`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 e workspace** | [`deduct_credits_user`](#deduct-credits-user) · [`get_workspace_usage`](#get-workspace-usage)                                                                                                                                                                                                                                                                                                                                                                                                   |

<Info>
  Esta lista cobre todas as ferramentas relevantes para uma integração de terceiros. Ferramentas de organização de pastas/chats (usadas internamente pela interface web da Tess) também existem, mas não são documentadas aqui — peça ao seu assistente para "listar as ferramentas disponíveis" e ver o conjunto completo e atual diretamente do seu cliente MCP.
</Info>

## Antes de começar

Você precisa de duas informações da plataforma Tess:

<Steps>
  <Step title="Seu token de API">
    Gere um token de acesso pessoal em **[Tess AI → Tokens de API](https://tess.im/dashboard/user/tokens)**. É o mesmo token usado em toda a API da Tess — veja o [Quickstart](https://docs.tess.im/api/get-started/quickstart) para detalhes.
  </Step>

  <Step title="O ID do seu workspace">
    O servidor MCP é **escopado por workspace**. Encontre o ID do seu workspace na URL do painel da Tess ou nas configurações do workspace, e use o do workspace cujos agentes você deseja acessar. Cada chamada fica isolada a esse workspace.
  </Step>
</Steps>

<Warning>
  Trate seu token de API como uma senha. Ele concede acesso aos agentes e execuções do seu workspace, que podem consumir créditos. Prefira um token dedicado por integração para poder revogá-lo de forma independente.
</Warning>

## Autenticação

As credenciais são enviadas **apenas como cabeçalhos HTTP** — nunca como parâmetros de URL, para que tokens não fiquem em logs ou no histórico do navegador:

```
Authorization: Bearer SEU_TOKEN_DE_API
x-workspace-id: SEU_WORKSPACE_ID
```

Os dois cabeçalhos são obrigatórios em toda requisição. **Obrigatório a partir de 01/09/2026** para o escopo de workspace da API Tess (mesma política do header da API REST). Não há alternativa via parâmetro de URL — seu cliente MCP precisa suportar o envio de cabeçalhos personalizados.

## Conecte sua plataforma

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

    Depois, em uma sessão: *"Use a Tess para executar o agente de Code Review neste diff."*
  </Tab>

  <Tab title="Cursor / VS Code">
    Adicione a Tess à sua configuração MCP (no Cursor: **Tools & Integrations → MCP Tools**, ou `~/.cursor/mcp.json`):

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

  <Tab title="Codex CLI">
    Adicione um servidor MCP remoto com cabeçalhos em `~/.codex/config.toml`:

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

    <Note>A sintaxe de configuração pode mudar entre versões do Codex CLI — confira `codex mcp --help` ou a documentação atual do Codex se isso não corresponder ao que você vê.</Note>
  </Tab>

  <Tab title="Claude Desktop / ChatGPT / outros">
    Essas plataformas se conectam a servidores MCP remotos por meio de uma interface de "conector personalizado". Para funcionar com a Tess, a configuração do conector precisa permitir definir **duas** coisas:

    * A URL do endpoint: `https://mcp.tess.im`
    * **Dois** cabeçalhos personalizados: `Authorization: Bearer SEU_TOKEN_DE_API` e `x-workspace-id: SEU_WORKSPACE_ID`

    Algumas interfaces de conector só expõem um único campo de bearer token e não suportam adicionar um segundo cabeçalho personalizado — confira a documentação atual da sua plataforma para saber se cabeçalhos personalizados (além de um bearer token) são suportados para conectores MCP remotos. Se sua plataforma suportar apenas um cabeçalho de autenticação, use um dos clientes com suporte a cabeçalhos acima (Claude Code, Cursor, Codex CLI) ou uma integração personalizada.
  </Tab>
</Tabs>

## Como funciona a autenticação

O servidor MCP é um **gateway sem estado**. Ele não armazena suas credenciais. A cada requisição ele:

1. Lê seu token de API e o ID do workspace a partir dos cabeçalhos da requisição.
2. Encaminha a chamada para a API da Tess **como você**, exatamente como uma chamada direta à API faria.
3. Retorna o resultado ao seu cliente MCP.

Isso significa que o servidor herda **todos** os controles existentes da sua plataforma:

<CardGroup cols={2}>
  <Card title="Identidade e permissões" icon="user-shield">
    As chamadas rodam com a identidade do dono do token. Visibilidade de agentes, funções e permissões de recursos são aplicadas pela Tess, sem atalhos.
  </Card>

  <Card title="Isolamento de workspace" icon="building-lock">
    Cada requisição é vinculada ao `x-workspace-id` enviado. Um token não alcança dados de outro workspace.
  </Card>

  <Card title="Governança de créditos" icon="coins">
    As execuções consomem créditos sob os limites e a cobrança do seu workspace — igual à API da Tess.
  </Card>

  <Card title="Acesso revogável" icon="key">
    Revogue um token no painel para cortar instantaneamente qualquer plataforma conectada que o utilize. Sem necessidade de redeploy.
  </Card>
</CardGroup>

## Referência das ferramentas

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

Lista os agentes disponíveis no workspace, com busca e paginação.

<ParamField path="q" type="string">Busca agentes por título, descrição e descrição longa.</ParamField>
<ParamField path="type" type="string">Filtra por tipo de agente.</ParamField>
<ParamField path="page" type="integer" default="1">Número da página para paginação.</ParamField>
<ParamField path="per_page" type="integer" default="15">Quantidade de agentes por página.</ParamField>

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

Retorna os detalhes completos de um agente (entradas, tipo, descrição).

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

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

Executa um agente com as entradas fornecidas e, opcionalmente, aguarda o resultado.

<ParamField path="id" type="string | integer" required>O ID do agente.</ParamField>
<ParamField path="body" type="object" required>As respostas do agente. Para agentes do tipo chat, inclua um array `messages` (pares `role`/`content`, no mesmo formato do OpenAI Chat Completions).</ParamField>
<ParamField path="wait_execution" type="boolean" default="false">Quando `true`, aguarda o término da execução e retorna a saída final. Quando `false`, retorna imediatamente para que você consulte a execução depois.</ParamField>

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

Obtém a lista de arquivos associados a um agente específico.

<ParamField path="agentId" type="integer" required>ID do agente para o qual recuperar os arquivos.</ParamField>

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

Associa um ou mais arquivos a um agente específico.

<ParamField path="agentId" type="integer" required>ID do agente ao qual vincular os arquivos.</ParamField>
<ParamField path="file_ids" type="integer[]" required>Array de IDs de arquivos a vincular ao agente.</ParamField>

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

Remove a associação entre um arquivo específico e um agente.

<ParamField path="agentId" type="integer" required>ID do agente do qual remover o vínculo do arquivo.</ParamField>
<ParamField path="fileId" type="integer" required>ID do arquivo a desvincular do agente.</ParamField>

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

Lista respostas de execuções de agentes, com filtros e paginação.

<ParamField path="q" type="string">Busca agentes por título.</ParamField>
<ParamField path="root_id" type="integer">Filtra pelo ID de execução raiz.</ParamField>
<ParamField path="agent_id" type="integer">Filtra pelo ID do agente.</ParamField>
<ParamField path="type" type="string">Filtra por tipo de agente.</ParamField>
<ParamField path="sort" type="string" default="asc">Ordena de forma ascendente ou descendente (`asc`/`desc`).</ParamField>
<ParamField path="page" type="integer" default="1">Página atual.</ParamField>
<ParamField path="per_page" type="integer" default="15">Quantidade de itens por página.</ParamField>

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

Obtém uma resposta de execução de agente específica pelo ID.

<ParamField path="id" type="string | integer" required>O ID da execução do agente.</ParamField>

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

Lista os webhooks registrados para um agente específico.

<ParamField path="id" type="integer" required>ID do agente.</ParamField>
<ParamField path="page" type="integer" default="1">Página atual.</ParamField>
<ParamField path="per_page" type="integer" default="15">Quantidade de itens por página.</ParamField>

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

Registra um novo webhook em um agente específico.

<ParamField path="id" type="string | integer" required>O ID do agente.</ParamField>
<ParamField path="url" type="string">A URL de destino do webhook.</ParamField>
<ParamField path="method" type="string" default="POST">Método HTTP usado na chamada do webhook.</ParamField>
<ParamField path="status" type="string" default="active">Status do webhook (`active`/inativo).</ParamField>

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

Executa um agente através de uma interface compatível com o OpenAI Chat Completions — útil para clientes já integrados no formato da API da OpenAI.

<ParamField path="id" type="string | integer" required>O ID do agente.</ParamField>
<ParamField path="body" type="object" required>Um corpo de requisição no formato do OpenAI Chat Completions.</ParamField>

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

Obtém uma lista paginada de arquivos do workspace, com opções de ordenação.

<ParamField path="page" type="integer" default="1">Número da página para paginação.</ParamField>
<ParamField path="per_page" type="integer" default="15">Quantidade de itens por página (máx. 100).</ParamField>
<ParamField path="order" type="string" default="desc">Ordem de classificação pelo campo `created_at` (`asc`/`desc`).</ParamField>

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

Envia um novo arquivo ao workspace e opcionalmente o processa.

<ParamField path="file" type="binary" required>O arquivo a enviar.</ParamField>
<ParamField path="process" type="boolean" default="false">Se o arquivo deve ser processado imediatamente após o envio.</ParamField>

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

Retorna os detalhes de um arquivo específico.

<ParamField path="fileId" type="integer" required>O ID do arquivo.</ParamField>

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

Exclui um arquivo do workspace.

<ParamField path="fileId" type="integer" required>O ID do arquivo.</ParamField>

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

Aciona (ou reaciona) o processamento de um arquivo já enviado.

<ParamField path="fileId" type="integer" required>O ID do arquivo.</ParamField>

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

Resolve uma referência de artefato durável `doc://<universal_id>` (retornada como `ref_url`) em uma URL de download assinada, recém-gerada e de curta duração. A identidade e o escopo do workspace vêm do seu token de API.

<ParamField path="ref" type="string" required>A referência de artefato durável a resolver.</ParamField>

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

Lista as memórias armazenadas no workspace.

<ParamField path="collection_id" type="integer">Filtra por coleção de memórias.</ParamField>
<ParamField path="page" type="integer" default="1">Número da página para paginação.</ParamField>
<ParamField path="per_page" type="integer" default="10">Itens por página (máx. 50).</ParamField>

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

Salva uma nova memória em uma coleção.

<ParamField path="collection_id" type="integer">A coleção de memórias onde armazenar.</ParamField>
<ParamField path="memory" type="string">O texto da memória a armazenar (máx. 32.000 caracteres).</ParamField>

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

Edita uma memória existente.

<ParamField path="memory_id" type="integer" required>A memória a atualizar.</ParamField>
<ParamField path="memory" type="string">Novo texto da memória.</ParamField>
<ParamField path="collection_id" type="integer">Move a memória para outra coleção.</ParamField>

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

Remove uma memória existente.

<ParamField path="memory_id" type="integer" required>A memória a excluir.</ParamField>

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

Aciona uma importação em massa de memórias a partir de texto livre. Assíncrono por padrão.

<ParamField path="wait" type="boolean" default="false">Se deve bloquear até a importação ser concluída (com timeout limitado) em vez de retornar imediatamente.</ParamField>

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

Retorna o status e o resumo de uma execução de importação de memórias.

<ParamField path="id" type="string | integer" required>O ID da execução de importação.</ParamField>

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

Lista todos os webhooks do workspace.

<ParamField path="page" type="integer" default="1">Página atual.</ParamField>
<ParamField path="per_page" type="integer" default="15">Quantidade de itens por página.</ParamField>

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

Exclui um webhook pelo ID.

<ParamField path="id" type="integer" required>O ID do webhook.</ParamField>

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

Deduz créditos de um usuário específico com base no fator-base do sistema de créditos e nos parâmetros de cálculo. Destinado a integrações de plataforma que medem o uso de um recurso personalizado.

<ParamField path="tess_external_identifier" type="integer" required>Identificador do usuário/workspace de quem os créditos serão deduzidos.</ParamField>
<ParamField path="resource_type" type="string" required>Tipo de recurso sendo medido (por exemplo, `image`).</ParamField>
<ParamField path="resource_amount" type="number" required>Valor numérico positivo usado no cálculo de créditos.</ParamField>
<ParamField path="workspace_id" type="integer">O ID do workspace.</ParamField>
<ParamField path="resource_id" type="string">ID do recurso sendo medido.</ParamField>
<ParamField path="inputs" type="object">Entradas adicionais para o cálculo de créditos.</ParamField>

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

Retorna o uso do workspace detalhado por tipo e intervalo de datas.

<ParamField path="range" type="string">Filtro de intervalo de datas predefinido (`1d`/`7d`/`30d`).</ParamField>
<ParamField path="start_date" type="string">Data inicial personalizada (`YYYY-MM-DD`). Use com `end_date`; sobrepõe `range`.</ParamField>
<ParamField path="end_date" type="string">Data final personalizada (`YYYY-MM-DD`). Use com `start_date`; sobrepõe `range`.</ParamField>
<ParamField path="user_id" type="integer">Filtra por ID de usuário (requer a permissão `WORKSPACE_DOCUMENTS_READ`).</ParamField>
<ParamField path="type" type="string">Filtra por tipo de uso (`chat`, `image`, `text`, `tool_execution`, `connector_calls`, entre outros).</ParamField>
<ParamField path="page" type="integer" default="1">Número da página para paginação.</ParamField>

## Exemplo: execute um agente de ponta a ponta

Após conectar, você pode conduzir um fluxo completo em linguagem natural:

<Steps>
  <Step title="Descubra os agentes">
    *"Liste meus agentes da Tess"* → o assistente chama [`list_agents`](#list-agents) e mostra o que está disponível.
  </Step>

  <Step title="Capture contexto como memória">
    *"Salve na minha coleção 'Padrões de Engenharia': sempre escreva testes unitários com BDD"* → [`create_memory`](#create-memory).
  </Step>

  <Step title="Execute um agente">
    *"Use o agente de Code Review para revisar esta função, e aguarde o resultado"* → [`execute_agent`](#execute-agent) retorna a saída na hora.
  </Step>

  <Step title="Reutilize depois">
    *"Liste minhas memórias"* → [`list_memories`](#list-memories) confirma o que está armazenado para execuções futuras.
  </Step>
</Steps>

## Governança e conformidade

* **Privilégio mínimo** — conecte-se com um token escopado a um único workspace e apenas com as permissões necessárias àquela integração.
* **Auditabilidade** — execuções disparadas via MCP aparecem no histórico e no uso do seu workspace na Tess, como qualquer chamada de API.
* **Sem armazenamento de credenciais** — o gateway é sem estado; os tokens ficam apenas na configuração do seu cliente MCP.
* **Revogação centralizada** — desativar um token no painel bloqueia imediatamente todas as plataformas que o utilizam.

## Solução de problemas

<AccordionGroup>
  <Accordion title="O cliente conecta mas nenhuma ferramenta aparece">
    Confirme que seu cliente usa o transporte **Streamable HTTP** (remoto) em vez de um comando local/stdio, e que está apontado diretamente para `https://mcp.tess.im` (sem caminho extra).
  </Accordion>

  <Accordion title="Erros 401 / 'não autorizado'">
    Os dois cabeçalhos são obrigatórios em toda requisição — `Authorization: Bearer SEU_TOKEN_DE_API` e `x-workspace-id: SEU_WORKSPACE_ID`. Não há opção via parâmetro de URL; confirme que seu cliente suporta o envio de cabeçalhos personalizados e que o token está ativo no painel.
  </Accordion>

  <Accordion title="Erros 404 ou de 'workspace'">
    O ID do workspace está ausente, malformado, ou o token não tem acesso a ele. Confirme que o cabeçalho `x-workspace-id` está definido e corresponde a um workspace acessível pelo seu token.
  </Accordion>

  <Accordion title="Um agente falha ao executar">
    Alguns agentes exigem entradas específicas. Agentes do tipo chat, por exemplo, esperam um array `messages` dentro de `body`. Peça ao assistente para inspecionar os campos do agente ([`get_agent`](#get-agent)), ou verifique o agente na plataforma Tess.
  </Accordion>
</AccordionGroup>

## Recursos

* [Model Context Protocol — site oficial](https://modelcontextprotocol.io)
* [Como criar um Token de API na Tess AI](https://docs.tess.im/api/get-started/quickstart)
