--- title: 'MCP Servers as Tools in CrewAI' description: 'Learn how to integrate MCP servers as tools in your CrewAI agents using the `crewai-tools` library.' icon: plug --- ## Overview The [Model Context Protocol](https://modelcontextprotocol.io/introduction) (MCP) provides a standardized way for AI agents to provide context to LLMs by communicating with external services, known as MCP Servers. The `crewai-tools` library extends CrewAI's capabilities by allowing you to seamlessly integrate tools from these MCP servers into your agents. This gives your crews access to a vast ecosystem of functionalities. We currently support the following transport mechanisms: - **Stdio**: for local servers (communication via standard input/output between processes on the same machine) - **Server-Sent Events (SSE)**: for remote servers (unidirectional, real-time data streaming from server to client over HTTP) - **Streamable HTTP**: for remote servers (flexible, potentially bi-directional communication over HTTP, often utilizing SSE for server-to-client streams) ## Video Tutorial Watch this video tutorial for a comprehensive guide on MCP integration with CrewAI: ## Installation Before you start using MCP with `crewai-tools`, you need to install the `mcp` extra `crewai-tools` dependency with the following command: ```shell uv pip install 'crewai-tools[mcp]' ``` ## Key Concepts & Getting Started The `MCPServerAdapter` class from `crewai-tools` is the primary way to connect to an MCP server and make its tools available to your CrewAI agents. It supports different transport mechanisms and simplifies connection management. Using a Python context manager (`with` statement) is the **recommended approach** for `MCPServerAdapter`. It automatically handles starting and stopping the connection to the MCP server. ```python from crewai import Agent from crewai_tools import MCPServerAdapter from mcp import StdioServerParameters # For Stdio Server # Example server_params (choose one based on your server type): # 1. Stdio Server: server_params=StdioServerParameters( command="python3", args=["servers/your_server.py"], env={"UV_PYTHON": "3.12", **os.environ}, ) # 2. SSE Server: server_params = { "url": "http://localhost:8000/sse", "transport": "sse" } # 3. Streamable HTTP Server: server_params = { "url": "http://localhost:8001/mcp", "transport": "streamable-http" } # Example usage (uncomment and adapt once server_params is set): with MCPServerAdapter(server_params) as mcp_tools: print(f"Available tools: {[tool.name for tool in mcp_tools]}") my_agent = Agent( role="MCP Tool User", goal="Utilize tools from an MCP server.", backstory="I can connect to MCP servers and use their tools.", tools=mcp_tools, # Pass the loaded tools to your agent reasoning=True, verbose=True ) # ... rest of your crew setup ... ``` This general pattern shows how to integrate tools. For specific examples tailored to each transport, refer to the detailed guides below. ## Explore MCP Integrations Connect to local MCP servers via standard input/output. Ideal for scripts and local executables. Integrate with remote MCP servers using Server-Sent Events for real-time data streaming. Utilize flexible Streamable HTTP for robust communication with remote MCP servers. Aggregate tools from several MCP servers simultaneously using a single adapter. Review important security best practices for MCP integration to keep your agents safe. Checkout this repository for full demos and examples of MCP integration with CrewAI! 👇 CrewAI MCP Demo ## Staying Safe with MCP Always ensure that you trust an MCP Server before using it. #### Security Warning: DNS Rebinding Attacks SSE transports can be vulnerable to DNS rebinding attacks if not properly secured. To prevent this: 1. **Always validate Origin headers** on incoming SSE connections to ensure they come from expected sources 2. **Avoid binding servers to all network interfaces** (0.0.0.0) when running locally - bind only to localhost (127.0.0.1) instead 3. **Implement proper authentication** for all SSE connections Without these protections, attackers could use DNS rebinding to interact with local MCP servers from remote websites. For more details, see the [Anthropic's MCP Transport Security docs](https://modelcontextprotocol.io/docs/concepts/transports#security-considerations). ### Limitations * **Supported Primitives**: Currently, `MCPServerAdapter` primarily supports adapting MCP `tools`. Other MCP primitives like `prompts` or `resources` are not directly integrated as CrewAI components through this adapter at this time. * **Output Handling**: The adapter typically processes the primary text output from an MCP tool (e.g., `.content[0].text`). Complex or multi-modal outputs might require custom handling if not fitting this pattern.