# Configuración de LangChain

> Conecte agentes de LangChain a graph8 mediante MCP usando langchain-mcp-adapters y LangGraph

Source: https://docs.graph8.com/es/developers/langchain-setup/

Conecte un agente de LangChain o LangGraph al servidor MCP de graph8. Se admiten dos transportes: hospedado (OAuth remoto) y autohospedado (stdio local).

> **Tip:**
> Pruebe el nivel para desarrolladores gratis: 1,000 créditos, sin necesidad de tarjeta. [Comenzar](https://auth.graph8.com/en/signup).

## Requisitos previos

- Python 3.10+
- `langchain-mcp-adapters`, `langgraph`, `langchain-anthropic` (o el proveedor que prefiera)
- Una cuenta de graph8 con una clave de API personal generada desde **Perfil -> Desarrollador** (para stdio), o cualquier sesión activa (para OAuth)

```bash
pip install langchain-mcp-adapters langgraph langchain-anthropic
```

## MCP hospedado (OAuth remoto)

Utilice esta opción cuando desee que graph8 gestione la autenticación mediante OAuth y no quiera instalar el servidor MCP localmente. El agente se conecta a `https://be.graph8.com/mcp/` mediante HTTP transmisible y le solicita iniciar sesión una sola vez.

```python
import asyncio
import os

from langchain_mcp_adapters.client import MultiServerMCPClient
from langgraph.prebuilt import create_react_agent
from langchain_anthropic import ChatAnthropic

async def main() -> None:
    client = MultiServerMCPClient(
        {
            "graph8": {
                "transport": "streamable_http",
                "url": "https://be.graph8.com/mcp/",
            }
        }
    )

    tools = await client.get_tools()
    model = ChatAnthropic(
        model="claude-sonnet-4",
        api_key=os.environ["ANTHROPIC_API_KEY"],
    )
    agent = create_react_agent(model, tools)

    result = await agent.ainvoke(
        {
            "messages": [
                (
                    "user",
                    "Find 25 VP Engineering at Series B SaaS companies "
                    "in the United States. Return name, company, and title.",
                )
            ]
        }
    )
    print(result["messages"][-1].content)

if __name__ == "__main__":
    asyncio.run(main())
```

La primera ejecución abre una ventana del navegador para completar el OAuth. Las ejecuciones posteriores reutilizan el token almacenado en caché por el cliente MCP.

## MCP autohospedado (stdio)

Utilice esta opción cuando no pueda depender de OAuth basado en navegador (CI, servidores sin interfaz gráfica, entornos sin conexión). Requiere `uv` o Python en el host, además de una clave de API personal.

```bash
export G8_API_KEY="g8_..."
```

```python
import asyncio
import os

from langchain_mcp_adapters.client import MultiServerMCPClient
from langgraph.prebuilt import create_react_agent
from langchain_anthropic import ChatAnthropic

async def main() -> None:
    client = MultiServerMCPClient(
        {
            "graph8": {
                "transport": "stdio",
                "command": "uvx",
                "args": ["g8-mcp-server"],
                "env": {
                    "G8_API_KEY": os.environ["G8_API_KEY"],
                    "G8_MCP_MODE": "gtm",
                },
            }
        }
    )

    tools = await client.get_tools()
    model = ChatAnthropic(model="claude-sonnet-4")
    agent = create_react_agent(model, tools)

    result = await agent.ainvoke(
        {"messages": [("user", "Search my CRM for contacts at Stripe.")]}
    )
    print(result["messages"][-1].content)

if __name__ == "__main__":
    asyncio.run(main())
```

Configure `G8_MCP_MODE` en `dev`, `gtm` o `all` para delimitar el conjunto de herramientas disponibles. Consulte [Modos](https://docs.graph8.com/developers/mcp/#modes).

## Ejemplo práctico: prospectar, calificar e inscribir

Agente de LangGraph de extremo a extremo que encuentra prospectos, los guarda en una lista e inscribe esa lista en una secuencia. Confirme los pasos que consumen créditos antes de ejecutarlo.

```python
prompt = (
    "1. Use g8_find_contacts to preview 50 VP Engineering at Series B SaaS in the US.\n"
    "2. Show me the top 10 by company size and ask me to confirm.\n"
    "3. On confirmation, use g8_build_contact_list to save them to a new list "
    "named 'Series B SaaS VP Eng'.\n"
    "4. Then use g8_list_sequences to find a sequence named 'New SaaS Outreach'.\n"
    "5. Use g8_add_to_sequence to enroll the saved contacts. Ask me to confirm "
    "before enrolling."
)
```

graph8 aplica una regla de confirmación para las herramientas que consumen créditos (`g8_build_contact_list`, `g8_add_to_sequence`). El agente se detendrá y pedirá confirmación antes de ejecutar cualquiera de ellas.

## Relacionado

- [Descripción general del servidor MCP](https://docs.graph8.com/developers/mcp/)
- [Referencia de herramientas MCP](https://docs.graph8.com/developers/mcp-tools/)
- [Preguntas frecuentes sobre MCP](https://docs.graph8.com/developers/mcp-faq/)
- [Ejemplos de extremo a extremo](https://docs.graph8.com/developers/mcp-examples/)
