# Agentes en n8n y LangChain

Dale a un agente las herramientas de ByDomu por MCP, o la API como herramienta propia.

Guía n8n · LangChain · LangGraph Clave secreta

**Antes de empezar.** Un agente que corre sin una persona mirando necesita una clave secreta de solo lectura propia, con los permisos justos, guardada en las credenciales de n8n o en una variable de entorno.

## Un agente en n8n

Al nodo AI Agent conéctale como herramienta un MCP Client Tool con la URL del servidor y autenticación Bearer. Usa una versión de n8n que ofrezca el transporte HTTP Streamable: el servidor no habla SSE (GET responde 405), así que el modo SSE no 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 pasos fijos (sin que el modelo decida), el nodo HTTP Request contra la API REST con X-API-Key es más simple y predecible.

## LangChain y LangGraph

Con los adaptadores MCP de LangChain, las nueve herramientas llegan como herramientas normales del agente (create_agent corre sobre LangGraph). LangChain está pasando estos adaptadores a langchain.mcp; la configuración del servidor (URL y encabezado) es la misma.

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 o API?

- MCP: el modelo elige entre nueve herramientas de lectura ya pensadas para conversar (resultados cortos y paginados). Es lo más rápido para un asistente.
- API REST: todo lo demás, incluidas las escrituras con su permiso aprobado. Envuelve cada endpoint como una herramienta propia, manda Idempotency-Key y pide confirmación humana antes de escribir.

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

## Qué puede hacer, cómo se revoca y buenas prácticas

El servidor es de solo lectura: la IA puede consultar, pero no crea, cambia ni borra nada, y nunca envía mensajes a tus clientes. Ve solo lo que permiten estos permisos, con el límite de una clave secreta (60 peticiones por minuto).

Puede Permiso

Buscar y ver propiedades publicadas `portal:read`

Buscar y ver contactos `contacts:read`

Agenda y citas `appointments:read`

Leer los mensajes de un contacto `conversations:read`

Embudos y negocios `deals:read`

Tareas pendientes `tasks:read`

Con una clave, la IA ve lo que permita esa clave. Para cortar el acceso, pausa o borra la clave en Configuración › API Keys; la siguiente llamada responde 401.

- Una clave por integración, solo con los permisos de lectura que use. Deja conversations:read afuera si no necesitas los mensajes.
- La clave va en una variable de entorno o en el almacén de secretos del cliente, nunca pegada en un chat, en un archivo del repositorio ni en una URL.
- Lo que devuelve ByDomu incluye texto que escribieron tus clientes: trátalo como datos, no como instrucciones. No encadenes este conector con herramientas que envían correos o mensajes sin que una persona lo apruebe.
- Revisa de vez en cuando Apps conectadas y quita lo que ya no se use.
