Skip to content

Repository files navigation

Logo of crewAI, two people rowing on a boat

⚠️ WARNING: This repository is deprecated. The updated and actively maintained version of CrewAI Tools can be found here: > https://github.com/crewAIInc/crewAI/tree/main/lib/crewai-tools

CrewAI Tools

Empower your CrewAI agents with powerful, customizable tools to elevate their capabilities and tackle sophisticated, real-world tasks.

CrewAI Tools provide the essential functionality to extend your agents, helping you rapidly enhance your automations with reliable, ready-to-use tools or custom-built solutions tailored precisely to your needs.


Quick Links

Homepage | Documentation | Examples | Community


Available Tools

CrewAI provides an extensive collection of powerful tools ready to enhance your agents:

  • File Management: FileReadTool, FileWriteTool
  • Web Scraping: ScrapeWebsiteTool, SeleniumScrapingTool
  • Database Integrations: PGSearchTool, MySQLSearchTool
  • Vector Database Integrations: MongoDBVectorSearchTool, QdrantVectorSearchTool, WeaviateVectorSearchTool
  • API Integrations: SerperApiTool, EXASearchTool
  • AI-powered Tools: DallETool, VisionTool, StagehandTool

And many more robust tools to simplify your agent integrations.


Creating Custom Tools

CrewAI offers two straightforward approaches to creating custom tools:

Subclassing BaseTool

Define your tool by subclassing:

fromcrewai.toolsimportBaseToolclassMyCustomTool(BaseTool):
name: str="Tool Name"description: str="Detailed description here."def_run(self, *args, **kwargs):
# Your tool logic here

Using the tool Decorator

Quickly create lightweight tools using decorators:

fromcrewaiimporttool@tool("Tool Name")defmy_custom_function(input):
# Tool logic herereturnoutput

CrewAI Tools and MCP

CrewAI Tools supports the Model Context Protocol (MCP). It gives you access to thousands of tools from the hundreds of MCP servers out there built by the community.

Before you start using MCP with CrewAI tools, you need to install the mcp extra dependencies:

pip install crewai-tools[mcp]
# or
uv add crewai-tools --extra mcp

To quickly get started with MCP in CrewAI you have 2 options:

Option 1: Fully managed connection

In this scenario we use a contextmanager (with statement) to start and stop the the connection with the MCP server. This is done in the background and you only get to interact with the CrewAI tools corresponding to the MCP server's tools.

For an STDIO based MCP server:

frommcpimportStdioServerParametersfromcrewai_toolsimportMCPServerAdapterserverparams=StdioServerParameters(
command="uvx",
args=["--quiet", "pubmedmcp@0.1.3"],
env={"UV_PYTHON": "3.12", **os.environ},
)
withMCPServerAdapter(serverparams) astools:
# tools is now a list of CrewAI Tools matching 1:1 with the MCP server's toolsagent=Agent(..., tools=tools)
task=Task(...)
crew=Crew(..., agents=[agent], tasks=[task])
crew.kickoff(...)

For an SSE based MCP server:

serverparams= {"url": "http://localhost:8000/sse"}
withMCPServerAdapter(serverparams) astools:
# tools is now a list of CrewAI Tools matching 1:1 with the MCP server's toolsagent=Agent(..., tools=tools)
task=Task(...)
crew=Crew(..., agents=[agent], tasks=[task])
crew.kickoff(...)

Option 2: More control over the MCP connection

If you need more control over the MCP connection, you can instanciate the MCPServerAdapter into an mcp_server_adapter object which can be used to manage the connection with the MCP server and access the available tools.

important: in this case you need to call mcp_server_adapter.stop() to make sure the connection is correctly stopped. We recommend that you use a try ... finally block run to make sure the .stop() is called even in case of errors.

Here is the same example for an STDIO MCP Server:

frommcpimportStdioServerParametersfromcrewai_toolsimportMCPServerAdapterserverparams=StdioServerParameters(
command="uvx",
args=["--quiet", "pubmedmcp@0.1.3"],
env={"UV_PYTHON": "3.12", **os.environ},
)
try:
mcp_server_adapter=MCPServerAdapter(serverparams)
tools=mcp_server_adapter.tools# tools is now a list of CrewAI Tools matching 1:1 with the MCP server's toolsagent=Agent(..., tools=tools)
task=Task(...)
crew=Crew(..., agents=[agent], tasks=[task])
crew.kickoff(...)
# ** important ** don't forget to stop the connectionfinally:
mcp_server_adapter.stop()

And finally the same thing but for an SSE MCP Server:

frommcpimportStdioServerParametersfromcrewai_toolsimportMCPServerAdapterserverparams= {"url": "http://localhost:8000/sse"}
try:
mcp_server_adapter=MCPServerAdapter(serverparams)
tools=mcp_server_adapter.tools# tools is now a list of CrewAI Tools matching 1:1 with the MCP server's toolsagent=Agent(..., tools=tools)
task=Task(...)
crew=Crew(..., agents=[agent], tasks=[task])
crew.kickoff(...)
# ** important ** don't forget to stop the connectionfinally:
mcp_server_adapter.stop()

Considerations & Limitations

Staying Safe with MCP

Always make sure that you trust the MCP Server before using it. Using an STDIO server will execute code on your machine. Using SSE is still not a silver bullet with many injection possible into your application from a malicious MCP server.

Limitations

  • At this time we only support tools from MCP Server not other type of primitives like prompts, resources...
  • We only return the first text output returned by the MCP Server tool using .content[0].text

Why Use CrewAI Tools?

  • Simplicity & Flexibility: Easy-to-use yet powerful enough for complex workflows.
  • Rapid Integration: Seamlessly incorporate external services, APIs, and databases.
  • Enterprise Ready: Built for stability, performance, and consistent results.

Contribution Guidelines

We welcome contributions from the community!

  1. Fork and clone the repository.
  2. Create a new branch (git checkout -b feature/my-feature).
  3. Commit your changes (git commit -m 'Add my feature').
  4. Push your branch (git push origin feature/my-feature).
  5. Open a pull request.

Developer Quickstart

pip install crewai[tools]

Development Setup

  • Install dependencies: uv sync
  • Run tests: uv run pytest
  • Run static type checking: uv run pyright
  • Set up pre-commit hooks: pre-commit install

Support and Community

Join our rapidly growing community and receive real-time support:

Build smarter, faster, and more powerful AI solutions—powered by CrewAI Tools.

About

Extend the capabilities of your CrewAI agents with Tools

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
 blocks
(function() {
function addCopyButtons() {
document.querySelectorAll('pre code').forEach(function(codeBlock) {
if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
codeBlock.parentElement.setAttribute('data-copy-added', 'true');
var btn = document.createElement('button');
btn.textContent = 'Copy';
btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';
btn.onmouseover = function() { this.style.opacity = '1'; };
btn.onmouseout = function() { this.style.opacity = '0.7'; };
btn.onclick = function() {
navigator.clipboard.writeText(codeBlock.textContent).then(function() {
btn.textContent = 'Copied!';
setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
});
};
codeBlock.parentElement.style.position = 'relative';
codeBlock.parentElement.appendChild(btn);
});
}
addCopyButtons();
// Re-run on dynamic content
var observer = new MutationObserver(addCopyButtons);
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
GitHub - AgentTanuki/crewAI-tools: Extend the capabilities of your CrewAI agents with Tools · GitHub
Skip to content

Repository files navigation

Logo of crewAI, two people rowing on a boat

⚠️ WARNING: This repository is deprecated. The updated and actively maintained version of CrewAI Tools can be found here: > https://github.com/crewAIInc/crewAI/tree/main/lib/crewai-tools

CrewAI Tools

Empower your CrewAI agents with powerful, customizable tools to elevate their capabilities and tackle sophisticated, real-world tasks.

CrewAI Tools provide the essential functionality to extend your agents, helping you rapidly enhance your automations with reliable, ready-to-use tools or custom-built solutions tailored precisely to your needs.


Quick Links

Homepage | Documentation | Examples | Community


Available Tools

CrewAI provides an extensive collection of powerful tools ready to enhance your agents:

  • File Management: FileReadTool, FileWriteTool
  • Web Scraping: ScrapeWebsiteTool, SeleniumScrapingTool
  • Database Integrations: PGSearchTool, MySQLSearchTool
  • Vector Database Integrations: MongoDBVectorSearchTool, QdrantVectorSearchTool, WeaviateVectorSearchTool
  • API Integrations: SerperApiTool, EXASearchTool
  • AI-powered Tools: DallETool, VisionTool, StagehandTool

And many more robust tools to simplify your agent integrations.


Creating Custom Tools

CrewAI offers two straightforward approaches to creating custom tools:

Subclassing BaseTool

Define your tool by subclassing:

fromcrewai.toolsimportBaseToolclassMyCustomTool(BaseTool):
name: str="Tool Name"description: str="Detailed description here."def_run(self, *args, **kwargs):
# Your tool logic here

Using the tool Decorator

Quickly create lightweight tools using decorators:

fromcrewaiimporttool@tool("Tool Name")defmy_custom_function(input):
# Tool logic herereturnoutput

CrewAI Tools and MCP

CrewAI Tools supports the Model Context Protocol (MCP). It gives you access to thousands of tools from the hundreds of MCP servers out there built by the community.

Before you start using MCP with CrewAI tools, you need to install the mcp extra dependencies:

pip install crewai-tools[mcp]
# or
uv add crewai-tools --extra mcp

To quickly get started with MCP in CrewAI you have 2 options:

Option 1: Fully managed connection

In this scenario we use a contextmanager (with statement) to start and stop the the connection with the MCP server. This is done in the background and you only get to interact with the CrewAI tools corresponding to the MCP server's tools.

For an STDIO based MCP server:

frommcpimportStdioServerParametersfromcrewai_toolsimportMCPServerAdapterserverparams=StdioServerParameters(
command="uvx",
args=["--quiet", "pubmedmcp@0.1.3"],
env={"UV_PYTHON": "3.12", **os.environ},
)
withMCPServerAdapter(serverparams) astools:
# tools is now a list of CrewAI Tools matching 1:1 with the MCP server's toolsagent=Agent(..., tools=tools)
task=Task(...)
crew=Crew(..., agents=[agent], tasks=[task])
crew.kickoff(...)

For an SSE based MCP server:

serverparams= {"url": "http://localhost:8000/sse"}
withMCPServerAdapter(serverparams) astools:
# tools is now a list of CrewAI Tools matching 1:1 with the MCP server's toolsagent=Agent(..., tools=tools)
task=Task(...)
crew=Crew(..., agents=[agent], tasks=[task])
crew.kickoff(...)

Option 2: More control over the MCP connection

If you need more control over the MCP connection, you can instanciate the MCPServerAdapter into an mcp_server_adapter object which can be used to manage the connection with the MCP server and access the available tools.

important: in this case you need to call mcp_server_adapter.stop() to make sure the connection is correctly stopped. We recommend that you use a try ... finally block run to make sure the .stop() is called even in case of errors.

Here is the same example for an STDIO MCP Server:

frommcpimportStdioServerParametersfromcrewai_toolsimportMCPServerAdapterserverparams=StdioServerParameters(
command="uvx",
args=["--quiet", "pubmedmcp@0.1.3"],
env={"UV_PYTHON": "3.12", **os.environ},
)
try:
mcp_server_adapter=MCPServerAdapter(serverparams)
tools=mcp_server_adapter.tools# tools is now a list of CrewAI Tools matching 1:1 with the MCP server's toolsagent=Agent(..., tools=tools)
task=Task(...)
crew=Crew(..., agents=[agent], tasks=[task])
crew.kickoff(...)
# ** important ** don't forget to stop the connectionfinally:
mcp_server_adapter.stop()

And finally the same thing but for an SSE MCP Server:

frommcpimportStdioServerParametersfromcrewai_toolsimportMCPServerAdapterserverparams= {"url": "http://localhost:8000/sse"}
try:
mcp_server_adapter=MCPServerAdapter(serverparams)
tools=mcp_server_adapter.tools# tools is now a list of CrewAI Tools matching 1:1 with the MCP server's toolsagent=Agent(..., tools=tools)
task=Task(...)
crew=Crew(..., agents=[agent], tasks=[task])
crew.kickoff(...)
# ** important ** don't forget to stop the connectionfinally:
mcp_server_adapter.stop()

Considerations & Limitations

Staying Safe with MCP

Always make sure that you trust the MCP Server before using it. Using an STDIO server will execute code on your machine. Using SSE is still not a silver bullet with many injection possible into your application from a malicious MCP server.

Limitations

  • At this time we only support tools from MCP Server not other type of primitives like prompts, resources...
  • We only return the first text output returned by the MCP Server tool using .content[0].text

Why Use CrewAI Tools?

  • Simplicity & Flexibility: Easy-to-use yet powerful enough for complex workflows.
  • Rapid Integration: Seamlessly incorporate external services, APIs, and databases.
  • Enterprise Ready: Built for stability, performance, and consistent results.

Contribution Guidelines

We welcome contributions from the community!

  1. Fork and clone the repository.
  2. Create a new branch (git checkout -b feature/my-feature).
  3. Commit your changes (git commit -m 'Add my feature').
  4. Push your branch (git push origin feature/my-feature).
  5. Open a pull request.

Developer Quickstart

pip install crewai[tools]

Development Setup

  • Install dependencies: uv sync
  • Run tests: uv run pytest
  • Run static type checking: uv run pyright
  • Set up pre-commit hooks: pre-commit install

Support and Community

Join our rapidly growing community and receive real-time support:

Build smarter, faster, and more powerful AI solutions—powered by CrewAI Tools.

About

Extend the capabilities of your CrewAI agents with Tools

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Force GitHub README to respect dark mode (function() { var style = document.createElement('style'); style.textContent = ' .markdown-body { color-scheme: dark light; } .markdown-body pre { background: #161b22 !important; } .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; } .markdown-body table th, .markdown-body table td { border-color: #30363d !important; } .markdown-body img { background: #0d1117; } .markdown-body blockquote { border-left-color: #8b949e; } .markdown-body hr { border-color: #30363d; } '; document.head.appendChild(style); })(); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - AgentTanuki/crewAI-tools: Extend the capabilities of your CrewAI agents with Tools · GitHub
Skip to content

Repository files navigation

Logo of crewAI, two people rowing on a boat

⚠️ WARNING: This repository is deprecated. The updated and actively maintained version of CrewAI Tools can be found here: > https://github.com/crewAIInc/crewAI/tree/main/lib/crewai-tools

CrewAI Tools

Empower your CrewAI agents with powerful, customizable tools to elevate their capabilities and tackle sophisticated, real-world tasks.

CrewAI Tools provide the essential functionality to extend your agents, helping you rapidly enhance your automations with reliable, ready-to-use tools or custom-built solutions tailored precisely to your needs.


Quick Links

Homepage | Documentation | Examples | Community


Available Tools

CrewAI provides an extensive collection of powerful tools ready to enhance your agents:

  • File Management: FileReadTool, FileWriteTool
  • Web Scraping: ScrapeWebsiteTool, SeleniumScrapingTool
  • Database Integrations: PGSearchTool, MySQLSearchTool
  • Vector Database Integrations: MongoDBVectorSearchTool, QdrantVectorSearchTool, WeaviateVectorSearchTool
  • API Integrations: SerperApiTool, EXASearchTool
  • AI-powered Tools: DallETool, VisionTool, StagehandTool

And many more robust tools to simplify your agent integrations.


Creating Custom Tools

CrewAI offers two straightforward approaches to creating custom tools:

Subclassing BaseTool

Define your tool by subclassing:

fromcrewai.toolsimportBaseToolclassMyCustomTool(BaseTool):
name: str="Tool Name"description: str="Detailed description here."def_run(self, *args, **kwargs):
# Your tool logic here

Using the tool Decorator

Quickly create lightweight tools using decorators:

fromcrewaiimporttool@tool("Tool Name")defmy_custom_function(input):
# Tool logic herereturnoutput

CrewAI Tools and MCP

CrewAI Tools supports the Model Context Protocol (MCP). It gives you access to thousands of tools from the hundreds of MCP servers out there built by the community.

Before you start using MCP with CrewAI tools, you need to install the mcp extra dependencies:

pip install crewai-tools[mcp]
# or
uv add crewai-tools --extra mcp

To quickly get started with MCP in CrewAI you have 2 options:

Option 1: Fully managed connection

In this scenario we use a contextmanager (with statement) to start and stop the the connection with the MCP server. This is done in the background and you only get to interact with the CrewAI tools corresponding to the MCP server's tools.

For an STDIO based MCP server:

frommcpimportStdioServerParametersfromcrewai_toolsimportMCPServerAdapterserverparams=StdioServerParameters(
command="uvx",
args=["--quiet", "pubmedmcp@0.1.3"],
env={"UV_PYTHON": "3.12", **os.environ},
)
withMCPServerAdapter(serverparams) astools:
# tools is now a list of CrewAI Tools matching 1:1 with the MCP server's toolsagent=Agent(..., tools=tools)
task=Task(...)
crew=Crew(..., agents=[agent], tasks=[task])
crew.kickoff(...)

For an SSE based MCP server:

serverparams= {"url": "http://localhost:8000/sse"}
withMCPServerAdapter(serverparams) astools:
# tools is now a list of CrewAI Tools matching 1:1 with the MCP server's toolsagent=Agent(..., tools=tools)
task=Task(...)
crew=Crew(..., agents=[agent], tasks=[task])
crew.kickoff(...)

Option 2: More control over the MCP connection

If you need more control over the MCP connection, you can instanciate the MCPServerAdapter into an mcp_server_adapter object which can be used to manage the connection with the MCP server and access the available tools.

important: in this case you need to call mcp_server_adapter.stop() to make sure the connection is correctly stopped. We recommend that you use a try ... finally block run to make sure the .stop() is called even in case of errors.

Here is the same example for an STDIO MCP Server:

frommcpimportStdioServerParametersfromcrewai_toolsimportMCPServerAdapterserverparams=StdioServerParameters(
command="uvx",
args=["--quiet", "pubmedmcp@0.1.3"],
env={"UV_PYTHON": "3.12", **os.environ},
)
try:
mcp_server_adapter=MCPServerAdapter(serverparams)
tools=mcp_server_adapter.tools# tools is now a list of CrewAI Tools matching 1:1 with the MCP server's toolsagent=Agent(..., tools=tools)
task=Task(...)
crew=Crew(..., agents=[agent], tasks=[task])
crew.kickoff(...)
# ** important ** don't forget to stop the connectionfinally:
mcp_server_adapter.stop()

And finally the same thing but for an SSE MCP Server:

frommcpimportStdioServerParametersfromcrewai_toolsimportMCPServerAdapterserverparams= {"url": "http://localhost:8000/sse"}
try:
mcp_server_adapter=MCPServerAdapter(serverparams)
tools=mcp_server_adapter.tools# tools is now a list of CrewAI Tools matching 1:1 with the MCP server's toolsagent=Agent(..., tools=tools)
task=Task(...)
crew=Crew(..., agents=[agent], tasks=[task])
crew.kickoff(...)
# ** important ** don't forget to stop the connectionfinally:
mcp_server_adapter.stop()

Considerations & Limitations

Staying Safe with MCP

Always make sure that you trust the MCP Server before using it. Using an STDIO server will execute code on your machine. Using SSE is still not a silver bullet with many injection possible into your application from a malicious MCP server.

Limitations

  • At this time we only support tools from MCP Server not other type of primitives like prompts, resources...
  • We only return the first text output returned by the MCP Server tool using .content[0].text

Why Use CrewAI Tools?

  • Simplicity & Flexibility: Easy-to-use yet powerful enough for complex workflows.
  • Rapid Integration: Seamlessly incorporate external services, APIs, and databases.
  • Enterprise Ready: Built for stability, performance, and consistent results.

Contribution Guidelines

We welcome contributions from the community!

  1. Fork and clone the repository.
  2. Create a new branch (git checkout -b feature/my-feature).
  3. Commit your changes (git commit -m 'Add my feature').
  4. Push your branch (git push origin feature/my-feature).
  5. Open a pull request.

Developer Quickstart

pip install crewai[tools]

Development Setup

  • Install dependencies: uv sync
  • Run tests: uv run pytest
  • Run static type checking: uv run pyright
  • Set up pre-commit hooks: pre-commit install

Support and Community

Join our rapidly growing community and receive real-time support:

Build smarter, faster, and more powerful AI solutions—powered by CrewAI Tools.

About

Extend the capabilities of your CrewAI agents with Tools

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Highlight search terms from Google/DuckDuckGo/Bing referrer (function() { var ref = document.referrer; var terms = []; if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) { var url = new URL(ref); var q = url.searchParams.get('q') || url.searchParams.get('p'); if (q) { terms = q.split(/\s+/).filter(function(t) { return t.length > 2; }); } } if (terms.length === 0) return; var style = document.createElement('style'); style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }'; document.head.appendChild(style); function highlight(node) { if (node.nodeType === 3) { // text node var text = node.textContent; var found = false; terms.forEach(function(term) { var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\]\\]/g, '\\') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - AgentTanuki/crewAI-tools: Extend the capabilities of your CrewAI agents with Tools · GitHub
Skip to content

Repository files navigation

Logo of crewAI, two people rowing on a boat

⚠️ WARNING: This repository is deprecated. The updated and actively maintained version of CrewAI Tools can be found here: > https://github.com/crewAIInc/crewAI/tree/main/lib/crewai-tools

CrewAI Tools

Empower your CrewAI agents with powerful, customizable tools to elevate their capabilities and tackle sophisticated, real-world tasks.

CrewAI Tools provide the essential functionality to extend your agents, helping you rapidly enhance your automations with reliable, ready-to-use tools or custom-built solutions tailored precisely to your needs.


Quick Links

Homepage | Documentation | Examples | Community


Available Tools

CrewAI provides an extensive collection of powerful tools ready to enhance your agents:

  • File Management: FileReadTool, FileWriteTool
  • Web Scraping: ScrapeWebsiteTool, SeleniumScrapingTool
  • Database Integrations: PGSearchTool, MySQLSearchTool
  • Vector Database Integrations: MongoDBVectorSearchTool, QdrantVectorSearchTool, WeaviateVectorSearchTool
  • API Integrations: SerperApiTool, EXASearchTool
  • AI-powered Tools: DallETool, VisionTool, StagehandTool

And many more robust tools to simplify your agent integrations.


Creating Custom Tools

CrewAI offers two straightforward approaches to creating custom tools:

Subclassing BaseTool

Define your tool by subclassing:

fromcrewai.toolsimportBaseToolclassMyCustomTool(BaseTool):
name: str="Tool Name"description: str="Detailed description here."def_run(self, *args, **kwargs):
# Your tool logic here

Using the tool Decorator

Quickly create lightweight tools using decorators:

fromcrewaiimporttool@tool("Tool Name")defmy_custom_function(input):
# Tool logic herereturnoutput

CrewAI Tools and MCP

CrewAI Tools supports the Model Context Protocol (MCP). It gives you access to thousands of tools from the hundreds of MCP servers out there built by the community.

Before you start using MCP with CrewAI tools, you need to install the mcp extra dependencies:

pip install crewai-tools[mcp]
# or
uv add crewai-tools --extra mcp

To quickly get started with MCP in CrewAI you have 2 options:

Option 1: Fully managed connection

In this scenario we use a contextmanager (with statement) to start and stop the the connection with the MCP server. This is done in the background and you only get to interact with the CrewAI tools corresponding to the MCP server's tools.

For an STDIO based MCP server:

frommcpimportStdioServerParametersfromcrewai_toolsimportMCPServerAdapterserverparams=StdioServerParameters(
command="uvx",
args=["--quiet", "pubmedmcp@0.1.3"],
env={"UV_PYTHON": "3.12", **os.environ},
)
withMCPServerAdapter(serverparams) astools:
# tools is now a list of CrewAI Tools matching 1:1 with the MCP server's toolsagent=Agent(..., tools=tools)
task=Task(...)
crew=Crew(..., agents=[agent], tasks=[task])
crew.kickoff(...)

For an SSE based MCP server:

serverparams= {"url": "http://localhost:8000/sse"}
withMCPServerAdapter(serverparams) astools:
# tools is now a list of CrewAI Tools matching 1:1 with the MCP server's toolsagent=Agent(..., tools=tools)
task=Task(...)
crew=Crew(..., agents=[agent], tasks=[task])
crew.kickoff(...)

Option 2: More control over the MCP connection

If you need more control over the MCP connection, you can instanciate the MCPServerAdapter into an mcp_server_adapter object which can be used to manage the connection with the MCP server and access the available tools.

important: in this case you need to call mcp_server_adapter.stop() to make sure the connection is correctly stopped. We recommend that you use a try ... finally block run to make sure the .stop() is called even in case of errors.

Here is the same example for an STDIO MCP Server:

frommcpimportStdioServerParametersfromcrewai_toolsimportMCPServerAdapterserverparams=StdioServerParameters(
command="uvx",
args=["--quiet", "pubmedmcp@0.1.3"],
env={"UV_PYTHON": "3.12", **os.environ},
)
try:
mcp_server_adapter=MCPServerAdapter(serverparams)
tools=mcp_server_adapter.tools# tools is now a list of CrewAI Tools matching 1:1 with the MCP server's toolsagent=Agent(..., tools=tools)
task=Task(...)
crew=Crew(..., agents=[agent], tasks=[task])
crew.kickoff(...)
# ** important ** don't forget to stop the connectionfinally:
mcp_server_adapter.stop()

And finally the same thing but for an SSE MCP Server:

frommcpimportStdioServerParametersfromcrewai_toolsimportMCPServerAdapterserverparams= {"url": "http://localhost:8000/sse"}
try:
mcp_server_adapter=MCPServerAdapter(serverparams)
tools=mcp_server_adapter.tools# tools is now a list of CrewAI Tools matching 1:1 with the MCP server's toolsagent=Agent(..., tools=tools)
task=Task(...)
crew=Crew(..., agents=[agent], tasks=[task])
crew.kickoff(...)
# ** important ** don't forget to stop the connectionfinally:
mcp_server_adapter.stop()

Considerations & Limitations

Staying Safe with MCP

Always make sure that you trust the MCP Server before using it. Using an STDIO server will execute code on your machine. Using SSE is still not a silver bullet with many injection possible into your application from a malicious MCP server.

Limitations

  • At this time we only support tools from MCP Server not other type of primitives like prompts, resources...
  • We only return the first text output returned by the MCP Server tool using .content[0].text

Why Use CrewAI Tools?

  • Simplicity & Flexibility: Easy-to-use yet powerful enough for complex workflows.
  • Rapid Integration: Seamlessly incorporate external services, APIs, and databases.
  • Enterprise Ready: Built for stability, performance, and consistent results.

Contribution Guidelines

We welcome contributions from the community!

  1. Fork and clone the repository.
  2. Create a new branch (git checkout -b feature/my-feature).
  3. Commit your changes (git commit -m 'Add my feature').
  4. Push your branch (git push origin feature/my-feature).
  5. Open a pull request.

Developer Quickstart

pip install crewai[tools]

Development Setup

  • Install dependencies: uv sync
  • Run tests: uv run pytest
  • Run static type checking: uv run pyright
  • Set up pre-commit hooks: pre-commit install

Support and Community

Join our rapidly growing community and receive real-time support:

Build smarter, faster, and more powerful AI solutions—powered by CrewAI Tools.

About

Extend the capabilities of your CrewAI agents with Tools

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + ' GitHub - AgentTanuki/crewAI-tools: Extend the capabilities of your CrewAI agents with Tools · GitHub
Skip to content

Repository files navigation

Logo of crewAI, two people rowing on a boat

⚠️ WARNING: This repository is deprecated. The updated and actively maintained version of CrewAI Tools can be found here: > https://github.com/crewAIInc/crewAI/tree/main/lib/crewai-tools

CrewAI Tools

Empower your CrewAI agents with powerful, customizable tools to elevate their capabilities and tackle sophisticated, real-world tasks.

CrewAI Tools provide the essential functionality to extend your agents, helping you rapidly enhance your automations with reliable, ready-to-use tools or custom-built solutions tailored precisely to your needs.


Quick Links

Homepage | Documentation | Examples | Community


Available Tools

CrewAI provides an extensive collection of powerful tools ready to enhance your agents:

  • File Management: FileReadTool, FileWriteTool
  • Web Scraping: ScrapeWebsiteTool, SeleniumScrapingTool
  • Database Integrations: PGSearchTool, MySQLSearchTool
  • Vector Database Integrations: MongoDBVectorSearchTool, QdrantVectorSearchTool, WeaviateVectorSearchTool
  • API Integrations: SerperApiTool, EXASearchTool
  • AI-powered Tools: DallETool, VisionTool, StagehandTool

And many more robust tools to simplify your agent integrations.


Creating Custom Tools

CrewAI offers two straightforward approaches to creating custom tools:

Subclassing BaseTool

Define your tool by subclassing:

fromcrewai.toolsimportBaseToolclassMyCustomTool(BaseTool):
name: str="Tool Name"description: str="Detailed description here."def_run(self, *args, **kwargs):
# Your tool logic here

Using the tool Decorator

Quickly create lightweight tools using decorators:

fromcrewaiimporttool@tool("Tool Name")defmy_custom_function(input):
# Tool logic herereturnoutput

CrewAI Tools and MCP

CrewAI Tools supports the Model Context Protocol (MCP). It gives you access to thousands of tools from the hundreds of MCP servers out there built by the community.

Before you start using MCP with CrewAI tools, you need to install the mcp extra dependencies:

pip install crewai-tools[mcp]
# or
uv add crewai-tools --extra mcp

To quickly get started with MCP in CrewAI you have 2 options:

Option 1: Fully managed connection

In this scenario we use a contextmanager (with statement) to start and stop the the connection with the MCP server. This is done in the background and you only get to interact with the CrewAI tools corresponding to the MCP server's tools.

For an STDIO based MCP server:

frommcpimportStdioServerParametersfromcrewai_toolsimportMCPServerAdapterserverparams=StdioServerParameters(
command="uvx",
args=["--quiet", "pubmedmcp@0.1.3"],
env={"UV_PYTHON": "3.12", **os.environ},
)
withMCPServerAdapter(serverparams) astools:
# tools is now a list of CrewAI Tools matching 1:1 with the MCP server's toolsagent=Agent(..., tools=tools)
task=Task(...)
crew=Crew(..., agents=[agent], tasks=[task])
crew.kickoff(...)

For an SSE based MCP server:

serverparams= {"url": "http://localhost:8000/sse"}
withMCPServerAdapter(serverparams) astools:
# tools is now a list of CrewAI Tools matching 1:1 with the MCP server's toolsagent=Agent(..., tools=tools)
task=Task(...)
crew=Crew(..., agents=[agent], tasks=[task])
crew.kickoff(...)

Option 2: More control over the MCP connection

If you need more control over the MCP connection, you can instanciate the MCPServerAdapter into an mcp_server_adapter object which can be used to manage the connection with the MCP server and access the available tools.

important: in this case you need to call mcp_server_adapter.stop() to make sure the connection is correctly stopped. We recommend that you use a try ... finally block run to make sure the .stop() is called even in case of errors.

Here is the same example for an STDIO MCP Server:

frommcpimportStdioServerParametersfromcrewai_toolsimportMCPServerAdapterserverparams=StdioServerParameters(
command="uvx",
args=["--quiet", "pubmedmcp@0.1.3"],
env={"UV_PYTHON": "3.12", **os.environ},
)
try:
mcp_server_adapter=MCPServerAdapter(serverparams)
tools=mcp_server_adapter.tools# tools is now a list of CrewAI Tools matching 1:1 with the MCP server's toolsagent=Agent(..., tools=tools)
task=Task(...)
crew=Crew(..., agents=[agent], tasks=[task])
crew.kickoff(...)
# ** important ** don't forget to stop the connectionfinally:
mcp_server_adapter.stop()

And finally the same thing but for an SSE MCP Server:

frommcpimportStdioServerParametersfromcrewai_toolsimportMCPServerAdapterserverparams= {"url": "http://localhost:8000/sse"}
try:
mcp_server_adapter=MCPServerAdapter(serverparams)
tools=mcp_server_adapter.tools# tools is now a list of CrewAI Tools matching 1:1 with the MCP server's toolsagent=Agent(..., tools=tools)
task=Task(...)
crew=Crew(..., agents=[agent], tasks=[task])
crew.kickoff(...)
# ** important ** don't forget to stop the connectionfinally:
mcp_server_adapter.stop()

Considerations & Limitations

Staying Safe with MCP

Always make sure that you trust the MCP Server before using it. Using an STDIO server will execute code on your machine. Using SSE is still not a silver bullet with many injection possible into your application from a malicious MCP server.

Limitations

  • At this time we only support tools from MCP Server not other type of primitives like prompts, resources...
  • We only return the first text output returned by the MCP Server tool using .content[0].text

Why Use CrewAI Tools?

  • Simplicity & Flexibility: Easy-to-use yet powerful enough for complex workflows.
  • Rapid Integration: Seamlessly incorporate external services, APIs, and databases.
  • Enterprise Ready: Built for stability, performance, and consistent results.

Contribution Guidelines

We welcome contributions from the community!

  1. Fork and clone the repository.
  2. Create a new branch (git checkout -b feature/my-feature).
  3. Commit your changes (git commit -m 'Add my feature').
  4. Push your branch (git push origin feature/my-feature).
  5. Open a pull request.

Developer Quickstart

pip install crewai[tools]

Development Setup

  • Install dependencies: uv sync
  • Run tests: uv run pytest
  • Run static type checking: uv run pyright
  • Set up pre-commit hooks: pre-commit install

Support and Community

Join our rapidly growing community and receive real-time support:

Build smarter, faster, and more powerful AI solutions—powered by CrewAI Tools.

About

Extend the capabilities of your CrewAI agents with Tools

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - AgentTanuki/crewAI-tools: Extend the capabilities of your CrewAI agents with Tools · GitHub
Skip to content

Repository files navigation

Logo of crewAI, two people rowing on a boat

⚠️ WARNING: This repository is deprecated. The updated and actively maintained version of CrewAI Tools can be found here: > https://github.com/crewAIInc/crewAI/tree/main/lib/crewai-tools

CrewAI Tools

Empower your CrewAI agents with powerful, customizable tools to elevate their capabilities and tackle sophisticated, real-world tasks.

CrewAI Tools provide the essential functionality to extend your agents, helping you rapidly enhance your automations with reliable, ready-to-use tools or custom-built solutions tailored precisely to your needs.


Quick Links

Homepage | Documentation | Examples | Community


Available Tools

CrewAI provides an extensive collection of powerful tools ready to enhance your agents:

  • File Management: FileReadTool, FileWriteTool
  • Web Scraping: ScrapeWebsiteTool, SeleniumScrapingTool
  • Database Integrations: PGSearchTool, MySQLSearchTool
  • Vector Database Integrations: MongoDBVectorSearchTool, QdrantVectorSearchTool, WeaviateVectorSearchTool
  • API Integrations: SerperApiTool, EXASearchTool
  • AI-powered Tools: DallETool, VisionTool, StagehandTool

And many more robust tools to simplify your agent integrations.


Creating Custom Tools

CrewAI offers two straightforward approaches to creating custom tools:

Subclassing BaseTool

Define your tool by subclassing:

fromcrewai.toolsimportBaseToolclassMyCustomTool(BaseTool):
name: str="Tool Name"description: str="Detailed description here."def_run(self, *args, **kwargs):
# Your tool logic here

Using the tool Decorator

Quickly create lightweight tools using decorators:

fromcrewaiimporttool@tool("Tool Name")defmy_custom_function(input):
# Tool logic herereturnoutput

CrewAI Tools and MCP

CrewAI Tools supports the Model Context Protocol (MCP). It gives you access to thousands of tools from the hundreds of MCP servers out there built by the community.

Before you start using MCP with CrewAI tools, you need to install the mcp extra dependencies:

pip install crewai-tools[mcp]
# or
uv add crewai-tools --extra mcp

To quickly get started with MCP in CrewAI you have 2 options:

Option 1: Fully managed connection

In this scenario we use a contextmanager (with statement) to start and stop the the connection with the MCP server. This is done in the background and you only get to interact with the CrewAI tools corresponding to the MCP server's tools.

For an STDIO based MCP server:

frommcpimportStdioServerParametersfromcrewai_toolsimportMCPServerAdapterserverparams=StdioServerParameters(
command="uvx",
args=["--quiet", "pubmedmcp@0.1.3"],
env={"UV_PYTHON": "3.12", **os.environ},
)
withMCPServerAdapter(serverparams) astools:
# tools is now a list of CrewAI Tools matching 1:1 with the MCP server's toolsagent=Agent(..., tools=tools)
task=Task(...)
crew=Crew(..., agents=[agent], tasks=[task])
crew.kickoff(...)

For an SSE based MCP server:

serverparams= {"url": "http://localhost:8000/sse"}
withMCPServerAdapter(serverparams) astools:
# tools is now a list of CrewAI Tools matching 1:1 with the MCP server's toolsagent=Agent(..., tools=tools)
task=Task(...)
crew=Crew(..., agents=[agent], tasks=[task])
crew.kickoff(...)

Option 2: More control over the MCP connection

If you need more control over the MCP connection, you can instanciate the MCPServerAdapter into an mcp_server_adapter object which can be used to manage the connection with the MCP server and access the available tools.

important: in this case you need to call mcp_server_adapter.stop() to make sure the connection is correctly stopped. We recommend that you use a try ... finally block run to make sure the .stop() is called even in case of errors.

Here is the same example for an STDIO MCP Server:

frommcpimportStdioServerParametersfromcrewai_toolsimportMCPServerAdapterserverparams=StdioServerParameters(
command="uvx",
args=["--quiet", "pubmedmcp@0.1.3"],
env={"UV_PYTHON": "3.12", **os.environ},
)
try:
mcp_server_adapter=MCPServerAdapter(serverparams)
tools=mcp_server_adapter.tools# tools is now a list of CrewAI Tools matching 1:1 with the MCP server's toolsagent=Agent(..., tools=tools)
task=Task(...)
crew=Crew(..., agents=[agent], tasks=[task])
crew.kickoff(...)
# ** important ** don't forget to stop the connectionfinally:
mcp_server_adapter.stop()

And finally the same thing but for an SSE MCP Server:

frommcpimportStdioServerParametersfromcrewai_toolsimportMCPServerAdapterserverparams= {"url": "http://localhost:8000/sse"}
try:
mcp_server_adapter=MCPServerAdapter(serverparams)
tools=mcp_server_adapter.tools# tools is now a list of CrewAI Tools matching 1:1 with the MCP server's toolsagent=Agent(..., tools=tools)
task=Task(...)
crew=Crew(..., agents=[agent], tasks=[task])
crew.kickoff(...)
# ** important ** don't forget to stop the connectionfinally:
mcp_server_adapter.stop()

Considerations & Limitations

Staying Safe with MCP

Always make sure that you trust the MCP Server before using it. Using an STDIO server will execute code on your machine. Using SSE is still not a silver bullet with many injection possible into your application from a malicious MCP server.

Limitations

  • At this time we only support tools from MCP Server not other type of primitives like prompts, resources...
  • We only return the first text output returned by the MCP Server tool using .content[0].text

Why Use CrewAI Tools?

  • Simplicity & Flexibility: Easy-to-use yet powerful enough for complex workflows.
  • Rapid Integration: Seamlessly incorporate external services, APIs, and databases.
  • Enterprise Ready: Built for stability, performance, and consistent results.

Contribution Guidelines

We welcome contributions from the community!

  1. Fork and clone the repository.
  2. Create a new branch (git checkout -b feature/my-feature).
  3. Commit your changes (git commit -m 'Add my feature').
  4. Push your branch (git push origin feature/my-feature).
  5. Open a pull request.

Developer Quickstart

pip install crewai[tools]

Development Setup

  • Install dependencies: uv sync
  • Run tests: uv run pytest
  • Run static type checking: uv run pyright
  • Set up pre-commit hooks: pre-commit install

Support and Community

Join our rapidly growing community and receive real-time support:

Build smarter, faster, and more powerful AI solutions—powered by CrewAI Tools.

About

Extend the capabilities of your CrewAI agents with Tools

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - AgentTanuki/crewAI-tools: Extend the capabilities of your CrewAI agents with Tools · GitHub
Skip to content

Repository files navigation

Logo of crewAI, two people rowing on a boat

⚠️ WARNING: This repository is deprecated. The updated and actively maintained version of CrewAI Tools can be found here: > https://github.com/crewAIInc/crewAI/tree/main/lib/crewai-tools

CrewAI Tools

Empower your CrewAI agents with powerful, customizable tools to elevate their capabilities and tackle sophisticated, real-world tasks.

CrewAI Tools provide the essential functionality to extend your agents, helping you rapidly enhance your automations with reliable, ready-to-use tools or custom-built solutions tailored precisely to your needs.


Quick Links

Homepage | Documentation | Examples | Community


Available Tools

CrewAI provides an extensive collection of powerful tools ready to enhance your agents:

  • File Management: FileReadTool, FileWriteTool
  • Web Scraping: ScrapeWebsiteTool, SeleniumScrapingTool
  • Database Integrations: PGSearchTool, MySQLSearchTool
  • Vector Database Integrations: MongoDBVectorSearchTool, QdrantVectorSearchTool, WeaviateVectorSearchTool
  • API Integrations: SerperApiTool, EXASearchTool
  • AI-powered Tools: DallETool, VisionTool, StagehandTool

And many more robust tools to simplify your agent integrations.


Creating Custom Tools

CrewAI offers two straightforward approaches to creating custom tools:

Subclassing BaseTool

Define your tool by subclassing:

fromcrewai.toolsimportBaseToolclassMyCustomTool(BaseTool):
name: str="Tool Name"description: str="Detailed description here."def_run(self, *args, **kwargs):
# Your tool logic here

Using the tool Decorator

Quickly create lightweight tools using decorators:

fromcrewaiimporttool@tool("Tool Name")defmy_custom_function(input):
# Tool logic herereturnoutput

CrewAI Tools and MCP

CrewAI Tools supports the Model Context Protocol (MCP). It gives you access to thousands of tools from the hundreds of MCP servers out there built by the community.

Before you start using MCP with CrewAI tools, you need to install the mcp extra dependencies:

pip install crewai-tools[mcp]
# or
uv add crewai-tools --extra mcp

To quickly get started with MCP in CrewAI you have 2 options:

Option 1: Fully managed connection

In this scenario we use a contextmanager (with statement) to start and stop the the connection with the MCP server. This is done in the background and you only get to interact with the CrewAI tools corresponding to the MCP server's tools.

For an STDIO based MCP server:

frommcpimportStdioServerParametersfromcrewai_toolsimportMCPServerAdapterserverparams=StdioServerParameters(
command="uvx",
args=["--quiet", "pubmedmcp@0.1.3"],
env={"UV_PYTHON": "3.12", **os.environ},
)
withMCPServerAdapter(serverparams) astools:
# tools is now a list of CrewAI Tools matching 1:1 with the MCP server's toolsagent=Agent(..., tools=tools)
task=Task(...)
crew=Crew(..., agents=[agent], tasks=[task])
crew.kickoff(...)

For an SSE based MCP server:

serverparams= {"url": "http://localhost:8000/sse"}
withMCPServerAdapter(serverparams) astools:
# tools is now a list of CrewAI Tools matching 1:1 with the MCP server's toolsagent=Agent(..., tools=tools)
task=Task(...)
crew=Crew(..., agents=[agent], tasks=[task])
crew.kickoff(...)

Option 2: More control over the MCP connection

If you need more control over the MCP connection, you can instanciate the MCPServerAdapter into an mcp_server_adapter object which can be used to manage the connection with the MCP server and access the available tools.

important: in this case you need to call mcp_server_adapter.stop() to make sure the connection is correctly stopped. We recommend that you use a try ... finally block run to make sure the .stop() is called even in case of errors.

Here is the same example for an STDIO MCP Server:

frommcpimportStdioServerParametersfromcrewai_toolsimportMCPServerAdapterserverparams=StdioServerParameters(
command="uvx",
args=["--quiet", "pubmedmcp@0.1.3"],
env={"UV_PYTHON": "3.12", **os.environ},
)
try:
mcp_server_adapter=MCPServerAdapter(serverparams)
tools=mcp_server_adapter.tools# tools is now a list of CrewAI Tools matching 1:1 with the MCP server's toolsagent=Agent(..., tools=tools)
task=Task(...)
crew=Crew(..., agents=[agent], tasks=[task])
crew.kickoff(...)
# ** important ** don't forget to stop the connectionfinally:
mcp_server_adapter.stop()

And finally the same thing but for an SSE MCP Server:

frommcpimportStdioServerParametersfromcrewai_toolsimportMCPServerAdapterserverparams= {"url": "http://localhost:8000/sse"}
try:
mcp_server_adapter=MCPServerAdapter(serverparams)
tools=mcp_server_adapter.tools# tools is now a list of CrewAI Tools matching 1:1 with the MCP server's toolsagent=Agent(..., tools=tools)
task=Task(...)
crew=Crew(..., agents=[agent], tasks=[task])
crew.kickoff(...)
# ** important ** don't forget to stop the connectionfinally:
mcp_server_adapter.stop()

Considerations & Limitations

Staying Safe with MCP

Always make sure that you trust the MCP Server before using it. Using an STDIO server will execute code on your machine. Using SSE is still not a silver bullet with many injection possible into your application from a malicious MCP server.

Limitations

  • At this time we only support tools from MCP Server not other type of primitives like prompts, resources...
  • We only return the first text output returned by the MCP Server tool using .content[0].text

Why Use CrewAI Tools?

  • Simplicity & Flexibility: Easy-to-use yet powerful enough for complex workflows.
  • Rapid Integration: Seamlessly incorporate external services, APIs, and databases.
  • Enterprise Ready: Built for stability, performance, and consistent results.

Contribution Guidelines

We welcome contributions from the community!

  1. Fork and clone the repository.
  2. Create a new branch (git checkout -b feature/my-feature).
  3. Commit your changes (git commit -m 'Add my feature').
  4. Push your branch (git push origin feature/my-feature).
  5. Open a pull request.

Developer Quickstart

pip install crewai[tools]

Development Setup

  • Install dependencies: uv sync
  • Run tests: uv run pytest
  • Run static type checking: uv run pyright
  • Set up pre-commit hooks: pre-commit install

Support and Community

Join our rapidly growing community and receive real-time support:

Build smarter, faster, and more powerful AI solutions—powered by CrewAI Tools.

About

Extend the capabilities of your CrewAI agents with Tools

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Universal Dark Mode - works on any site (function() { var enabled = true; function applyDarkMode() { if (!enabled) return; // Create style element if it doesn't exist var style = document.getElementById('universal-dark-mode-style'); if (!style) { style = document.createElement('style'); style.id = 'universal-dark-mode-style'; document.head.appendChild(style); } // Dark mode CSS - inverts colors but preserves images/video style.textContent = ' /* Invert everything except media */ html { filter: invert(1) hue-rotate(180deg) !important; background: #1a1a2e !important; } /* Restore images, videos, iframes, canvas */ img, video, iframe, canvas, svg, picture, [style*="background-image"] { filter: invert(1) hue-rotate(180deg) !important; } /* Preserve specific elements that should not be inverted */ .no-dark-mode, .no-dark-mode *, [data-theme="light"], [data-theme="light"], .ace_editor, .ace_editor *, .CodeMirror, .CodeMirror *, .monaco-editor, .monaco-editor *, .markdown-body pre, .markdown-body pre *, .highlight, .highlight *, pre code, pre code * { filter: none !important; } /* Fix common UI elements */ .modal, .popup, .dropdown-menu, .tooltip, .popover { filter: invert(1) hue-rotate(180deg) !important; background: #2d2d44 !important; border-color: #444 !important; } /* Scrollbars */ ::-webkit-scrollbar { background: #1a1a2e !important; } ::-webkit-scrollbar-thumb { background: #444 !important; } ::-webkit-scrollbar-thumb:hover { background: #555 !important; } /* Selection */ ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; } ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; } '; } function removeDarkMode() { var style = document.getElementById('universal-dark-mode-style'); if (style) style.remove(); } // Toggle with Alt+Shift+D document.addEventListener('keydown', function(e) { if (e.altKey && e.shiftKey && e.key === 'D') { e.preventDefault(); enabled = !enabled; if (enabled) { applyDarkMode(); console.log('[Universal Dark Mode] Enabled'); } else { removeDarkMode(); console.log('[Universal Dark Mode] Disabled'); } } }); // Apply on load applyDarkMode(); // Re-apply on dynamic content var observer = new MutationObserver(function(mutations) { if (enabled && !document.getElementById('universal-dark-mode-style')) { applyDarkMode(); } }); observer.observe(document.head, { childList: true }); console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle'); })(); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })(); GitHub - AgentTanuki/crewAI-tools: Extend the capabilities of your CrewAI agents with Tools · GitHub
Skip to content

Repository files navigation

Logo of crewAI, two people rowing on a boat

⚠️ WARNING: This repository is deprecated. The updated and actively maintained version of CrewAI Tools can be found here: > https://github.com/crewAIInc/crewAI/tree/main/lib/crewai-tools

CrewAI Tools

Empower your CrewAI agents with powerful, customizable tools to elevate their capabilities and tackle sophisticated, real-world tasks.

CrewAI Tools provide the essential functionality to extend your agents, helping you rapidly enhance your automations with reliable, ready-to-use tools or custom-built solutions tailored precisely to your needs.


Quick Links

Homepage | Documentation | Examples | Community


Available Tools

CrewAI provides an extensive collection of powerful tools ready to enhance your agents:

  • File Management: FileReadTool, FileWriteTool
  • Web Scraping: ScrapeWebsiteTool, SeleniumScrapingTool
  • Database Integrations: PGSearchTool, MySQLSearchTool
  • Vector Database Integrations: MongoDBVectorSearchTool, QdrantVectorSearchTool, WeaviateVectorSearchTool
  • API Integrations: SerperApiTool, EXASearchTool
  • AI-powered Tools: DallETool, VisionTool, StagehandTool

And many more robust tools to simplify your agent integrations.


Creating Custom Tools

CrewAI offers two straightforward approaches to creating custom tools:

Subclassing BaseTool

Define your tool by subclassing:

fromcrewai.toolsimportBaseToolclassMyCustomTool(BaseTool):
name: str="Tool Name"description: str="Detailed description here."def_run(self, *args, **kwargs):
# Your tool logic here

Using the tool Decorator

Quickly create lightweight tools using decorators:

fromcrewaiimporttool@tool("Tool Name")defmy_custom_function(input):
# Tool logic herereturnoutput

CrewAI Tools and MCP

CrewAI Tools supports the Model Context Protocol (MCP). It gives you access to thousands of tools from the hundreds of MCP servers out there built by the community.

Before you start using MCP with CrewAI tools, you need to install the mcp extra dependencies:

pip install crewai-tools[mcp]
# or
uv add crewai-tools --extra mcp

To quickly get started with MCP in CrewAI you have 2 options:

Option 1: Fully managed connection

In this scenario we use a contextmanager (with statement) to start and stop the the connection with the MCP server. This is done in the background and you only get to interact with the CrewAI tools corresponding to the MCP server's tools.

For an STDIO based MCP server:

frommcpimportStdioServerParametersfromcrewai_toolsimportMCPServerAdapterserverparams=StdioServerParameters(
command="uvx",
args=["--quiet", "pubmedmcp@0.1.3"],
env={"UV_PYTHON": "3.12", **os.environ},
)
withMCPServerAdapter(serverparams) astools:
# tools is now a list of CrewAI Tools matching 1:1 with the MCP server's toolsagent=Agent(..., tools=tools)
task=Task(...)
crew=Crew(..., agents=[agent], tasks=[task])
crew.kickoff(...)

For an SSE based MCP server:

serverparams= {"url": "http://localhost:8000/sse"}
withMCPServerAdapter(serverparams) astools:
# tools is now a list of CrewAI Tools matching 1:1 with the MCP server's toolsagent=Agent(..., tools=tools)
task=Task(...)
crew=Crew(..., agents=[agent], tasks=[task])
crew.kickoff(...)

Option 2: More control over the MCP connection

If you need more control over the MCP connection, you can instanciate the MCPServerAdapter into an mcp_server_adapter object which can be used to manage the connection with the MCP server and access the available tools.

important: in this case you need to call mcp_server_adapter.stop() to make sure the connection is correctly stopped. We recommend that you use a try ... finally block run to make sure the .stop() is called even in case of errors.

Here is the same example for an STDIO MCP Server:

frommcpimportStdioServerParametersfromcrewai_toolsimportMCPServerAdapterserverparams=StdioServerParameters(
command="uvx",
args=["--quiet", "pubmedmcp@0.1.3"],
env={"UV_PYTHON": "3.12", **os.environ},
)
try:
mcp_server_adapter=MCPServerAdapter(serverparams)
tools=mcp_server_adapter.tools# tools is now a list of CrewAI Tools matching 1:1 with the MCP server's toolsagent=Agent(..., tools=tools)
task=Task(...)
crew=Crew(..., agents=[agent], tasks=[task])
crew.kickoff(...)
# ** important ** don't forget to stop the connectionfinally:
mcp_server_adapter.stop()

And finally the same thing but for an SSE MCP Server:

frommcpimportStdioServerParametersfromcrewai_toolsimportMCPServerAdapterserverparams= {"url": "http://localhost:8000/sse"}
try:
mcp_server_adapter=MCPServerAdapter(serverparams)
tools=mcp_server_adapter.tools# tools is now a list of CrewAI Tools matching 1:1 with the MCP server's toolsagent=Agent(..., tools=tools)
task=Task(...)
crew=Crew(..., agents=[agent], tasks=[task])
crew.kickoff(...)
# ** important ** don't forget to stop the connectionfinally:
mcp_server_adapter.stop()

Considerations & Limitations

Staying Safe with MCP

Always make sure that you trust the MCP Server before using it. Using an STDIO server will execute code on your machine. Using SSE is still not a silver bullet with many injection possible into your application from a malicious MCP server.

Limitations

  • At this time we only support tools from MCP Server not other type of primitives like prompts, resources...
  • We only return the first text output returned by the MCP Server tool using .content[0].text

Why Use CrewAI Tools?

  • Simplicity & Flexibility: Easy-to-use yet powerful enough for complex workflows.
  • Rapid Integration: Seamlessly incorporate external services, APIs, and databases.
  • Enterprise Ready: Built for stability, performance, and consistent results.

Contribution Guidelines

We welcome contributions from the community!

  1. Fork and clone the repository.
  2. Create a new branch (git checkout -b feature/my-feature).
  3. Commit your changes (git commit -m 'Add my feature').
  4. Push your branch (git push origin feature/my-feature).
  5. Open a pull request.

Developer Quickstart

pip install crewai[tools]

Development Setup

  • Install dependencies: uv sync
  • Run tests: uv run pytest
  • Run static type checking: uv run pyright
  • Set up pre-commit hooks: pre-commit install

Support and Community

Join our rapidly growing community and receive real-time support:

Build smarter, faster, and more powerful AI solutions—powered by CrewAI Tools.

About

Extend the capabilities of your CrewAI agents with Tools

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages