# Agentes no n8n e no LangChain

Dê a um agente as ferramentas do ByDomu por MCP, ou a API como ferramenta própria.

Guia n8n · LangChain · LangGraph Chave secreta

**Antes de começar.** Um agente que roda sem uma pessoa olhando precisa de uma chave secreta somente leitura própria, com as permissões certas, guardada nas credenciais do n8n ou em uma variável de ambiente.

## Um agente no n8n

Conecte ao nó AI Agent, como ferramenta, um MCP Client Tool com a URL do servidor e autenticação Bearer. Use uma versão do n8n que ofereça o transporte HTTP Streamable: o servidor não fala SSE (GET responde 405), então o modo SSE não conecta.

MCP Client Tool:

```
AI Agent
 └─ Tool: MCP Client Tool
      Endpoint        https://mcp.bydomu.com/mcp
      Server Transport  HTTP Streamable   (en versiones recientes; SSE no conecta)
      Authentication  Bearer  →  credencial con domu_sk_live_… (solo lectura)
      Tools to Include  Selected → search_properties, get_property, list_appointments
```

HTTP Request:

```
HTTP Request
  Method   GET
  URL      https://api.bydomu.com/v1/properties
  Authentication  Generic Credential Type → Header Auth
                  Name: X-API-Key   Value: domu_sk_live_…
  Query    city = {{ $json.ciudad }} · transactionType = RENT · pageSize = 12
```

Para passos fixos (sem o modelo decidir), o nó HTTP Request contra a API REST com X-API-Key é mais simples e previsível.

## LangChain e LangGraph

Com os adaptadores MCP do LangChain, as nove ferramentas chegam como ferramentas normais do agente (create_agent roda sobre o LangGraph). O LangChain está levando esses adaptadores para langchain.mcp; a configuração do servidor (URL e cabeçalho) é a mesma.

Python:

```python
# pip install langchain langchain-mcp-adapters langchain-anthropic
import asyncio, os
from langchain.agents import create_agent
from langchain_mcp_adapters.client import MultiServerMCPClient

async def main():
    client = MultiServerMCPClient({
        "bydomu": {
            "transport": "streamable_http",
            "url": "https://mcp.bydomu.com/mcp",
            "headers": {"Authorization": f"Bearer {os.environ['BYDOMU_API_KEY']}"},
        }
    })
    tools = await client.get_tools()
    agent = create_agent("anthropic:claude-opus-5", tools)
    result = await agent.ainvoke(
        {"messages": [{"role": "user", "content": "¿Qué tareas vencidas tiene el equipo?"}]}
    )
    print(result["messages"][-1].content)

asyncio.run(main())
```

TypeScript:

```ts
// npm install langchain @langchain/mcp-adapters @langchain/anthropic
import { MultiServerMCPClient } from "@langchain/mcp-adapters";
import { createAgent } from "langchain";

const client = new MultiServerMCPClient({
  bydomu: {
    transport: "http",
    url: "https://mcp.bydomu.com/mcp",
    headers: { Authorization: `Bearer ${process.env.BYDOMU_API_KEY}` },
  },
});
const tools = await client.getTools();
const agent = createAgent({ model: "anthropic:claude-opus-5", tools });
const result = await agent.invoke({
  messages: [{ role: "user", content: "Resume los negocios abiertos por etapa." }],
});
console.log(result.messages.at(-1)?.content);
```

## MCP ou API?

- MCP: o modelo escolhe entre nove ferramentas de leitura pensadas para conversa (resultados curtos e paginados). É o caminho mais rápido para um assistente.
- API REST: todo o resto, inclusive escritas com a permissão aprovada. Envolva cada endpoint como ferramenta própria, envie Idempotency-Key e peça confirmação humana antes de escrever.

[Prompts prontos para agentes de código](https://developers.bydomu.com/pt/prompts)

## O que pode fazer, como revogar e boas práticas

O servidor é somente leitura: a IA pode consultar, mas não cria, muda nem apaga nada, e nunca envia mensagens aos seus clientes. Ela só vê o que estas permissões permitem, com o limite de uma chave secreta (60 requisições por minuto).

Pode Permissão

Buscar e ver imóveis publicados `portal:read`

Buscar e ver contatos `contacts:read`

Agenda e compromissos `appointments:read`

Ler as mensagens de um contato `conversations:read`

Funis e negócios `deals:read`

Tarefas pendentes `tasks:read`

Com uma chave, a IA vê o que essa chave permitir. Para cortar o acesso, pause ou apague a chave em Configurações › API Keys; a próxima chamada responde 401.

- Uma chave por integração, só com as permissões de leitura que usa. Deixe conversations:read de fora se não precisa das mensagens.
- A chave vai em uma variável de ambiente ou no cofre de segredos do cliente, nunca colada num chat, num arquivo do repositório nem numa URL.
- O que o ByDomu devolve inclui texto escrito pelos seus clientes: trate como dados, não como instruções. Não encadeie este conector com ferramentas que enviam e-mails ou mensagens sem aprovação de uma pessoa.
- Revise de vez em quando os Apps conectados e remova o que não se usa mais.
