tools
Install the tools package:
$ npx -y skills add OpenLAIR/dr-claw --agent claude-codeHow it fires
How this agent gets triggered: by you, by Claude, or both.
- Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
- You can call itInvoke it directly when you want it.
Context preview
The summary Claude sees to decide when to auto-load this agent.
Install the tools package:
Agent definition
tools.mdCrewAI Tools Guide
Built-in Tools
Install the tools package:
pip install 'crewai[tools]'
Search Tools
from crewai_tools import (
SerperDevTool, # Google search via Serper
TavilySearchTool, # Tavily search API
BraveSearchTool, # Brave search
EXASearchTool, # EXA semantic search
)
# Serper (requires SERPER_API_KEY)
search = SerperDevTool()
# Tavily (requires TAVILY_API_KEY)
search = TavilySearchTool()
# Use in agent
researcher = Agent(
role="Researcher",
goal="Find information",
tools=[SerperDevTool()]
)Web Scraping Tools
from crewai_tools import (
ScrapeWebsiteTool, # Basic scraping
FirecrawlScrapeWebsiteTool, # Firecrawl API
SeleniumScrapingTool, # Browser automation
SpiderTool, # Spider.cloud
)
# Basic scraping
scraper = ScrapeWebsiteTool()
# Firecrawl (requires FIRECRAWL_API_KEY)
scraper = FirecrawlScrapeWebsiteTool()
# Selenium (requires chromedriver)
scraper = SeleniumScrapingTool()
agent = Agent(
role="Web Analyst",
goal="Extract web content",
tools=[ScrapeWebsiteTool()]
)File Tools
from crewai_tools import (
FileReadTool, # Read any file
FileWriterTool, # Write files
DirectoryReadTool, # List directory contents
DirectorySearchTool, # Search in directory
)
# Read files
file_reader = FileReadTool(file_path="./data") # Limit to directory
# Write files
file_writer = FileWriterTool()
agent = Agent(
role="File Manager",
tools=[FileReadTool(), FileWriterTool()]
)Document Tools
from crewai_tools import (
PDFSearchTool, # Search PDF content
DOCXSearchTool, # Search Word docs
TXTSearchTool, # Search text files
CSVSearchTool, # Search CSV files
JSONSearchTool, # Search JSON files
XMLSearchTool, # Search XML files
MDXSearchTool, # Search MDX files
)
# PDF search (uses embeddings)
pdf_tool = PDFSearchTool(pdf="./documents/report.pdf")
# CSV search
csv_tool = CSVSearchTool(csv="./data/sales.csv")
agent = Agent(
role="Document Analyst",
tools=[PDFSearchTool(), CSVSearchTool()]
)Database Tools
from crewai_tools import (
MySQLSearchTool, # MySQL queries
PostgreSQLTool, # PostgreSQL
MongoDBVectorSearchTool, # MongoDB vector search
QdrantVectorSearchTool, # Qdrant vector DB
WeaviateVectorSearchTool, # Weaviate
)
# MySQL
mysql_tool = MySQLSearchTool(
host="localhost",
port=3306,
database="mydb",
user="user",
password="pass"
)
# Qdrant
qdrant_tool = QdrantVectorSearchTool(
url="http://localhost:6333",
collection_name="my_collection"
)AI Service Tools
from crewai_tools import (
DallETool, # DALL-E image generation
VisionTool, # Image analysis
OCRTool, # Text extraction from images
)
# DALL-E (requires OPENAI_API_KEY)
dalle = DallETool()
# Vision (GPT-4V)
vision = VisionTool()
agent = Agent(
role="Visual Designer",
tools=[DallETool(), VisionTool()]
)Code Tools
from crewai_tools import (
CodeDocsSearchTool, # Search code documentation
GithubSearchTool, # Search GitHub repos
CodeInterpreterTool, # Execute Python code
)
# Code docs search
code_docs = CodeDocsSearchTool(docs_url="https://docs.python.org")
# GitHub search (requires GITHUB_TOKEN)
github = GithubSearchTool(
repo="owner/repo",
content_types=["code", "issue"]
)
# Code interpreter (sandboxed)
interpreter = CodeInterpreterTool()Cloud Platform Tools
from crewai_tools import (
BedrockInvokeAgentTool, # AWS Bedrock
DatabricksQueryTool, # Databricks
S3ReaderTool, # AWS S3
SnowflakeTool, # Snowflake
)
# AWS Bedrock
bedrock = BedrockInvokeAgentTool(
agent_id="your-agent-id",
agent_alias_id="alias-id"
)
# Databricks
databricks = DatabricksQueryTool(
host="your-workspace.databricks.com",
token="your-token"
)Integration Tools
from crewai_tools import (
MCPServerAdapter, # MCP protocol
ComposioTool, # Composio integrations
ZapierActionTool, # Zapier automations
)
# MCP Server
mcp = MCPServerAdapter(
server_url="http://localhost:8080",
tool_names=["tool1", "tool2"]
)
# Composio (requires COMPOSIO_API_KEY)
composio = ComposioTool()Custom Tools
Basic Custom Tool
from crewai.tools import BaseTool
from pydantic import Field
class WeatherTool(BaseTool):
name: str = "Weather Lookup"
description: str = "Get current weather for a city. Input: city name"
def _run(self, city: str) -> str:
# Your implementation
return f"Weather in {city}: 72°F, sunny"
# Use custom tool
agent = Agent(
role="Weather Reporter",
tools=[WeatherTool()]
)Tool with Parameters
from crewai.tools import BaseTool
from pydantic import Field
from typing import Optional
class APITool(BaseTool):
name: str = "API Client"
description: str = "Make API requests"
# Tool configuration
api_key: str = Field(default="")
base_url: str = Field(default="https://api.example.com")
def _run(self, endpoint: str, method: str = "GET") -> str:
import requests
url = f"{self.base_url}/{endpoint}"
headers = {"Authorization": f"Bearer {self.api_key}"}
response = requests.request(method, url, headers=headers)
return response.json()
# Configure tool
api_tool = APITool(api_key="your-key", base_url="https://api.example.com")Tool with Validation
from crewai.tools import BaseTool
from pydantic import Field, field_validator
class CalculatorTool(BaseTool):
name: str = "Calculator"Read more
CrewAI Tools Guide
Built-in Tools
Install the tools package:
pip install 'crewai[tools]'
Search Tools
from crewai_tools import (
SerperDevTool, # Google search via Serper
TavilySearchTool, # Tavily search API
BraveSearchTool, # Brave search
EXASearchTool, # EXA semantic search
)
# Serper (requires SERPER_API_KEY)
search = SerperDevTool()
# Tavily (requires TAVILY_API_KEY)
search = TavilySearchTool()
# Use in agent
researcher = Agent(
role="Researcher",
goal="Find information",
tools=[SerperDevTool()]
)Web Scraping Tools
from crewai_tools import (
ScrapeWebsiteTool, # Basic scraping
FirecrawlScrapeWebsiteTool, # Firecrawl API
SeleniumScrapingTool, # Browser automation
SpiderTool, # Spider.cloud
)
# Basic scraping
scraper = ScrapeWebsiteTool()
# Firecrawl (requires FIRECRAWL_API_KEY)
scraper = FirecrawlScrapeWebsiteTool()
# Selenium (requires chromedriver)
scraper = SeleniumScrapingTool()
agent = Agent(
role="Web Analyst",
goal="Extract web content",
tools=[ScrapeWebsiteTool()]
)File Tools
from crewai_tools import (
FileReadTool, # Read any file
FileWriterTool, # Write files
DirectoryReadTool, # List directory contents
DirectorySearchTool, # Search in directory
)
# Read files
file_reader = FileReadTool(file_path="./data") # Limit to directory
# Write files
file_writer = FileWriterTool()
agent = Agent(
role="File Manager",
tools=[FileReadTool(), FileWriterTool()]
)Document Tools
from crewai_tools import (
PDFSearchTool, # Search PDF content
DOCXSearchTool, # Search Word docs
TXTSearchTool, # Search text files
CSVSearchTool, # Search CSV files
JSONSearchTool, # Search JSON files
XMLSearchTool, # Search XML files
MDXSearchTool, # Search MDX files
)
# PDF search (uses embeddings)
pdf_tool = PDFSearchTool(pdf="./documents/report.pdf")
# CSV search
csv_tool = CSVSearchTool(csv="./data/sales.csv")
agent = Agent(
role="Document Analyst",
tools=[PDFSearchTool(), CSVSearchTool()]
)Database Tools
from crewai_tools import (
MySQLSearchTool, # MySQL queries
PostgreSQLTool, # PostgreSQL
MongoDBVectorSearchTool, # MongoDB vector search
QdrantVectorSearchTool, # Qdrant vector DB
WeaviateVectorSearchTool, # Weaviate
)
# MySQL
mysql_tool = MySQLSearchTool(
host="localhost",
port=3306,
database="mydb",
user="user",
password="pass"
)
# Qdrant
qdrant_tool = QdrantVectorSearchTool(
url="http://localhost:6333",
collection_name="my_collection"
)AI Service Tools
from crewai_tools import (
DallETool, # DALL-E image generation
VisionTool, # Image analysis
OCRTool, # Text extraction from images
)
# DALL-E (requires OPENAI_API_KEY)
dalle = DallETool()
# Vision (GPT-4V)
vision = VisionTool()
agent = Agent(
role="Visual Designer",
tools=[DallETool(), VisionTool()]
)Code Tools
from crewai_tools import (
CodeDocsSearchTool, # Search code documentation
GithubSearchTool, # Search GitHub repos
CodeInterpreterTool, # Execute Python code
)
# Code docs search
code_docs = CodeDocsSearchTool(docs_url="https://docs.python.org")
# GitHub search (requires GITHUB_TOKEN)
github = GithubSearchTool(
repo="owner/repo",
content_types=["code", "issue"]
)
# Code interpreter (sandboxed)
interpreter = CodeInterpreterTool()Cloud Platform Tools
from crewai_tools import (
BedrockInvokeAgentTool, # AWS Bedrock
DatabricksQueryTool, # Databricks
S3ReaderTool, # AWS S3
SnowflakeTool, # Snowflake
)
# AWS Bedrock
bedrock = BedrockInvokeAgentTool(
agent_id="your-agent-id",
agent_alias_id="alias-id"
)
# Databricks
databricks = DatabricksQueryTool(
host="your-workspace.databricks.com",
token="your-token"
)Integration Tools
from crewai_tools import (
MCPServerAdapter, # MCP protocol
ComposioTool, # Composio integrations
ZapierActionTool, # Zapier automations
)
# MCP Server
mcp = MCPServerAdapter(
server_url="http://localhost:8080",
tool_names=["tool1", "tool2"]
)
# Composio (requires COMPOSIO_API_KEY)
composio = ComposioTool()Custom Tools
Basic Custom Tool
from crewai.tools import BaseTool
from pydantic import Field
class WeatherTool(BaseTool):
name: str = "Weather Lookup"
description: str = "Get current weather for a city. Input: city name"
def _run(self, city: str) -> str:
# Your implementation
return f"Weather in {city}: 72°F, sunny"
# Use custom tool
agent = Agent(
role="Weather Reporter",
tools=[WeatherTool()]
)Tool with Parameters
from crewai.tools import BaseTool
from pydantic import Field
from typing import Optional
class APITool(BaseTool):
name: str = "API Client"
description: str = "Make API requests"
# Tool configuration
api_key: str = Field(default="")
base_url: str = Field(default="https://api.example.com")
def _run(self, endpoint: str, method: str = "GET") -> str:
import requests
url = f"{self.base_url}/{endpoint}"
headers = {"Authorization": f"Bearer {self.api_key}"}
response = requests.request(method, url, headers=headers)
return response.json()
# Configure tool
api_tool = APITool(api_key="your-key", base_url="https://api.example.com")Tool with Validation
from crewai.tools import BaseTool
from pydantic import Field, field_validator
class CalculatorTool(BaseTool):
name: str = "Calculator"A Super AI Lab with massive AI Doctors as Assistants. Best IDE for Research via AI Power.
Repo: OpenLAIR/dr-claw
Other agents on dr-claw.
- advanced-usage
```python from backend.data.block import Block, BlockSchema, BlockType from pydantic import BaseModel
Open agent - troubleshooting
**Error**: `Cannot connect to the Docker daemon`
Open agent - flows
Flows provide event-driven orchestration with precise control over execution paths, state management, and conditional branching. Use Flows when you need more control than Crews provide.
Open agent - integration
Integration with vector stores, LangSmith observability, and deployment.
Open agent - rag
Complete guide to Retrieval-Augmented Generation with LangChain.
Open agent - data_connectors
300+ data connectors via LlamaHub.
Open agent

