scalekit-sdk-python 2.10.0__tar.gz → 2.12.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (264) hide show
  1. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/PKG-INFO +1 -1
  2. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/scalekit/_version.py +1 -1
  3. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/scalekit/actions/actions.py +191 -28
  4. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/scalekit/actions/models/custom_provider.py +5 -5
  5. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/scalekit/actions/models/mcp_config.py +6 -0
  6. scalekit_sdk_python-2.12.0/scalekit/actions/models/mcp_connection_auth_state.py +62 -0
  7. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/scalekit/actions/models/requests/create_connected_account_request.py +15 -2
  8. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/scalekit/actions/models/requests/update_connected_account_request.py +14 -1
  9. scalekit_sdk_python-2.12.0/scalekit/actions/models/responses/create_mcp_session_token_response.py +52 -0
  10. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/scalekit/actions/models/responses/get_connected_account_auth_response.py +9 -0
  11. scalekit_sdk_python-2.12.0/scalekit/actions/models/responses/list_mcp_connected_accounts_response.py +52 -0
  12. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/scalekit/actions/types.py +6 -0
  13. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/scalekit/connected_accounts.py +19 -11
  14. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/scalekit/core.py +3 -1
  15. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/scalekit/mcp.py +104 -13
  16. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/scalekit/v1/auth/auth_pb2.py +40 -36
  17. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/scalekit/v1/auth/auth_pb2.pyi +8 -4
  18. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/scalekit/v1/clients/clients_pb2.py +84 -84
  19. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/scalekit/v1/commons/commons_pb2.py +21 -13
  20. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/scalekit/v1/commons/commons_pb2.pyi +10 -0
  21. scalekit_sdk_python-2.12.0/scalekit/v1/connected_accounts/connected_accounts_pb2.py +335 -0
  22. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/scalekit/v1/connected_accounts/connected_accounts_pb2.pyi +34 -4
  23. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/scalekit/v1/connected_accounts/connected_accounts_pb2_grpc.py +34 -0
  24. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/scalekit/v1/connections/connections_pb2.py +8 -8
  25. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/scalekit/v1/connections/connections_pb2.pyi +2 -0
  26. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/scalekit/v1/domains/domains_pb2.py +12 -12
  27. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/scalekit/v1/environments/environments_pb2.py +140 -112
  28. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/scalekit/v1/environments/environments_pb2.pyi +46 -4
  29. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/scalekit/v1/environments/environments_pb2_grpc.py +66 -0
  30. scalekit_sdk_python-2.12.0/scalekit/v1/mcp/mcp_pb2.py +358 -0
  31. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/scalekit/v1/mcp/mcp_pb2.pyi +59 -4
  32. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/scalekit/v1/mcp/mcp_pb2_grpc.py +66 -0
  33. scalekit_sdk_python-2.12.0/scalekit/v1/migrations/migrations_pb2.py +101 -0
  34. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/scalekit/v1/migrations/migrations_pb2.pyi +21 -0
  35. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/scalekit/v1/migrations/migrations_pb2_grpc.py +33 -0
  36. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/scalekit/v1/organizations/organizations_pb2.py +96 -90
  37. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/scalekit/v1/organizations/organizations_pb2.pyi +12 -6
  38. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/scalekit/v1/roles/roles_pb2.py +49 -49
  39. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/scalekit/v1/tools/tools_pb2.py +32 -32
  40. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/scalekit_sdk_python.egg-info/PKG-INFO +1 -1
  41. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/scalekit_sdk_python.egg-info/SOURCES.txt +4 -0
  42. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/tests/test_actions.py +189 -0
  43. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/tests/test_connected_accounts.py +65 -0
  44. scalekit_sdk_python-2.12.0/tests/test_mcp.py +301 -0
  45. scalekit_sdk_python-2.12.0/tests/test_organization_slug_logo.py +89 -0
  46. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/tests/test_permissions.py +2 -2
  47. scalekit_sdk_python-2.10.0/scalekit/v1/connected_accounts/connected_accounts_pb2.py +0 -311
  48. scalekit_sdk_python-2.10.0/scalekit/v1/mcp/mcp_pb2.py +0 -309
  49. scalekit_sdk_python-2.10.0/scalekit/v1/migrations/migrations_pb2.py +0 -90
  50. scalekit_sdk_python-2.10.0/tests/test_mcp.py +0 -156
  51. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/LICENSE +0 -0
  52. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/README.md +0 -0
  53. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/buf/__init__.py +0 -0
  54. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/buf/validate/__init__.py +0 -0
  55. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/buf/validate/expression_pb2.py +0 -0
  56. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/buf/validate/expression_pb2.pyi +0 -0
  57. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/buf/validate/expression_pb2_grpc.py +0 -0
  58. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/buf/validate/priv/__init__.py +0 -0
  59. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/buf/validate/priv/private_pb2.py +0 -0
  60. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/buf/validate/priv/private_pb2.pyi +0 -0
  61. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/buf/validate/priv/private_pb2_grpc.py +0 -0
  62. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/buf/validate/validate_pb2.py +0 -0
  63. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/buf/validate/validate_pb2.pyi +0 -0
  64. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/buf/validate/validate_pb2_grpc.py +0 -0
  65. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/pyproject.toml +0 -0
  66. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/scalekit/__init__.py +0 -0
  67. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/scalekit/actions/__init__.py +0 -0
  68. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/scalekit/actions/frameworks/__init__.py +0 -0
  69. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/scalekit/actions/frameworks/google_adk.py +0 -0
  70. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/scalekit/actions/frameworks/langchain.py +0 -0
  71. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/scalekit/actions/frameworks/types/__init__.py +0 -0
  72. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/scalekit/actions/frameworks/types/google_adk_tool.py +0 -0
  73. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/scalekit/actions/frameworks/util.py +0 -0
  74. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/scalekit/actions/models/__init__.py +0 -0
  75. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/scalekit/actions/models/mcp_instance.py +0 -0
  76. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/scalekit/actions/models/requests/__init__.py +0 -0
  77. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/scalekit/actions/models/requests/create_custom_provider_request.py +0 -0
  78. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/scalekit/actions/models/requests/delete_custom_provider_request.py +0 -0
  79. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/scalekit/actions/models/requests/list_providers_request.py +0 -0
  80. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/scalekit/actions/models/requests/mcp_request.py +0 -0
  81. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/scalekit/actions/models/requests/tool_request.py +0 -0
  82. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/scalekit/actions/models/requests/update_custom_provider_request.py +0 -0
  83. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/scalekit/actions/models/responses/__init__.py +0 -0
  84. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/scalekit/actions/models/responses/create_connected_account_response.py +0 -0
  85. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/scalekit/actions/models/responses/create_custom_provider_response.py +0 -0
  86. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/scalekit/actions/models/responses/create_mcp_config_response.py +0 -0
  87. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/scalekit/actions/models/responses/create_mcp_response.py +0 -0
  88. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/scalekit/actions/models/responses/delete_connected_account_response.py +0 -0
  89. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/scalekit/actions/models/responses/delete_custom_provider_response.py +0 -0
  90. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/scalekit/actions/models/responses/delete_mcp_config_response.py +0 -0
  91. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/scalekit/actions/models/responses/delete_mcp_instance_response.py +0 -0
  92. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/scalekit/actions/models/responses/ensure_mcp_instance_response.py +0 -0
  93. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/scalekit/actions/models/responses/execute_tool_response.py +0 -0
  94. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/scalekit/actions/models/responses/get_mcp_instance_auth_state_response.py +0 -0
  95. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/scalekit/actions/models/responses/get_mcp_instance_response.py +0 -0
  96. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/scalekit/actions/models/responses/get_mcp_response.py +0 -0
  97. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/scalekit/actions/models/responses/list_connected_accounts_response.py +0 -0
  98. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/scalekit/actions/models/responses/list_mcp_configs_response.py +0 -0
  99. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/scalekit/actions/models/responses/list_mcp_instances_response.py +0 -0
  100. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/scalekit/actions/models/responses/list_providers_response.py +0 -0
  101. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/scalekit/actions/models/responses/magic_link_response.py +0 -0
  102. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/scalekit/actions/models/responses/update_connected_account_response.py +0 -0
  103. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/scalekit/actions/models/responses/update_custom_provider_response.py +0 -0
  104. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/scalekit/actions/models/responses/update_mcp_config_response.py +0 -0
  105. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/scalekit/actions/models/responses/update_mcp_instance_response.py +0 -0
  106. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/scalekit/actions/models/responses/verify_connected_account_user_response.py +0 -0
  107. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/scalekit/actions/models/tool_input_output.py +0 -0
  108. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/scalekit/actions/models/tool_mapping.py +0 -0
  109. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/scalekit/actions/modifier.py +0 -0
  110. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/scalekit/auth.py +0 -0
  111. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/scalekit/client.py +0 -0
  112. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/scalekit/common/__init__.py +0 -0
  113. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/scalekit/common/exceptions.py +0 -0
  114. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/scalekit/common/scalekit.py +0 -0
  115. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/scalekit/common/user.py +0 -0
  116. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/scalekit/connection.py +0 -0
  117. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/scalekit/constants/__init__.py +0 -0
  118. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/scalekit/constants/user.py +0 -0
  119. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/scalekit/directory.py +0 -0
  120. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/scalekit/domain.py +0 -0
  121. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/scalekit/m2m_client.py +0 -0
  122. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/scalekit/organization.py +0 -0
  123. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/scalekit/passwordless.py +0 -0
  124. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/scalekit/permissions.py +0 -0
  125. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/scalekit/providers.py +0 -0
  126. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/scalekit/role.py +0 -0
  127. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/scalekit/sessions.py +0 -0
  128. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/scalekit/token.py +0 -0
  129. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/scalekit/tools.py +0 -0
  130. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/scalekit/users.py +0 -0
  131. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/scalekit/utils/__init__.py +0 -0
  132. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/scalekit/utils/directory.py +0 -0
  133. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/scalekit/v1/__init__.py +0 -0
  134. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/scalekit/v1/agentkit_logs/__init__.py +0 -0
  135. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/scalekit/v1/agentkit_logs/agentkit_analytics_pb2.py +0 -0
  136. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/scalekit/v1/agentkit_logs/agentkit_analytics_pb2.pyi +0 -0
  137. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/scalekit/v1/agentkit_logs/agentkit_analytics_pb2_grpc.py +0 -0
  138. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/scalekit/v1/agentkit_logs/agentkit_logs_pb2.py +0 -0
  139. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/scalekit/v1/agentkit_logs/agentkit_logs_pb2.pyi +0 -0
  140. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/scalekit/v1/agentkit_logs/agentkit_logs_pb2_grpc.py +0 -0
  141. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/scalekit/v1/auditlogs/__init__.py +0 -0
  142. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/scalekit/v1/auditlogs/auditlogs_pb2.py +0 -0
  143. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/scalekit/v1/auditlogs/auditlogs_pb2.pyi +0 -0
  144. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/scalekit/v1/auditlogs/auditlogs_pb2_grpc.py +0 -0
  145. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/scalekit/v1/auth/__init__.py +0 -0
  146. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/scalekit/v1/auth/auth_pb2_grpc.py +0 -0
  147. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/scalekit/v1/auth/passwordless_pb2.py +0 -0
  148. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/scalekit/v1/auth/passwordless_pb2.pyi +0 -0
  149. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/scalekit/v1/auth/passwordless_pb2_grpc.py +0 -0
  150. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/scalekit/v1/auth/totp_pb2.py +0 -0
  151. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/scalekit/v1/auth/totp_pb2.pyi +0 -0
  152. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/scalekit/v1/auth/totp_pb2_grpc.py +0 -0
  153. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/scalekit/v1/auth/webauthn_pb2.py +0 -0
  154. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/scalekit/v1/auth/webauthn_pb2.pyi +0 -0
  155. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/scalekit/v1/auth/webauthn_pb2_grpc.py +0 -0
  156. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/scalekit/v1/clients/__init__.py +0 -0
  157. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/scalekit/v1/clients/clients_pb2.pyi +0 -0
  158. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/scalekit/v1/clients/clients_pb2_grpc.py +0 -0
  159. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/scalekit/v1/commons/__init__.py +0 -0
  160. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/scalekit/v1/commons/commons_pb2_grpc.py +0 -0
  161. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/scalekit/v1/connected_accounts/__init__.py +0 -0
  162. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/scalekit/v1/connections/__init__.py +0 -0
  163. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/scalekit/v1/connections/connections_pb2_grpc.py +0 -0
  164. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/scalekit/v1/directories/__init__.py +0 -0
  165. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/scalekit/v1/directories/directories_pb2.py +0 -0
  166. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/scalekit/v1/directories/directories_pb2.pyi +0 -0
  167. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/scalekit/v1/directories/directories_pb2_grpc.py +0 -0
  168. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/scalekit/v1/domains/__init__.py +0 -0
  169. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/scalekit/v1/domains/domains_pb2.pyi +0 -0
  170. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/scalekit/v1/domains/domains_pb2_grpc.py +0 -0
  171. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/scalekit/v1/emails/__init__.py +0 -0
  172. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/scalekit/v1/emails/emails_pb2.py +0 -0
  173. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/scalekit/v1/emails/emails_pb2.pyi +0 -0
  174. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/scalekit/v1/emails/emails_pb2_grpc.py +0 -0
  175. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/scalekit/v1/environments/__init__.py +0 -0
  176. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/scalekit/v1/errdetails/__init__.py +0 -0
  177. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/scalekit/v1/errdetails/errdetails_pb2.py +0 -0
  178. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/scalekit/v1/errdetails/errdetails_pb2.pyi +0 -0
  179. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/scalekit/v1/errdetails/errdetails_pb2_grpc.py +0 -0
  180. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/scalekit/v1/events/__init__.py +0 -0
  181. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/scalekit/v1/events/events_pb2.py +0 -0
  182. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/scalekit/v1/events/events_pb2.pyi +0 -0
  183. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/scalekit/v1/events/events_pb2_grpc.py +0 -0
  184. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/scalekit/v1/interceptors/__init__.py +0 -0
  185. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/scalekit/v1/interceptors/interceptors_pb2.py +0 -0
  186. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/scalekit/v1/interceptors/interceptors_pb2.pyi +0 -0
  187. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/scalekit/v1/interceptors/interceptors_pb2_grpc.py +0 -0
  188. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/scalekit/v1/keys/__init__.py +0 -0
  189. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/scalekit/v1/keys/keys_pb2.py +0 -0
  190. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/scalekit/v1/keys/keys_pb2.pyi +0 -0
  191. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/scalekit/v1/keys/keys_pb2_grpc.py +0 -0
  192. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/scalekit/v1/mcp/__init__.py +0 -0
  193. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/scalekit/v1/members/__init__.py +0 -0
  194. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/scalekit/v1/members/members_pb2.py +0 -0
  195. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/scalekit/v1/members/members_pb2.pyi +0 -0
  196. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/scalekit/v1/members/members_pb2_grpc.py +0 -0
  197. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/scalekit/v1/migrations/__init__.py +0 -0
  198. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/scalekit/v1/options/__init__.py +0 -0
  199. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/scalekit/v1/options/options_pb2.py +0 -0
  200. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/scalekit/v1/options/options_pb2.pyi +0 -0
  201. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/scalekit/v1/options/options_pb2_grpc.py +0 -0
  202. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/scalekit/v1/organizations/__init__.py +0 -0
  203. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/scalekit/v1/organizations/organizations_pb2_grpc.py +0 -0
  204. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/scalekit/v1/providers/__init__.py +0 -0
  205. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/scalekit/v1/providers/providers_pb2.py +0 -0
  206. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/scalekit/v1/providers/providers_pb2.pyi +0 -0
  207. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/scalekit/v1/providers/providers_pb2_grpc.py +0 -0
  208. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/scalekit/v1/roles/__init__.py +0 -0
  209. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/scalekit/v1/roles/roles_pb2.pyi +0 -0
  210. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/scalekit/v1/roles/roles_pb2_grpc.py +0 -0
  211. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/scalekit/v1/secrets/__init__.py +0 -0
  212. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/scalekit/v1/secrets/secrets_pb2.py +0 -0
  213. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/scalekit/v1/secrets/secrets_pb2.pyi +0 -0
  214. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/scalekit/v1/secrets/secrets_pb2_grpc.py +0 -0
  215. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/scalekit/v1/sessions/__init__.py +0 -0
  216. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/scalekit/v1/sessions/sessions_pb2.py +0 -0
  217. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/scalekit/v1/sessions/sessions_pb2.pyi +0 -0
  218. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/scalekit/v1/sessions/sessions_pb2_grpc.py +0 -0
  219. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/scalekit/v1/tokens/__init__.py +0 -0
  220. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/scalekit/v1/tokens/tokens_pb2.py +0 -0
  221. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/scalekit/v1/tokens/tokens_pb2.pyi +0 -0
  222. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/scalekit/v1/tokens/tokens_pb2_grpc.py +0 -0
  223. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/scalekit/v1/tools/__init__.py +0 -0
  224. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/scalekit/v1/tools/tools_pb2.pyi +0 -0
  225. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/scalekit/v1/tools/tools_pb2_grpc.py +0 -0
  226. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/scalekit/v1/user_attributes/__init__.py +0 -0
  227. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/scalekit/v1/user_attributes/user_attributes_pb2.py +0 -0
  228. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/scalekit/v1/user_attributes/user_attributes_pb2.pyi +0 -0
  229. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/scalekit/v1/user_attributes/user_attributes_pb2_grpc.py +0 -0
  230. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/scalekit/v1/users/__init__.py +0 -0
  231. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/scalekit/v1/users/users_pb2.py +0 -0
  232. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/scalekit/v1/users/users_pb2.pyi +0 -0
  233. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/scalekit/v1/users/users_pb2_grpc.py +0 -0
  234. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/scalekit/v1/webhooks/__init__.py +0 -0
  235. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/scalekit/v1/webhooks/webhooks_pb2.py +0 -0
  236. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/scalekit/v1/webhooks/webhooks_pb2.pyi +0 -0
  237. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/scalekit/v1/webhooks/webhooks_pb2_grpc.py +0 -0
  238. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/scalekit/v1/workspaces/__init__.py +0 -0
  239. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/scalekit/v1/workspaces/workspaces_pb2.py +0 -0
  240. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/scalekit/v1/workspaces/workspaces_pb2.pyi +0 -0
  241. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/scalekit/v1/workspaces/workspaces_pb2_grpc.py +0 -0
  242. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/scalekit/webauthn.py +0 -0
  243. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/scalekit_sdk_python.egg-info/dependency_links.txt +0 -0
  244. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/scalekit_sdk_python.egg-info/requires.txt +0 -0
  245. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/scalekit_sdk_python.egg-info/top_level.txt +0 -0
  246. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/setup.cfg +0 -0
  247. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/setup.py +0 -0
  248. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/tests/test_connection.py +0 -0
  249. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/tests/test_directory.py +0 -0
  250. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/tests/test_domain.py +0 -0
  251. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/tests/test_m2m_client.py +0 -0
  252. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/tests/test_org_roles.py +0 -0
  253. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/tests/test_organization.py +0 -0
  254. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/tests/test_organization_session_policy.py +0 -0
  255. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/tests/test_passwordless.py +0 -0
  256. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/tests/test_providers.py +0 -0
  257. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/tests/test_role_defaults_dependent.py +0 -0
  258. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/tests/test_roles.py +0 -0
  259. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/tests/test_sessions.py +0 -0
  260. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/tests/test_tokens.py +0 -0
  261. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/tests/test_tools.py +0 -0
  262. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/tests/test_user_roles_permissions.py +0 -0
  263. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/tests/test_users.py +0 -0
  264. {scalekit_sdk_python-2.10.0 → scalekit_sdk_python-2.12.0}/tests/test_webauthn_credentials.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: scalekit-sdk-python
3
- Version: 2.10.0
3
+ Version: 2.12.0
4
4
  Summary: Scalekit official Python SDK
5
5
  Home-page: https://github.com/scalekit-inc/scalekit-sdk-python
6
6
  Author: Team Scalekit
@@ -1,3 +1,3 @@
1
1
  # Single source of truth for the SDK version.
2
2
  # Import this in setup.py and scalekit/core.py — never hardcode the version elsewhere.
3
- __version__ = "2.10.0"
3
+ __version__ = "2.12.0"
@@ -1,3 +1,4 @@
1
+ from datetime import timedelta
1
2
  from typing import Optional, Any, List, Dict, Union
2
3
  import requests
3
4
  from scalekit.actions.types import ToolRequest,ExecuteToolResponse,MagicLinkResponse,ListConnectedAccountsResponse,DeleteConnectedAccountResponse,GetConnectedAccountAuthResponse,GetConnectedAccountDetailsResponse,ToolInput, \
@@ -5,7 +6,8 @@ from scalekit.actions.types import ToolRequest,ExecuteToolResponse,MagicLinkResp
5
6
  EnsureMcpInstanceResponse,UpdateMcpInstanceResponse,GetMcpInstanceResponse,ListMcpInstancesResponse,DeleteMcpInstanceResponse,GetMcpInstanceAuthStateResponse, \
6
7
  McpConfig,McpConfigConnectionToolMapping,VerifyConnectedAccountUserResponse, \
7
8
  CreateCustomProviderRequest,UpdateCustomProviderRequest,ListProvidersRequest,DeleteCustomProviderRequest, \
8
- CreateCustomProviderResponse,UpdateCustomProviderResponse,ListProvidersResponse,DeleteCustomProviderResponse
9
+ CreateCustomProviderResponse,UpdateCustomProviderResponse,ListProvidersResponse,DeleteCustomProviderResponse, \
10
+ ListMcpConnectedAccountsResponse,CreateMcpSessionTokenResponse,McpConnectionAuthState
9
11
  from scalekit.actions.models.responses.create_connected_account_response import CreateConnectedAccountResponse
10
12
  from scalekit.actions.models.requests.create_connected_account_request import CreateConnectedAccountRequest
11
13
  from scalekit.actions.models.requests.update_connected_account_request import UpdateConnectedAccountRequest
@@ -242,37 +244,35 @@ class ActionClient:
242
244
  return VerifyConnectedAccountUserResponse.from_proto(proto_response)
243
245
 
244
246
  def list_connected_accounts(
245
- self,
247
+ self,
246
248
  connection_name: Optional[str] = None,
247
249
  identifier: Optional[str] = None,
248
250
  provider: Optional[str] = None,
251
+ connection_names: Optional[List[str]] = None,
249
252
  **kwargs
250
253
  ) -> ListConnectedAccountsResponse:
254
+ """List connected accounts with optional filtering.
255
+
256
+ Args:
257
+ connection_name: Filter by a single connector slug, e.g. ``"github"``.
258
+ Mapped to the ``connector`` field in the underlying request.
259
+ identifier: Filter by end-user identifier, e.g. email or opaque user ID.
260
+ provider: Filter by OAuth/API-key provider slug, e.g. ``"google"``.
261
+ connection_names: Filter results to connected accounts belonging to *any*
262
+ of these connection slugs. Useful when you want to check multiple
263
+ connectors at once, e.g. ``["github", "google-calendar", "slack"]``.
264
+ Can be combined with ``identifier`` to narrow results to a specific user.
265
+
266
+ Returns:
267
+ ListConnectedAccountsResponse containing the matching connected accounts.
251
268
  """
252
- List connected accounts with optional filtering
253
-
254
- :param connection_name: Connector identifier (optional)
255
- :type: str
256
- :param identifier: Identifier filter (optional)
257
- :type: str
258
- :param provider: Provider filter (optional)
259
- :type: str
260
-
261
- :returns:
262
- ListConnectedAccountsResponse containing list of connected accounts
263
- """
264
- # Call the existing connected_accounts method which returns (response, metadata) tuple
265
269
  result_tuple = self.connected_accounts.list_connected_accounts(
266
270
  connector=connection_name,
267
271
  identifier=identifier,
268
- provider=provider
272
+ provider=provider,
273
+ connection_names=connection_names,
269
274
  )
270
-
271
- # Extract the response[0] (the actual ListConnectedAccountsResponse proto object)
272
- proto_response = result_tuple[0]
273
-
274
- # Convert proto to our ListConnectedAccountsResponse class
275
- return ListConnectedAccountsResponse.from_proto(proto_response)
275
+ return ListConnectedAccountsResponse.from_proto(result_tuple[0])
276
276
 
277
277
  def delete_connected_account(
278
278
  self,
@@ -543,6 +543,7 @@ class ActionClient:
543
543
  filter_id: Optional[str] = None,
544
544
  filter_provider: Optional[str] = None,
545
545
  filter_name: Optional[str] = None,
546
+ filter_mcp_server_url: Optional[str] = None,
546
547
  search: Optional[str] = None,
547
548
  **kwargs,
548
549
  ) -> ListMcpConfigsResponse:
@@ -554,6 +555,7 @@ class ActionClient:
554
555
  filter_id=filter_id,
555
556
  filter_provider=filter_provider,
556
557
  filter_name=filter_name,
558
+ filter_mcp_server_url=filter_mcp_server_url,
557
559
  search=search,
558
560
  )
559
561
 
@@ -900,23 +902,43 @@ class ActionMcp:
900
902
  filter_id: Optional[str] = None,
901
903
  filter_provider: Optional[str] = None,
902
904
  filter_name: Optional[str] = None,
905
+ filter_mcp_server_url: Optional[str] = None,
903
906
  search: Optional[str] = None,
904
907
  ) -> ListMcpConfigsResponse:
905
908
  """List MCP configurations with optional pagination and filtering.
906
909
 
907
910
  Args:
908
911
  page_size: Maximum number of configs to include in the current page.
909
- page_token: Cursor token returned by a previous `list_configs` call.
910
- filter_id: Restrict results to a specific configuration identifier.
911
- filter_provider: Restrict results to configs for a given provider slug.
912
- filter_name: Restrict results to configs whose names match exactly.
913
- search: Free-form search query applied to name field.
912
+ Defaults to the server-side default (typically 20).
913
+ page_token: Cursor token returned by a previous ``list_configs`` call.
914
+ Pass this to fetch the next page of results.
915
+ filter_id: Restrict results to a specific configuration by its Scalekit ID,
916
+ e.g. ``"cfg_01abc123"``.
917
+ filter_provider: Restrict results to configs for a given provider slug,
918
+ e.g. ``"github"`` or ``"google-calendar"``.
919
+ filter_name: Restrict results to configs whose name matches exactly,
920
+ e.g. ``"My GitHub Config"``.
921
+ filter_mcp_server_url: Restrict results to configs whose MCP server URL
922
+ matches this value, e.g. ``"https://mcp.example.com/sse"``.
923
+ search: Free-form search query applied to the config name field.
914
924
 
915
925
  Returns:
916
- ListMcpConfigsResponse: Parsed wrapper around the proto response.
926
+ ListMcpConfigsResponse: Parsed wrapper around the proto response containing
927
+ a ``configs`` list, ``next_page_token``, and ``total_count``.
917
928
 
918
929
  Raises:
919
930
  ValueError: If an MCP client has not been configured on the action client.
931
+
932
+ Example::
933
+
934
+ page1 = client.actions.mcp.list_configs(page_size=10)
935
+ for cfg in page1.configs:
936
+ print(cfg.name, cfg.mcp_server_url)
937
+
938
+ if page1.next_page_token:
939
+ page2 = client.actions.mcp.list_configs(
940
+ page_size=10, page_token=page1.next_page_token
941
+ )
920
942
  """
921
943
  client = self._client()
922
944
  result_tuple = client.list_configs(
@@ -925,6 +947,7 @@ class ActionMcp:
925
947
  filter_id=filter_id,
926
948
  filter_provider=filter_provider,
927
949
  filter_name=filter_name,
950
+ filter_mcp_server_url=filter_mcp_server_url,
928
951
  search=search,
929
952
  )
930
953
  return ListMcpConfigsResponse.from_proto(result_tuple[0])
@@ -1160,6 +1183,146 @@ class ActionMcp:
1160
1183
  )
1161
1184
  return GetMcpInstanceAuthStateResponse.from_proto(result_tuple[0])
1162
1185
 
1186
+ def list_mcp_connected_accounts(
1187
+ self,
1188
+ config_id: str,
1189
+ identifier: str,
1190
+ include_auth_link: Optional[bool] = None,
1191
+ ) -> ListMcpConnectedAccountsResponse:
1192
+ """List the connected account auth state for all connections in an MCP config.
1193
+
1194
+ For each connection defined in the MCP configuration, this method returns the
1195
+ current authorisation status of the end-user's connected account and,
1196
+ optionally, a one-time link the user can open to authorise or re-authorise
1197
+ the connection.
1198
+
1199
+ This is typically called server-side before serving MCP tool calls, to
1200
+ determine whether the user still has valid credentials for every connector
1201
+ the MCP config requires.
1202
+
1203
+ Args:
1204
+ config_id: Scalekit ID of the MCP configuration to inspect,
1205
+ e.g. ``"cfg_01abc123"``.
1206
+ identifier: End-user identifier for whom to fetch auth state — usually
1207
+ an email address or opaque user ID that was used when calling
1208
+ ``ensure_instance``, e.g. ``"alice@example.com"``.
1209
+ include_auth_link: When ``True``, every connected account in the response
1210
+ will include an ``authentication_link`` regardless of its current
1211
+ status. Set this to ``True`` when building a connected-account
1212
+ integration page for an MCP server — it lets the end user see the
1213
+ status of all their connections and authorise or re-authorise any of
1214
+ them in one pass.
1215
+
1216
+ When ``False`` (default), ``authentication_link`` is omitted from
1217
+ the response. If a connected account does not yet exist for a given
1218
+ connection, ``connected_account_id`` will be an empty string. In
1219
+ that situation you can either call ``get_authorization_link`` for
1220
+ the specific connection or re-call this method with
1221
+ ``include_auth_link=True``.
1222
+
1223
+ **Auth links are valid for 1 minute only** — generate them close
1224
+ to the time you redirect the user.
1225
+
1226
+ Returns:
1227
+ ListMcpConnectedAccountsResponse: Contains a ``connected_accounts`` list.
1228
+ Each item is a :class:`McpConnectionAuthState` with fields:
1229
+
1230
+ - ``connection_name`` — slug of the connector (``"github"``)
1231
+ - ``provider`` — OAuth provider (``"github"``)
1232
+ - ``connected_account_id`` — Scalekit ID for the user's connected account;
1233
+ empty string if no connected account exists yet for this connection
1234
+ - ``connected_account_status`` — ``"active"``, ``"expired"``, or ``"disconnected"``
1235
+ - ``authentication_link`` — auth/re-auth URL valid for 1 minute;
1236
+ present for all connections when ``include_auth_link=True``,
1237
+ otherwise omitted
1238
+
1239
+ Raises:
1240
+ ValueError: If ``config_id`` or ``identifier`` is blank.
1241
+
1242
+ Example::
1243
+
1244
+ state = client.actions.mcp.list_mcp_connected_accounts(
1245
+ config_id="cfg_01abc123",
1246
+ identifier="alice@example.com",
1247
+ include_auth_link=True,
1248
+ )
1249
+ for account in state.connected_accounts:
1250
+ if account.connected_account_status != "active":
1251
+ print(
1252
+ f"{account.connection_name} needs auth: "
1253
+ f"{account.authentication_link}"
1254
+ )
1255
+ """
1256
+ if not config_id:
1257
+ raise ValueError("config_id is required")
1258
+ if not identifier:
1259
+ raise ValueError("identifier is required")
1260
+ result_tuple = self._client().list_mcp_connected_accounts(
1261
+ config_id=config_id,
1262
+ identifier=identifier,
1263
+ include_auth_link=include_auth_link,
1264
+ )
1265
+ return ListMcpConnectedAccountsResponse.from_proto(result_tuple[0])
1266
+
1267
+ def create_session_token(
1268
+ self,
1269
+ mcp_config_id: str,
1270
+ identifier: str,
1271
+ expiry: Optional[timedelta] = None,
1272
+ ) -> CreateMcpSessionTokenResponse:
1273
+ """Create a short-lived session token for a user to access an MCP server.
1274
+
1275
+ The token is scoped to a specific MCP configuration and end-user. Pass it
1276
+ as a ``Bearer`` token in the ``Authorization`` header when making requests
1277
+ to the MCP server URL associated with the config.
1278
+
1279
+ Args:
1280
+ mcp_config_id: Scalekit ID of the MCP configuration the token should
1281
+ grant access to, e.g. ``"cfg_01abc123"``.
1282
+ identifier: End-user identifier for whom the token is minted — typically
1283
+ the same email or opaque ID used when calling ``ensure_instance``,
1284
+ e.g. ``"alice@example.com"``.
1285
+ expiry: Requested lifetime for the token as a Python ``timedelta``.
1286
+ When omitted, the server-side default TTL is applied (typically
1287
+ 1 hour). Example values:
1288
+
1289
+ - ``timedelta(minutes=30)`` — 30-minute token
1290
+ - ``timedelta(hours=8)`` — 8-hour token (work-day session)
1291
+ - ``timedelta(days=1)`` — 24-hour token
1292
+
1293
+ Returns:
1294
+ CreateMcpSessionTokenResponse: Contains:
1295
+
1296
+ - ``token`` (``str``) — opaque bearer token string.
1297
+ - ``expires_at`` (``datetime``) — UTC datetime when the token expires.
1298
+
1299
+ Raises:
1300
+ ValueError: If ``mcp_config_id`` or ``identifier`` is blank.
1301
+
1302
+ Example::
1303
+
1304
+ from datetime import timedelta
1305
+
1306
+ resp = client.actions.mcp.create_session_token(
1307
+ mcp_config_id="cfg_01abc123",
1308
+ identifier="alice@example.com",
1309
+ expiry=timedelta(hours=8),
1310
+ )
1311
+
1312
+ headers = {"Authorization": f"Bearer {resp.token}"}
1313
+ # Use headers when calling the MCP server URL
1314
+ """
1315
+ if not mcp_config_id:
1316
+ raise ValueError("mcp_config_id is required")
1317
+ if not identifier:
1318
+ raise ValueError("identifier is required")
1319
+ result_tuple = self._client().create_session_token(
1320
+ mcp_config_id=mcp_config_id,
1321
+ identifier=identifier,
1322
+ expiry=expiry,
1323
+ )
1324
+ return CreateMcpSessionTokenResponse.from_proto(result_tuple[0])
1325
+
1163
1326
 
1164
1327
  class ActionProviders:
1165
1328
  """Typed action layer over ProvidersClient for custom provider CRUD.
@@ -84,11 +84,11 @@ class AuthField(BaseModel):
84
84
  :rtype: AuthField
85
85
  """
86
86
  return cls(
87
- field_name=d.get("field_name", ""),
88
- label=d.get("label", ""),
89
- input_type=d.get("input_type", "text"),
90
- hint=d.get("hint", ""),
91
- required=d.get("required", False),
87
+ field_name=d.get("field_name") or "",
88
+ label=d.get("label") or "",
89
+ input_type=d.get("input_type") or "text",
90
+ hint=d.get("hint") or "",
91
+ required=d.get("required") or False,
92
92
  )
93
93
 
94
94
 
@@ -74,6 +74,10 @@ class McpConfig(BaseModel):
74
74
  default_factory=list,
75
75
  description="Mappings that connect tools to underlying connections",
76
76
  )
77
+ mcp_server_url: Optional[str] = Field(
78
+ None,
79
+ description="URL of the MCP server endpoint associated with this config (read-only)",
80
+ )
77
81
 
78
82
  def to_proto(self) -> ProtoMcpConfig:
79
83
  """Convert the model into a protobuf MCP config."""
@@ -117,6 +121,7 @@ class McpConfig(BaseModel):
117
121
  McpConfigConnectionToolMapping.from_proto(mapping)
118
122
  for mapping in proto_config.connection_tool_mappings
119
123
  ],
124
+ mcp_server_url=proto_config.mcp_server_url or None,
120
125
  )
121
126
 
122
127
  def to_dict(self) -> dict:
@@ -129,6 +134,7 @@ class McpConfig(BaseModel):
129
134
  "connection_tool_mappings": [
130
135
  mapping.model_dump() for mapping in self.connection_tool_mappings
131
136
  ],
137
+ "mcp_server_url": self.mcp_server_url,
132
138
  }
133
139
 
134
140
  class Config:
@@ -0,0 +1,62 @@
1
+ from typing import Optional
2
+
3
+ from pydantic import BaseModel, Field
4
+
5
+ from scalekit.v1.mcp.mcp_pb2 import McpConnectionAuthState as ProtoMcpConnectionAuthState
6
+
7
+
8
+ class McpConnectionAuthState(BaseModel):
9
+ """Authentication status for a single connection within an MCP config.
10
+
11
+ Returned by ``list_mcp_connected_accounts`` to show whether each connection
12
+ backing an MCP configuration is authorised for a given user identifier.
13
+
14
+ Attributes:
15
+ connection_id: Internal Scalekit identifier for the connection.
16
+ connection_name: Slug name of the connection, e.g. ``"github"``.
17
+ provider: OAuth/API-key provider backing the connection, e.g. ``"github"``.
18
+ connected_account_id: Scalekit identifier for the user's connected account,
19
+ if one exists.
20
+ connected_account_status: Current authorisation status of the connected
21
+ account. Common values: ``"active"``, ``"expired"``, ``"disconnected"``.
22
+ authentication_link: One-time URL the end-user can open to authorise or
23
+ re-authorise the connection. Only populated when ``include_auth_link``
24
+ was ``True`` in the request and the account is not currently active.
25
+ """
26
+
27
+ connection_id: Optional[str] = Field(None, description="Internal connection identifier")
28
+ connection_name: Optional[str] = Field(None, description="Slug name of the connection")
29
+ provider: Optional[str] = Field(None, description="Provider backing the connection")
30
+ connected_account_id: Optional[str] = Field(None, description="Scalekit connected account ID")
31
+ connected_account_status: Optional[str] = Field(
32
+ None,
33
+ description="Authorisation status: 'active', 'expired', 'disconnected'",
34
+ )
35
+ authentication_link: Optional[str] = Field(
36
+ None,
37
+ description="One-time auth URL; only present when include_auth_link=True and account is not active",
38
+ )
39
+
40
+ @classmethod
41
+ def from_proto(cls, proto_state: ProtoMcpConnectionAuthState) -> "McpConnectionAuthState":
42
+ return cls(
43
+ connection_id=proto_state.connection_id or None,
44
+ connection_name=proto_state.connection_name or None,
45
+ provider=proto_state.provider or None,
46
+ connected_account_id=proto_state.connected_account_id or None,
47
+ connected_account_status=proto_state.connected_account_status or None,
48
+ authentication_link=proto_state.authentication_link or None,
49
+ )
50
+
51
+ def to_dict(self) -> dict:
52
+ return {
53
+ "connection_id": self.connection_id,
54
+ "connection_name": self.connection_name,
55
+ "provider": self.provider,
56
+ "connected_account_id": self.connected_account_id,
57
+ "connected_account_status": self.connected_account_status,
58
+ "authentication_link": self.authentication_link,
59
+ }
60
+
61
+ class Config:
62
+ validate_assignment = True
@@ -5,7 +5,8 @@ from scalekit.v1.connected_accounts.connected_accounts_pb2 import (
5
5
  AuthorizationDetails,
6
6
  OauthToken,
7
7
  StaticAuth,
8
- GoogleDWDAuth
8
+ GoogleDWDAuth,
9
+ TrustedIDPAuth
9
10
  )
10
11
  from google.protobuf import struct_pb2
11
12
 
@@ -55,7 +56,19 @@ class CreateConnectedAccountRequest(BaseModel):
55
56
  raise ValueError("authorization_details.google_dwd.subject is required")
56
57
  google_dwd = GoogleDWDAuth(subject=subject)
57
58
  auth_details = AuthorizationDetails(google_dwd=google_dwd)
58
-
59
+
60
+ elif self.authorization_details and "trusted_idp" in self.authorization_details:
61
+ idp_data = self.authorization_details["trusted_idp"]
62
+ if not isinstance(idp_data, dict):
63
+ raise ValueError("authorization_details.trusted_idp must be an object")
64
+ trusted_idp = TrustedIDPAuth(
65
+ db_user=idp_data.get("db_user", ""),
66
+ access_key_id=idp_data.get("access_key_id", ""),
67
+ secret_access_key=idp_data.get("secret_access_key", ""),
68
+ session_token=idp_data.get("session_token", ""),
69
+ )
70
+ auth_details = AuthorizationDetails(trusted_idp=trusted_idp)
71
+
59
72
  # Handle api_config if provided
60
73
  api_config_struct = None
61
74
  if self.api_config:
@@ -5,7 +5,8 @@ from scalekit.v1.connected_accounts.connected_accounts_pb2 import (
5
5
  AuthorizationDetails,
6
6
  OauthToken,
7
7
  StaticAuth,
8
- GoogleDWDAuth
8
+ GoogleDWDAuth,
9
+ TrustedIDPAuth
9
10
  )
10
11
  from google.protobuf import struct_pb2
11
12
 
@@ -57,6 +58,18 @@ class UpdateConnectedAccountRequest(BaseModel):
57
58
  google_dwd = GoogleDWDAuth(subject=subject)
58
59
  auth_details = AuthorizationDetails(google_dwd=google_dwd)
59
60
 
61
+ elif self.authorization_details and "trusted_idp" in self.authorization_details:
62
+ idp_data = self.authorization_details["trusted_idp"]
63
+ if not isinstance(idp_data, dict):
64
+ raise ValueError("authorization_details.trusted_idp must be an object")
65
+ trusted_idp = TrustedIDPAuth(
66
+ db_user=idp_data.get("db_user", ""),
67
+ access_key_id=idp_data.get("access_key_id", ""),
68
+ secret_access_key=idp_data.get("secret_access_key", ""),
69
+ session_token=idp_data.get("session_token", ""),
70
+ )
71
+ auth_details = AuthorizationDetails(trusted_idp=trusted_idp)
72
+
60
73
  # Handle api_config if provided
61
74
  api_config_struct = None
62
75
  if self.api_config:
@@ -0,0 +1,52 @@
1
+ from datetime import datetime
2
+ from typing import Optional
3
+
4
+ from pydantic import BaseModel, Field
5
+
6
+
7
+ class CreateMcpSessionTokenResponse(BaseModel):
8
+ """Response from ``create_session_token``.
9
+
10
+ A short-lived session token that an end-user or service can use to
11
+ authenticate against an MCP server endpoint.
12
+
13
+ Attributes:
14
+ token: Opaque bearer token string. Pass this as the ``Authorization``
15
+ header value (``Bearer <token>``) when calling the MCP server URL.
16
+ expires_at: UTC datetime at which the token becomes invalid. Your
17
+ application should refresh before this time.
18
+
19
+ Example::
20
+
21
+ from datetime import timedelta
22
+
23
+ resp = client.actions.mcp.create_session_token(
24
+ mcp_config_id="cfg_abc123",
25
+ identifier="user@example.com",
26
+ expiry=timedelta(hours=8),
27
+ )
28
+ print(resp.token) # "eyJ..."
29
+ print(resp.expires_at) # 2026-06-03 20:00:00
30
+ """
31
+
32
+ token: Optional[str] = Field(None, description="Bearer token for MCP server authentication")
33
+ expires_at: Optional[datetime] = Field(None, description="UTC expiry time for the token")
34
+
35
+ @classmethod
36
+ def from_proto(cls, proto_response) -> "CreateMcpSessionTokenResponse":
37
+ expires_at = None
38
+ if proto_response.HasField("expires_at"):
39
+ expires_at = proto_response.expires_at.ToDatetime()
40
+ return cls(
41
+ token=proto_response.token or None,
42
+ expires_at=expires_at,
43
+ )
44
+
45
+ def to_dict(self) -> dict:
46
+ return {
47
+ "token": self.token,
48
+ "expires_at": self.expires_at.isoformat() if self.expires_at else None,
49
+ }
50
+
51
+ class Config:
52
+ validate_assignment = True
@@ -68,6 +68,15 @@ class ConnectedAccount(BaseModel):
68
68
  "token_expires_at": dwd.token_expires_at.ToDatetime() if dwd.HasField("token_expires_at") else None,
69
69
  }
70
70
  authorization_details["google_dwd"] = dwd_dict
71
+ elif which == "trusted_idp":
72
+ idp = proto_account.authorization_details.trusted_idp
73
+ authorization_details["trusted_idp"] = {
74
+ "db_user": idp.db_user,
75
+ "access_key_id": idp.access_key_id,
76
+ "secret_access_key": idp.secret_access_key,
77
+ "session_token": idp.session_token,
78
+ "expiry": idp.expiry.ToDatetime() if idp.HasField("expiry") else None,
79
+ }
71
80
 
72
81
  # Convert api_config protobuf Struct to dict
73
82
  api_config_dict = None
@@ -0,0 +1,52 @@
1
+ from typing import List
2
+
3
+ from pydantic import BaseModel, Field
4
+
5
+ from scalekit.actions.models.mcp_connection_auth_state import McpConnectionAuthState
6
+
7
+
8
+ class ListMcpConnectedAccountsResponse(BaseModel):
9
+ """Response from ``list_mcp_connected_accounts``.
10
+
11
+ Contains the per-connection authentication state for every connection
12
+ that is part of the requested MCP configuration, for a specific user
13
+ identifier.
14
+
15
+ Attributes:
16
+ connected_accounts: One entry per connection in the MCP config. Each
17
+ entry carries the connection name, provider, the user's connected
18
+ account ID/status, and optionally an auth link if the account is
19
+ not active and ``include_auth_link`` was requested.
20
+
21
+ Example::
22
+
23
+ response = client.actions.mcp.list_mcp_connected_accounts(
24
+ config_id="cfg_abc123",
25
+ identifier="user@example.com",
26
+ include_auth_link=True,
27
+ )
28
+ for account in response.connected_accounts:
29
+ if account.connected_account_status != "active":
30
+ print(f"Re-auth needed for {account.connection_name}: {account.authentication_link}")
31
+ """
32
+
33
+ connected_accounts: List[McpConnectionAuthState] = Field(
34
+ default_factory=list,
35
+ description="Auth state per connection in the MCP config",
36
+ )
37
+
38
+ @classmethod
39
+ def from_proto(cls, proto_response) -> "ListMcpConnectedAccountsResponse":
40
+ connected_accounts = [
41
+ McpConnectionAuthState.from_proto(proto_state)
42
+ for proto_state in getattr(proto_response, "connected_accounts", [])
43
+ ]
44
+ return cls(connected_accounts=connected_accounts)
45
+
46
+ def to_dict(self) -> dict:
47
+ return {
48
+ "connected_accounts": [account.to_dict() for account in self.connected_accounts],
49
+ }
50
+
51
+ class Config:
52
+ validate_assignment = True
@@ -35,6 +35,9 @@ from .models.responses.create_custom_provider_response import CreateCustomProvid
35
35
  from .models.responses.update_custom_provider_response import UpdateCustomProviderResponse
36
36
  from .models.responses.list_providers_response import ListProvidersResponse
37
37
  from .models.responses.delete_custom_provider_response import DeleteCustomProviderResponse
38
+ from .models.responses.list_mcp_connected_accounts_response import ListMcpConnectedAccountsResponse
39
+ from .models.responses.create_mcp_session_token_response import CreateMcpSessionTokenResponse
40
+ from .models.mcp_connection_auth_state import McpConnectionAuthState
38
41
 
39
42
 
40
43
  __all__ = [
@@ -82,4 +85,7 @@ __all__ = [
82
85
  'ListProvidersResponse',
83
86
  'DeleteCustomProviderResponse',
84
87
  'VerifyConnectedAccountUserResponse',
88
+ 'ListMcpConnectedAccountsResponse',
89
+ 'CreateMcpSessionTokenResponse',
90
+ 'McpConnectionAuthState',
85
91
  ]
@@ -1,4 +1,4 @@
1
- from typing import Optional
1
+ from typing import List, Optional
2
2
 
3
3
  from scalekit.core import CoreClient
4
4
  from scalekit.v1.connected_accounts.connected_accounts_pb2 import (
@@ -47,7 +47,8 @@ class ConnectedAccountsClient:
47
47
  identifier: Optional[str] = None,
48
48
  provider: Optional[str] = None,
49
49
  page_size: Optional[int] = None,
50
- page_token: Optional[str] = None
50
+ page_token: Optional[str] = None,
51
+ connection_names: Optional[List[str]] = None,
51
52
  ) -> ListConnectedAccountsResponse:
52
53
  """
53
54
  Method to list connected accounts for a user
@@ -66,21 +67,28 @@ class ConnectedAccountsClient:
66
67
  :type : ``` int ```
67
68
  :param page_token : Page token for pagination (optional)
68
69
  :type : ``` str ```
70
+ :param connection_names : Filter results to only connected accounts belonging to these
71
+ connection names (optional). Each entry is the slug name of
72
+ a connector, e.g. ``["github", "google-calendar"]``.
73
+ :type : ``` List[str] ```
69
74
 
70
75
  :returns:
71
76
  List Connected Accounts Response
72
77
  """
78
+ request = ListConnectedAccountsRequest(
79
+ organization_id=organization_id,
80
+ user_id=user_id,
81
+ connector=connector,
82
+ identifier=identifier,
83
+ provider=provider,
84
+ page_size=page_size,
85
+ page_token=page_token,
86
+ )
87
+ if connection_names:
88
+ request.connection_names.extend(connection_names)
73
89
  return self.core_client.grpc_exec(
74
90
  self.connected_accounts_service.ListConnectedAccounts.with_call,
75
- ListConnectedAccountsRequest(
76
- organization_id=organization_id,
77
- user_id=user_id,
78
- connector=connector,
79
- identifier=identifier,
80
- provider=provider,
81
- page_size=page_size,
82
- page_token=page_token
83
- ),
91
+ request,
84
92
  )
85
93
 
86
94
  def create_connected_account(