From 178c194ef2a035018559fbaa685908de06f75147 Mon Sep 17 00:00:00 2001 From: jottakka Date: Fri, 5 Dec 2025 16:38:12 -0300 Subject: [PATCH] [TOO-192] Update tdk to add figma typed oauth (#711) Closes TOO-192 --- > [!NOTE] > Adds a Figma OAuth2 auth provider and wires it through TDK and MCP server, with tests updated and package versions bumped. > > - **Auth**: > - Add `Figma` OAuth2 provider in `libs/arcade-core/arcade_core/auth.py`. > - **Exports**: > - Expose `Figma` in `libs/arcade-mcp-server/arcade_mcp_server/auth/__init__.py` and `libs/arcade-tdk/arcade_tdk/auth/__init__.py` (`__all__`). > - **Tests**: > - Add Figma auth requirement test case in `libs/tests/tool/test_create_tool_definition.py` and import `Figma`. > - **Versioning**: > - Bump `arcade-mcp-server` to `1.10.2` and `arcade-tdk` to `3.2.0`. > > Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit 2bacfdc5695b3e7fc5e4532dbd360c3b2263130e. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot). --------- Co-authored-by: Francisco Liberal --- libs/arcade-core/arcade_core/auth.py | 9 ++++++ .../arcade_mcp_server/auth/__init__.py | 2 ++ libs/arcade-mcp-server/pyproject.toml | 2 +- libs/arcade-tdk/arcade_tdk/auth/__init__.py | 2 ++ libs/arcade-tdk/pyproject.toml | 2 +- .../tests/tool/test_create_tool_definition.py | 29 ++++++++++++++++++- 6 files changed, 43 insertions(+), 3 deletions(-) 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, {