Connecting to Multiple MCP Servers
Overview
Section titled “Overview”MCPServerAdapter in crewai-tools allows you to connect to multiple MCP servers concurrently. This is useful when your agents need to access tools distributed across different services or environments. The adapter aggregates tools from all specified servers, making them available to your CrewAI agents.
Configuration
Section titled “Configuration”To connect to multiple servers, you provide a list of server parameter dictionaries to MCPServerAdapter. Each dictionary in the list should define the parameters for one MCP server.
Supported transport types for each server in the list include stdio, sse, and streamable-http.
from crewai import Agent, Task, Crew, Processfrom crewai_tools import MCPServerAdapterfrom mcp import StdioServerParameters # Needed for Stdio example
# Define parameters for multiple MCP serversserver_params_list = [ # Streamable HTTP Server { "url": "http://localhost:8001/mcp", "transport": "streamable-http" }, # SSE Server { "url": "http://localhost:8000/sse", "transport": "sse" }, # StdIO Server StdioServerParameters( command="python3", args=["servers/your_stdio_server.py"], env={"UV_PYTHON": "3.12", **os.environ}, )]
try: with MCPServerAdapter(server_params_list) as aggregated_tools: print(f"Available aggregated tools: {[tool.name for tool in aggregated_tools]}")
multi_server_agent = Agent( role="Versatile Assistant", goal="Utilize tools from local Stdio, remote SSE, and remote HTTP MCP servers.", backstory="An AI agent capable of leveraging a diverse set of tools from multiple sources.", tools=aggregated_tools, # All tools are available here verbose=True, )
... # Your other agent, tasks, and crew code here
except Exception as e: print(f"Error connecting to or using multiple MCP servers (Managed): {e}") print("Ensure all MCP servers are running and accessible with correct configurations.")Connection Management
Section titled “Connection Management”When using the context manager (with statement), MCPServerAdapter handles the lifecycle (start and stop) of all connections to the configured MCP servers. This simplifies resource management and ensures that all connections are properly closed when the context is exited.