diff --git a/libs/arcade-core/arcade_core/auth.py b/libs/arcade-core/arcade_core/auth.py index bf8aba46..0ca77d3e 100644 --- a/libs/arcade-core/arcade_core/auth.py +++ b/libs/arcade-core/arcade_core/auth.py @@ -78,6 +78,15 @@ class Dropbox(OAuth2): super().__init__(id=id, scopes=scopes) +class Figma(OAuth2): + """Marks a tool as requiring Figma authorization.""" + + provider_id: str = "figma" + + def __init__(self, *, id: Optional[str] = None, scopes: Optional[list[str]] = None): # noqa: A002 + super().__init__(id=id, scopes=scopes) + + class GitHub(OAuth2): """Marks a tool as requiring GitHub App authorization.""" diff --git a/libs/arcade-mcp-server/arcade_mcp_server/auth/__init__.py b/libs/arcade-mcp-server/arcade_mcp_server/auth/__init__.py index 78cd2862..ec01627b 100644 --- a/libs/arcade-mcp-server/arcade_mcp_server/auth/__init__.py +++ b/libs/arcade-mcp-server/arcade_mcp_server/auth/__init__.py @@ -4,6 +4,7 @@ from arcade_core.auth import ( ClickUp, Discord, Dropbox, + Figma, GitHub, Google, Hubspot, @@ -27,6 +28,7 @@ __all__ = [ "ClickUp", "Discord", "Dropbox", + "Figma", "GitHub", "Google", "Hubspot", diff --git a/libs/arcade-mcp-server/pyproject.toml b/libs/arcade-mcp-server/pyproject.toml index 5e1f3beb..4f39e96b 100644 --- a/libs/arcade-mcp-server/pyproject.toml +++ b/libs/arcade-mcp-server/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "hatchling.build" [project] name = "arcade-mcp-server" -version = "1.9.2" +version = "1.10.2" description = "Model Context Protocol (MCP) server framework for Arcade.dev" readme = "README.md" authors = [{ name = "Arcade.dev" }] diff --git a/libs/arcade-tdk/arcade_tdk/auth/__init__.py b/libs/arcade-tdk/arcade_tdk/auth/__init__.py index 78cd2862..9b66fb98 100644 --- a/libs/arcade-tdk/arcade_tdk/auth/__init__.py +++ b/libs/arcade-tdk/arcade_tdk/auth/__init__.py @@ -4,6 +4,7 @@ from arcade_core.auth import ( ClickUp, Discord, Dropbox, + Figma, GitHub, Google, Hubspot, @@ -28,6 +29,7 @@ __all__ = [ "Discord", "Dropbox", "GitHub", + "Figma", "Google", "Hubspot", "Linear", diff --git a/libs/arcade-tdk/pyproject.toml b/libs/arcade-tdk/pyproject.toml index db639afc..a4d46116 100644 --- a/libs/arcade-tdk/pyproject.toml +++ b/libs/arcade-tdk/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "arcade-tdk" -version = "3.1.0" +version = "3.2.0" description = "Arcade TDK - Toolkit Development Kit for building Arcade tools" readme = "README.md" license = {text = "MIT"} diff --git a/libs/tests/tool/test_create_tool_definition.py b/libs/tests/tool/test_create_tool_definition.py index d46809d0..26ed6a74 100644 --- a/libs/tests/tool/test_create_tool_definition.py +++ b/libs/tests/tool/test_create_tool_definition.py @@ -19,7 +19,7 @@ from arcade_core.schema import ( from arcade_core.utils import snake_to_pascal_case from arcade_tdk import tool from arcade_tdk.annotations import Inferrable -from arcade_tdk.auth import GitHub, Google, OAuth2, Slack, X +from arcade_tdk.auth import Figma, GitHub, Google, OAuth2, Slack, X ### Tests on @tool decorator @@ -128,6 +128,17 @@ def func_with_github_auth_requirement(): pass +@tool( + desc="A function that requires Figma authorization", + requires_auth=Figma( + id="my_figma_provider123", + scopes=["file_read"], + ), +) +def func_with_figma_auth_requirement(): + pass + + @tool( desc="A function that requires Slack user authorization", requires_auth=Slack( @@ -451,6 +462,22 @@ def func_with_complex_return() -> dict[str, str]: }, id="func_with_github_auth_requirement", ), + pytest.param( + func_with_figma_auth_requirement, + { + "requirements": ToolRequirements( + authorization=ToolAuthRequirement( + provider_id="figma", + provider_type="oauth2", + id="my_figma_provider123", + oauth2=OAuth2Requirement( + scopes=["file_read"], + ), + ) + ) + }, + id="func_with_figma_auth_requirement", + ), pytest.param( func_with_slack_user_auth_requirement, {