# Configuración de CrewAI

> Conecte crews multiagente de CrewAI a graph8 mediante MCPServerAdapter

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

Conecte un crew de CrewAI al servidor MCP de graph8. El `MCPServerAdapter` de CrewAI expone las herramientas de graph8 a todos los agentes del crew, de modo que un agente prospector y un agente de enriquecimiento pueden compartir el mismo conjunto de herramientas.

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

## Requisitos previos

- Python 3.10+
- `crewai`, `crewai-tools`

```bash
pip install crewai 'crewai-tools[mcp]'
```

## MCP alojado (OAuth remoto)

```python
import os

from crewai import Agent, Crew, Task
from crewai_tools import MCPServerAdapter

server_params = {
    "url": "https://be.graph8.com/mcp/",
    "transport": "streamable-http",
}

with MCPServerAdapter(server_params) as mcp_tools:
    prospector = Agent(
        role="SaaS Prospector",
        goal="Find VP Engineering at Series B SaaS companies",
        backstory="You preview prospects but never save without approval.",
        tools=mcp_tools,
        verbose=True,
    )

    enricher = Agent(
        role="Data Enricher",
        goal="Verify emails and enrich firmographics on saved prospects",
        backstory="You only act on lists the user has approved.",
        tools=mcp_tools,
        verbose=True,
    )

    find_task = Task(
        description=(
            "Use g8_find_contacts to preview 25 VP Engineering at Series B SaaS "
            "in the US. Return name, company, title, and signal score."
        ),
        agent=prospector,
        expected_output="A table of 25 prospects.",
    )

    enrich_task = Task(
        description=(
            "After the user approves the list, use g8_enrich_contacts to fill "
            "missing emails and phones."
        ),
        agent=enricher,
        expected_output="An enriched contact list with verified emails.",
        context=[find_task],
    )

    crew = Crew(agents=[prospector, enricher], tasks=[find_task, enrich_task])
    print(crew.kickoff())
```

La primera ejecución solicita autenticación OAuth. Ambos agentes comparten la misma sesión MCP autenticada a través del adaptador.

## MCP autoalojado (stdio)

```python
import os

from crewai_tools import MCPServerAdapter
from mcp import StdioServerParameters

server_params = StdioServerParameters(
    command="uvx",
    args=["g8-mcp-server"],
    env={
        "G8_API_KEY": os.environ["G8_API_KEY"],
        "G8_MCP_MODE": "gtm",
    },
)

with MCPServerAdapter(server_params) as mcp_tools:
    # ... same crew as above
    pass
```

## Ejemplo práctico: agente prospector + agente de enriquecimiento + cargador de secuencias

```python
sequence_loader = Agent(
    role="Sequence Loader",
    goal="Enroll approved contacts into the right sequence",
    backstory="You always confirm with the user before calling g8_add_to_sequence.",
    tools=mcp_tools,
    verbose=True,
)

load_task = Task(
    description=(
        "Find the 'New SaaS Outreach' sequence via g8_list_sequences. "
        "Use g8_get_sequence_preview to show the steps. Ask the user to confirm "
        "before calling g8_add_to_sequence for every contact on the enriched list."
    ),
    agent=sequence_loader,
    expected_output="Confirmation that contacts are enrolled, with a summary.",
    context=[enrich_task],
)
```

El servidor MCP de graph8 identifica `g8_build_contact_list`, `g8_enrich_contacts` y `g8_add_to_sequence` como herramientas que consumen créditos o envían mensajes de prospección. Las tareas de CrewAI siempre deben incluir un paso de confirmación explícito.

## Relacionados

- [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/)
