mirror of
https://github.com/crewAIInc/crewAI.git
synced 2026-04-26 12:52:39 +00:00
* perf: defer MCP SDK import by fixing import path in agent/core.py - Change 'from crewai.mcp import MCPServerConfig' to direct path 'from crewai.mcp.config import MCPServerConfig' to avoid triggering mcp/__init__.py which eagerly loads the full mcp SDK (~300-400ms) - Move MCPToolResolver import into get_mcp_tools() method body since it's only used at runtime, not in type annotations Saves ~200ms on 'import crewai' cold start. * perf: lazy-load heavy MCP imports in mcp/__init__.py MCPClient, MCPToolResolver, BaseTransport, and TransportType now use __getattr__ lazy loading. These pull in the full mcp SDK (~400ms) but are only needed at runtime when agents actually connect to MCP servers. Lightweight config and filter types remain eagerly imported. * perf: lazy-load all event type modules in events/__init__.py Previously only agent_events were lazy-loaded; all other event type modules (crew, flow, knowledge, llm, guardrail, logging, mcp, memory, reasoning, skill, task, tool_usage) were eagerly imported at package init time. Since events/__init__.py runs whenever ANY crewai.events.* submodule is accessed, this loaded ~12 Pydantic model modules unnecessarily. Now all event types use the same __getattr__ lazy-loading pattern, with TYPE_CHECKING imports preserved for IDE/type-checker support. Saves ~550ms on 'import crewai' cold start. * chore: remove UNKNOWN.egg-info from version control * fix: add MCPToolResolver to TYPE_CHECKING imports Fixes F821 (ruff) and name-defined (mypy) from lazy-loading the MCP import. The type annotation on _mcp_resolver needs the name available at type-check time. * fix: bump lxml to >=5.4.0 for GHSA-vfmq-68hx-4jfw lxml 5.3.2 has a known vulnerability. Bump to 5.4.0+ which includes the fix (libxml2 2.13.8). The previous <5.4.0 pin was for etree import issues that have since been resolved. * fix: bump exclude-newer to 2026-04-22 for lxml 6.1.0 resolution lxml 6.1.0 (GHSA fix) was released April 17 but the exclude-newer date was set to April 17, missing it by timestamp. Bump to April 22. * perf: add import time benchmark script scripts/benchmark_import_time.py measures import crewai cold start in fresh subprocesses. Supports --runs, --json (for CI), and --threshold (fail if median exceeds N seconds). The companion GitHub Action workflow needs to be pushed separately (requires workflow scope). * new action * Potential fix for pull request finding 'CodeQL / Workflow does not contain permissions' Co-authored-by: Copilot Autofix powered by AI <62310815+github-advanced-security[bot]@users.noreply.github.com> --------- Co-authored-by: Joao Moura <joaomdmoura@gmail.com> Co-authored-by: Copilot Autofix powered by AI <62310815+github-advanced-security[bot]@users.noreply.github.com>
156 lines
2.6 KiB
TOML
156 lines
2.6 KiB
TOML
[project]
|
|
name = "crewai-tools"
|
|
dynamic = ["version"]
|
|
description = "Set of tools for the crewAI framework"
|
|
readme = "README.md"
|
|
authors = [
|
|
{ name = "João Moura", email = "joaomdmoura@gmail.com" },
|
|
]
|
|
requires-python = ">=3.10, <3.14"
|
|
dependencies = [
|
|
"pytube~=15.0.0",
|
|
"requests>=2.33.0,<3",
|
|
"crewai==1.14.3a2",
|
|
"tiktoken~=0.8.0",
|
|
"beautifulsoup4~=4.13.4",
|
|
"python-docx~=1.2.0",
|
|
"youtube-transcript-api~=1.2.2",
|
|
"pymupdf~=1.26.6",
|
|
]
|
|
|
|
|
|
[project.urls]
|
|
Homepage = "https://crewai.com"
|
|
Repository = "https://github.com/crewAIInc/crewAI"
|
|
Documentation = "https://docs.crewai.com"
|
|
|
|
|
|
[project.optional-dependencies]
|
|
scrapfly-sdk = [
|
|
"scrapfly-sdk>=0.8.19",
|
|
]
|
|
sqlalchemy = [
|
|
"sqlalchemy>=2.0.35",
|
|
]
|
|
multion = [
|
|
"multion>=1.1.0",
|
|
]
|
|
firecrawl-py = [
|
|
"firecrawl-py>=1.8.0",
|
|
]
|
|
composio-core = [
|
|
"composio-core>=0.6.11.post1",
|
|
]
|
|
browserbase = [
|
|
"browserbase>=1.0.5",
|
|
]
|
|
weaviate-client = [
|
|
"weaviate-client>=4.10.2",
|
|
]
|
|
patronus = [
|
|
"patronus>=0.0.16",
|
|
]
|
|
serpapi = [
|
|
"serpapi>=0.1.5",
|
|
]
|
|
beautifulsoup4 = [
|
|
"beautifulsoup4>=4.12.3",
|
|
]
|
|
selenium = [
|
|
"selenium>=4.27.1",
|
|
]
|
|
spider-client = [
|
|
"spider-client>=0.1.25",
|
|
]
|
|
scrapegraph-py = [
|
|
"scrapegraph-py>=1.9.0",
|
|
]
|
|
linkup-sdk = [
|
|
"linkup-sdk>=0.2.2",
|
|
]
|
|
tavily-python = [
|
|
"tavily-python>=0.5.4",
|
|
]
|
|
hyperbrowser = [
|
|
"hyperbrowser>=0.18.0",
|
|
]
|
|
snowflake = [
|
|
"cryptography>=43.0.3",
|
|
"snowflake-connector-python>=3.12.4",
|
|
"snowflake-sqlalchemy>=1.7.3",
|
|
]
|
|
singlestore = [
|
|
"singlestoredb>=1.12.4",
|
|
"SQLAlchemy>=2.0.40",
|
|
]
|
|
exa-py = [
|
|
"exa-py>=1.8.7",
|
|
]
|
|
qdrant-client = [
|
|
"qdrant-client>=1.12.1",
|
|
]
|
|
apify = [
|
|
"langchain-apify>=0.1.2,<1.0.0",
|
|
]
|
|
|
|
databricks-sdk = [
|
|
"databricks-sdk>=0.46.0",
|
|
]
|
|
couchbase = [
|
|
"couchbase>=4.3.5",
|
|
]
|
|
mcp = [
|
|
"mcp>=1.6.0",
|
|
"mcpadapt>=0.1.9",
|
|
]
|
|
stagehand = [
|
|
"stagehand>=0.4.1",
|
|
]
|
|
github = [
|
|
"gitpython>=3.1.41,<4",
|
|
"PyGithub==1.59.1",
|
|
]
|
|
rag = [
|
|
"python-docx>=1.1.0",
|
|
"lxml>=6.1.0,<7", # 6.1.0+ required for GHSA-vfmq-68hx-4jfw (XXE in iterparse)
|
|
]
|
|
xml = [
|
|
"unstructured[local-inference, all-docs]>=0.17.2"
|
|
]
|
|
oxylabs = [
|
|
"oxylabs==2.0.0"
|
|
]
|
|
mongodb = [
|
|
"pymongo>=4.13"
|
|
]
|
|
mysql = [
|
|
"pymysql>=1.1.1"
|
|
]
|
|
postgresql = [
|
|
"psycopg2-binary>=2.9.10"
|
|
]
|
|
bedrock = [
|
|
"beautifulsoup4>=4.13.4",
|
|
"bedrock-agentcore>=0.1.0",
|
|
"playwright>=1.52.0",
|
|
"nest-asyncio>=1.6.0",
|
|
]
|
|
contextual = [
|
|
"contextual-client>=0.1.0",
|
|
"nest-asyncio>=1.6.0",
|
|
]
|
|
daytona = [
|
|
"daytona~=0.140.0",
|
|
]
|
|
|
|
|
|
[tool.uv]
|
|
exclude-newer = "3 days"
|
|
|
|
[build-system]
|
|
requires = ["hatchling"]
|
|
build-backend = "hatchling.build"
|
|
|
|
[tool.hatch.version]
|
|
path = "src/crewai_tools/__init__.py"
|