diff --git a/src/crewai_tools/tools/ai_mind_tool/ai_mind_tool.py b/src/crewai_tools/tools/ai_mind_tool/ai_mind_tool.py index 1a96f62ff..ea6b19281 100644 --- a/src/crewai_tools/tools/ai_mind_tool/ai_mind_tool.py +++ b/src/crewai_tools/tools/ai_mind_tool/ai_mind_tool.py @@ -2,7 +2,7 @@ import os import secrets from typing import Any, Dict, List, Optional, Type -from crewai.tools import BaseTool +from crewai.tools import BaseTool, EnvVar from openai import OpenAI from pydantic import BaseModel, Field @@ -33,6 +33,9 @@ class AIMindTool(BaseTool): datasources: Optional[List[Dict[str, Any]]] = None mind_name: Optional[str] = None package_dependencies: List[str] = ["minds-sdk"] + env_vars: List[EnvVar] = [ + EnvVar(name="MINDS_API_KEY", description="API key for AI-Minds", required=True), + ] def __init__(self, api_key: Optional[str] = None, **kwargs): super().__init__(**kwargs) @@ -85,4 +88,4 @@ class AIMindTool(BaseTool): stream=False, ) - return completion.choices[0].message.content \ No newline at end of file + return completion.choices[0].message.content diff --git a/src/crewai_tools/tools/linkup/linkup_search_tool.py b/src/crewai_tools/tools/linkup/linkup_search_tool.py index c35c7fac3..634ba2863 100644 --- a/src/crewai_tools/tools/linkup/linkup_search_tool.py +++ b/src/crewai_tools/tools/linkup/linkup_search_tool.py @@ -1,6 +1,7 @@ +import os from typing import Any, List -from crewai.tools import BaseTool +from crewai.tools import BaseTool, EnvVar try: from linkup import LinkupClient @@ -24,8 +25,11 @@ class LinkupSearchTool(BaseTool): ) _client: LinkupClient = PrivateAttr() # type: ignore package_dependencies: List[str] = ["linkup-sdk"] + env_vars: List[EnvVar] = [ + EnvVar(name="LINKUP_API_KEY", description="API key for Linkup", required=True), + ] - def __init__(self, api_key: str): + def __init__(self, api_key: str | None = None): """ Initialize the tool with an API key. """ @@ -48,7 +52,7 @@ class LinkupSearchTool(BaseTool): "The 'linkup-sdk' package is required to use the LinkupSearchTool. " "Please install it with: uv add linkup-sdk" ) - self._client = LinkupClient(api_key=api_key) + self._client = LinkupClient(api_key=api_key or os.getenv("LINKUP_API_KEY")) def _run( self, query: str, depth: str = "standard", output_type: str = "searchResults" diff --git a/src/crewai_tools/tools/multion_tool/multion_tool.py b/src/crewai_tools/tools/multion_tool/multion_tool.py index 3c8d17819..cf652c324 100644 --- a/src/crewai_tools/tools/multion_tool/multion_tool.py +++ b/src/crewai_tools/tools/multion_tool/multion_tool.py @@ -1,8 +1,9 @@ """Multion tool spec.""" +import os from typing import Any, Optional, List -from crewai.tools import BaseTool +from crewai.tools import BaseTool, EnvVar class MultiOnTool(BaseTool): @@ -17,6 +18,9 @@ class MultiOnTool(BaseTool): local: bool = False max_steps: int = 3 package_dependencies: List[str] = ["multion"] + env_vars: List[EnvVar] = [ + EnvVar(name="MULTION_API_KEY", description="API key for Multion", required=True), + ] def __init__( self, @@ -44,7 +48,7 @@ class MultiOnTool(BaseTool): ) self.session_id = None self.local = local - self.multion = MultiOn(api_key=api_key) + self.multion = MultiOn(api_key=api_key or os.getenv("MULTION_API_KEY")) self.max_steps = max_steps def _run( diff --git a/src/crewai_tools/tools/oxylabs_amazon_product_scraper_tool/oxylabs_amazon_product_scraper_tool.py b/src/crewai_tools/tools/oxylabs_amazon_product_scraper_tool/oxylabs_amazon_product_scraper_tool.py index d763fa86f..1d4146fcb 100644 --- a/src/crewai_tools/tools/oxylabs_amazon_product_scraper_tool/oxylabs_amazon_product_scraper_tool.py +++ b/src/crewai_tools/tools/oxylabs_amazon_product_scraper_tool/oxylabs_amazon_product_scraper_tool.py @@ -4,7 +4,7 @@ from importlib.metadata import version from platform import architecture, python_version from typing import Any, List, Type -from crewai.tools import BaseTool +from crewai.tools import BaseTool, EnvVar from pydantic import BaseModel, ConfigDict, Field try: @@ -73,6 +73,10 @@ class OxylabsAmazonProductScraperTool(BaseTool): oxylabs_api: RealtimeClient config: OxylabsAmazonProductScraperConfig package_dependencies: List[str] = ["oxylabs"] + env_vars: List[EnvVar] = [ + EnvVar(name="OXYLABS_USERNAME", description="Username for Oxylabs", required=True), + EnvVar(name="OXYLABS_PASSWORD", description="Password for Oxylabs", required=True), + ] def __init__( self, diff --git a/src/crewai_tools/tools/oxylabs_amazon_search_scraper_tool/oxylabs_amazon_search_scraper_tool.py b/src/crewai_tools/tools/oxylabs_amazon_search_scraper_tool/oxylabs_amazon_search_scraper_tool.py index 9a113e93a..e659d244f 100644 --- a/src/crewai_tools/tools/oxylabs_amazon_search_scraper_tool/oxylabs_amazon_search_scraper_tool.py +++ b/src/crewai_tools/tools/oxylabs_amazon_search_scraper_tool/oxylabs_amazon_search_scraper_tool.py @@ -4,7 +4,7 @@ from importlib.metadata import version from platform import architecture, python_version from typing import Any, List, Type -from crewai.tools import BaseTool +from crewai.tools import BaseTool, EnvVar from pydantic import BaseModel, ConfigDict, Field try: @@ -75,6 +75,10 @@ class OxylabsAmazonSearchScraperTool(BaseTool): oxylabs_api: RealtimeClient config: OxylabsAmazonSearchScraperConfig package_dependencies: List[str] = ["oxylabs"] + env_vars: List[EnvVar] = [ + EnvVar(name="OXYLABS_USERNAME", description="Username for Oxylabs", required=True), + EnvVar(name="OXYLABS_PASSWORD", description="Password for Oxylabs", required=True), + ] def __init__( self, diff --git a/src/crewai_tools/tools/oxylabs_google_search_scraper_tool/oxylabs_google_search_scraper_tool.py b/src/crewai_tools/tools/oxylabs_google_search_scraper_tool/oxylabs_google_search_scraper_tool.py index 7de1aaa2d..1096df098 100644 --- a/src/crewai_tools/tools/oxylabs_google_search_scraper_tool/oxylabs_google_search_scraper_tool.py +++ b/src/crewai_tools/tools/oxylabs_google_search_scraper_tool/oxylabs_google_search_scraper_tool.py @@ -4,7 +4,7 @@ from importlib.metadata import version from platform import architecture, python_version from typing import Any, List, Type -from crewai.tools import BaseTool +from crewai.tools import BaseTool, EnvVar from pydantic import BaseModel, ConfigDict, Field try: @@ -78,6 +78,10 @@ class OxylabsGoogleSearchScraperTool(BaseTool): oxylabs_api: RealtimeClient config: OxylabsGoogleSearchScraperConfig package_dependencies: List[str] = ["oxylabs"] + env_vars: List[EnvVar] = [ + EnvVar(name="OXYLABS_USERNAME", description="Username for Oxylabs", required=True), + EnvVar(name="OXYLABS_PASSWORD", description="Password for Oxylabs", required=True), + ] def __init__( self, diff --git a/src/crewai_tools/tools/oxylabs_universal_scraper_tool/oxylabs_universal_scraper_tool.py b/src/crewai_tools/tools/oxylabs_universal_scraper_tool/oxylabs_universal_scraper_tool.py index 22d02f91f..05b174500 100644 --- a/src/crewai_tools/tools/oxylabs_universal_scraper_tool/oxylabs_universal_scraper_tool.py +++ b/src/crewai_tools/tools/oxylabs_universal_scraper_tool/oxylabs_universal_scraper_tool.py @@ -4,7 +4,7 @@ from importlib.metadata import version from platform import architecture, python_version from typing import Any, List, Type -from crewai.tools import BaseTool +from crewai.tools import BaseTool, EnvVar from pydantic import BaseModel, ConfigDict, Field try: @@ -69,6 +69,10 @@ class OxylabsUniversalScraperTool(BaseTool): oxylabs_api: RealtimeClient config: OxylabsUniversalScraperConfig package_dependencies: List[str] = ["oxylabs"] + env_vars: List[EnvVar] = [ + EnvVar(name="OXYLABS_USERNAME", description="Username for Oxylabs", required=True), + EnvVar(name="OXYLABS_PASSWORD", description="Password for Oxylabs", required=True), + ] def __init__( self, diff --git a/src/crewai_tools/tools/scrapfly_scrape_website_tool/scrapfly_scrape_website_tool.py b/src/crewai_tools/tools/scrapfly_scrape_website_tool/scrapfly_scrape_website_tool.py index 60fc75e16..38bdab2a0 100644 --- a/src/crewai_tools/tools/scrapfly_scrape_website_tool/scrapfly_scrape_website_tool.py +++ b/src/crewai_tools/tools/scrapfly_scrape_website_tool/scrapfly_scrape_website_tool.py @@ -1,7 +1,8 @@ +import os import logging from typing import Any, Dict, Literal, Optional, Type, List -from crewai.tools import BaseTool +from crewai.tools import BaseTool, EnvVar from pydantic import BaseModel, Field logger = logging.getLogger(__file__) @@ -29,6 +30,9 @@ class ScrapflyScrapeWebsiteTool(BaseTool): api_key: str = None scrapfly: Optional[Any] = None package_dependencies: List[str] = ["scrapfly-sdk"] + env_vars: List[EnvVar] = [ + EnvVar(name="SCRAPFLY_API_KEY", description="API key for Scrapfly", required=True), + ] def __init__(self, api_key: str): super().__init__() @@ -47,7 +51,7 @@ class ScrapflyScrapeWebsiteTool(BaseTool): raise ImportError( "`scrapfly-sdk` package not found, please run `uv add scrapfly-sdk`" ) - self.scrapfly = ScrapflyClient(key=api_key) + self.scrapfly = ScrapflyClient(key=api_key or os.getenv("SCRAPFLY_API_KEY")) def _run( self, diff --git a/src/crewai_tools/tools/spider_tool/spider_tool.py b/src/crewai_tools/tools/spider_tool/spider_tool.py index 853833261..3aee6ef88 100644 --- a/src/crewai_tools/tools/spider_tool/spider_tool.py +++ b/src/crewai_tools/tools/spider_tool/spider_tool.py @@ -2,7 +2,7 @@ import logging from typing import Any, Dict, Literal, Optional, Type, List from urllib.parse import unquote, urlparse -from crewai.tools import BaseTool +from crewai.tools import BaseTool, EnvVar from pydantic import BaseModel, Field logger = logging.getLogger(__file__) @@ -54,6 +54,9 @@ class SpiderTool(BaseTool): log_failures: bool = True config: SpiderToolConfig = SpiderToolConfig() package_dependencies: List[str] = ["spider-client"] + env_vars: List[EnvVar] = [ + EnvVar(name="SPIDER_API_KEY", description="API key for Spider.cloud", required=True), + ] def __init__( self,