--- title: Transporte Stdio description: Aprenda como conectar o CrewAI a servidores MCP locais usando o mecanismo de transporte Stdio (Entrada/Saída Padrão). icon: server --- ## Visão Geral O transporte Stdio (Entrada/Saída Padrão) é projetado para conectar o `MCPServerAdapter` a servidores MCP locais que se comunicam por meio de seus fluxos de entrada e saída padrão. Isso é normalmente utilizado quando o servidor MCP é um script ou executável rodando na mesma máquina da sua aplicação CrewAI. ## Conceitos-Chave - **Execução Local**: O transporte Stdio gerencia um processo localmente em execução para o servidor MCP. - **`StdioServerParameters`**: Esta classe da biblioteca `mcp` é usada para configurar o comando, argumentos e variáveis de ambiente para iniciar o servidor Stdio. ## Conectando via Stdio Você pode se conectar a um servidor MCP baseado em Stdio usando duas abordagens principais para gerenciar o ciclo de vida da conexão: ### 1. Conexão Totalmente Gerenciada (Recomendado) Usar um context manager do Python (declaração `with`) é a abordagem recomendada. Ela lida automaticamente com o início do processo do servidor MCP e sua finalização quando o contexto é encerrado. ```python from crewai import Agent, Task, Crew, Process from crewai_tools import MCPServerAdapter from mcp import StdioServerParameters import os # Criar um objeto StdioServerParameters server_params=StdioServerParameters( command="python3", args=["servers/your_stdio_server.py"], env={"UV_PYTHON": "3.12", **os.environ}, ) with MCPServerAdapter(server_params) as tools: print(f"Available tools from Stdio MCP server: {[tool.name for tool in tools]}") # Exemplo: Usando as ferramentas do servidor MCP Stdio em um Agente CrewAI research_agent = Agent( role="Local Data Processor", goal="Process data using a local Stdio-based tool.", backstory="An AI that leverages local scripts via MCP for specialized tasks.", tools=tools, reasoning=True, verbose=True, ) processing_task = Task( description="Process the input data file 'data.txt' and summarize its contents.", expected_output="A summary of the processed data.", agent=research_agent, markdown=True ) data_crew = Crew( agents=[research_agent], tasks=[processing_task], verbose=True, process=Process.sequential ) result = data_crew.kickoff() print("\nCrew Task Result (Stdio - Managed):\n", result) ``` ### 2. Ciclo de Vida Manual da Conexão Se você precisa de um controle mais refinado sobre quando o processo do servidor MCP Stdio é iniciado e finalizado, pode gerenciar o ciclo de vida do `MCPServerAdapter` manualmente. Você **DEVE** chamar `mcp_server_adapter.stop()` para garantir que o processo do servidor seja finalizado e os recursos, liberados. Recomenda-se fortemente o uso de um bloco `try...finally`. ```python from crewai import Agent, Task, Crew, Process from crewai_tools import MCPServerAdapter from mcp import StdioServerParameters import os # Criar um objeto StdioServerParameters stdio_params=StdioServerParameters( command="python3", args=["servers/your_stdio_server.py"], env={"UV_PYTHON": "3.12", **os.environ}, ) mcp_server_adapter = MCPServerAdapter(server_params=stdio_params) try: mcp_server_adapter.start() # Inicia manualmente a conexão e o processo do servidor tools = mcp_server_adapter.tools print(f"Available tools (manual Stdio): {[tool.name for tool in tools]}") # Exemplo: Usando as ferramentas com sua configuração de Agent, Task, Crew manual_agent = Agent( role="Local Task Executor", goal="Execute a specific local task using a manually managed Stdio tool.", backstory="An AI proficient in controlling local processes via MCP.", tools=tools, verbose=True ) manual_task = Task( description="Execute the 'perform_analysis' command via the Stdio tool.", expected_output="Results of the analysis.", agent=manual_agent ) manual_crew = Crew( agents=[manual_agent], tasks=[manual_task], verbose=True, process=Process.sequential ) result = manual_crew.kickoff() # As entradas reais dependem da sua ferramenta print("\nCrew Task Result (Stdio - Manual):\n", result) except Exception as e: print(f"An error occurred during manual Stdio MCP integration: {e}") finally: if mcp_server_adapter and mcp_server_adapter.is_connected: # Verifica se está conectado antes de parar print("Stopping Stdio MCP server connection (manual)...") mcp_server_adapter.stop() # **Crucial: Assegure que stop seja chamado** elif mcp_server_adapter: # Se o adaptador existe mas não está conectado (ex.: start falhou) print("Stdio MCP server adapter was not connected. No stop needed or start failed.") ``` Lembre-se de substituir caminhos e comandos de exemplo pelos detalhes reais do seu servidor Stdio. O parâmetro `env` em `StdioServerParameters` pode ser usado para definir variáveis de ambiente para o processo do servidor, o que pode ser útil para configurar seu comportamento ou fornecer caminhos necessários (como `PYTHONPATH`).