universal-mcp-applications 0.1.1__py3-none-any.whl → 0.1.3__py3-none-any.whl

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 (103) hide show
  1. universal_mcp/applications/airtable/app.py +1 -0
  2. universal_mcp/applications/apollo/app.py +1 -0
  3. universal_mcp/applications/{aws-s3 → aws_s3}/app.py +4 -5
  4. universal_mcp/applications/bill/app.py +3 -3
  5. universal_mcp/applications/box/app.py +2 -6
  6. universal_mcp/applications/braze/app.py +2 -6
  7. universal_mcp/applications/cal_com_v2/__init__.py +1 -0
  8. universal_mcp/applications/{cal-com-v2 → cal_com_v2}/app.py +138 -182
  9. universal_mcp/applications/clickup/app.py +2 -2
  10. universal_mcp/applications/confluence/app.py +1 -0
  11. universal_mcp/applications/contentful/app.py +8 -19
  12. universal_mcp/applications/digitalocean/app.py +9 -27
  13. universal_mcp/applications/{domain-checker → domain_checker}/app.py +2 -1
  14. universal_mcp/applications/elevenlabs/app.py +98 -3188
  15. universal_mcp/applications/falai/app.py +1 -0
  16. universal_mcp/applications/file_system/__init__.py +1 -0
  17. universal_mcp/applications/file_system/app.py +96 -0
  18. universal_mcp/applications/fireflies/app.py +4 -3
  19. universal_mcp/applications/fpl/app.py +1 -0
  20. universal_mcp/applications/fpl/utils/fixtures.py +1 -1
  21. universal_mcp/applications/fpl/utils/helper.py +1 -1
  22. universal_mcp/applications/fpl/utils/position_utils.py +0 -1
  23. universal_mcp/applications/{ghost-content → ghost_content}/app.py +2 -1
  24. universal_mcp/applications/github/app.py +4 -3
  25. universal_mcp/applications/{google-calendar → google_calendar}/app.py +2 -1
  26. universal_mcp/applications/{google-docs → google_docs}/app.py +1 -1
  27. universal_mcp/applications/{google-drive → google_drive}/app.py +2 -1
  28. universal_mcp/applications/google_gemini/app.py +183 -0
  29. universal_mcp/applications/{google-mail → google_mail}/app.py +2 -1
  30. universal_mcp/applications/{google-searchconsole → google_searchconsole}/app.py +1 -1
  31. universal_mcp/applications/{google-sheet → google_sheet}/app.py +3 -2
  32. universal_mcp/applications/google_sheet/helper.py +385 -0
  33. universal_mcp/applications/hashnode/app.py +2 -1
  34. universal_mcp/applications/{http-tools → http_tools}/app.py +2 -1
  35. universal_mcp/applications/hubspot/app.py +16 -2
  36. universal_mcp/applications/jira/app.py +7 -18
  37. universal_mcp/applications/markitdown/app.py +2 -3
  38. universal_mcp/applications/{ms-teams → ms_teams}/app.py +1 -1
  39. universal_mcp/applications/openai/app.py +2 -3
  40. universal_mcp/applications/outlook/app.py +1 -3
  41. universal_mcp/applications/pipedrive/app.py +2 -6
  42. universal_mcp/applications/reddit/app.py +1 -0
  43. universal_mcp/applications/replicate/app.py +3 -3
  44. universal_mcp/applications/resend/app.py +1 -2
  45. universal_mcp/applications/rocketlane/app.py +1 -0
  46. universal_mcp/applications/semrush/app.py +478 -1467
  47. universal_mcp/applications/sentry/README.md +20 -20
  48. universal_mcp/applications/sentry/app.py +40 -40
  49. universal_mcp/applications/serpapi/app.py +2 -2
  50. universal_mcp/applications/sharepoint/app.py +2 -1
  51. universal_mcp/applications/shopify/app.py +1 -0
  52. universal_mcp/applications/slack/app.py +3 -3
  53. universal_mcp/applications/trello/app.py +9 -27
  54. universal_mcp/applications/twilio/__init__.py +1 -0
  55. universal_mcp/applications/{twillo → twilio}/app.py +2 -2
  56. universal_mcp/applications/twitter/README.md +1 -1
  57. universal_mcp/applications/twitter/api_segments/dm_conversations_api.py +2 -2
  58. universal_mcp/applications/twitter/api_segments/lists_api.py +1 -1
  59. universal_mcp/applications/unipile/app.py +5 -1
  60. universal_mcp/applications/whatsapp/app.py +18 -17
  61. universal_mcp/applications/whatsapp/audio.py +110 -0
  62. universal_mcp/applications/whatsapp/whatsapp.py +398 -0
  63. universal_mcp/applications/{whatsapp-business → whatsapp_business}/app.py +1 -1
  64. universal_mcp/applications/youtube/app.py +195 -191
  65. universal_mcp/applications/zenquotes/app.py +1 -1
  66. {universal_mcp_applications-0.1.1.dist-info → universal_mcp_applications-0.1.3.dist-info}/METADATA +4 -2
  67. {universal_mcp_applications-0.1.1.dist-info → universal_mcp_applications-0.1.3.dist-info}/RECORD +97 -95
  68. universal_mcp/applications/cal-com-v2/__init__.py +0 -1
  69. universal_mcp/applications/google-ads/__init__.py +0 -1
  70. universal_mcp/applications/google-ads/app.py +0 -23
  71. universal_mcp/applications/google-gemini/app.py +0 -663
  72. universal_mcp/applications/twillo/README.md +0 -0
  73. universal_mcp/applications/twillo/__init__.py +0 -1
  74. /universal_mcp/applications/{aws-s3 → aws_s3}/README.md +0 -0
  75. /universal_mcp/applications/{aws-s3 → aws_s3}/__init__.py +0 -0
  76. /universal_mcp/applications/{cal-com-v2 → cal_com_v2}/README.md +0 -0
  77. /universal_mcp/applications/{domain-checker → domain_checker}/README.md +0 -0
  78. /universal_mcp/applications/{domain-checker → domain_checker}/__init__.py +0 -0
  79. /universal_mcp/applications/{ghost-content → ghost_content}/README.md +0 -0
  80. /universal_mcp/applications/{ghost-content → ghost_content}/__init__.py +0 -0
  81. /universal_mcp/applications/{google-calendar → google_calendar}/README.md +0 -0
  82. /universal_mcp/applications/{google-calendar → google_calendar}/__init__.py +0 -0
  83. /universal_mcp/applications/{google-docs → google_docs}/README.md +0 -0
  84. /universal_mcp/applications/{google-docs → google_docs}/__init__.py +0 -0
  85. /universal_mcp/applications/{google-drive → google_drive}/README.md +0 -0
  86. /universal_mcp/applications/{google-drive → google_drive}/__init__.py +0 -0
  87. /universal_mcp/applications/{google-gemini → google_gemini}/README.md +0 -0
  88. /universal_mcp/applications/{google-gemini → google_gemini}/__init__.py +0 -0
  89. /universal_mcp/applications/{google-mail → google_mail}/README.md +0 -0
  90. /universal_mcp/applications/{google-mail → google_mail}/__init__.py +0 -0
  91. /universal_mcp/applications/{google-searchconsole → google_searchconsole}/README.md +0 -0
  92. /universal_mcp/applications/{google-searchconsole → google_searchconsole}/__init__.py +0 -0
  93. /universal_mcp/applications/{google-sheet → google_sheet}/README.md +0 -0
  94. /universal_mcp/applications/{google-sheet → google_sheet}/__init__.py +0 -0
  95. /universal_mcp/applications/{http-tools → http_tools}/README.md +0 -0
  96. /universal_mcp/applications/{http-tools → http_tools}/__init__.py +0 -0
  97. /universal_mcp/applications/{ms-teams → ms_teams}/README.md +0 -0
  98. /universal_mcp/applications/{ms-teams → ms_teams}/__init__.py +0 -0
  99. /universal_mcp/applications/{google-ads → twilio}/README.md +0 -0
  100. /universal_mcp/applications/{whatsapp-business → whatsapp_business}/README.md +0 -0
  101. /universal_mcp/applications/{whatsapp-business → whatsapp_business}/__init__.py +0 -0
  102. {universal_mcp_applications-0.1.1.dist-info → universal_mcp_applications-0.1.3.dist-info}/WHEEL +0 -0
  103. {universal_mcp_applications-0.1.1.dist-info → universal_mcp_applications-0.1.3.dist-info}/licenses/LICENSE +0 -0
@@ -1901,7 +1901,7 @@ class ClickupApp(APIApplication):
1901
1901
  response.raise_for_status()
1902
1902
  return response.json()
1903
1903
 
1904
- def lists_update_list_info_due_date_priority_assignee_color(
1904
+ def lists_update_list(
1905
1905
  self,
1906
1906
  list_id,
1907
1907
  name,
@@ -4933,7 +4933,7 @@ class ClickupApp(APIApplication):
4933
4933
  self.lists_get_folderless,
4934
4934
  self.lists_create_folderless_list,
4935
4935
  self.lists_get_list_details,
4936
- self.lists_update_list_info_due_date_priority_assignee_color,
4936
+ self.lists_update_list,
4937
4937
  self.lists_remove_list,
4938
4938
  self.lists_add_task_to_list,
4939
4939
  self.lists_remove_task_from_list,
@@ -1,6 +1,7 @@
1
1
  from typing import Any
2
2
 
3
3
  import httpx
4
+
4
5
  from universal_mcp.applications.application import APIApplication
5
6
  from universal_mcp.integrations import Integration
6
7
 
@@ -2,7 +2,8 @@ from collections.abc import Callable
2
2
  from typing import Any
3
3
 
4
4
  from loguru import logger
5
- from universal_mcp.applications import GraphQLApplication
5
+
6
+ from universal_mcp.applications.application import GraphQLApplication
6
7
  from universal_mcp.exceptions import NotAuthorizedError
7
8
  from universal_mcp.integrations import Integration
8
9
 
@@ -14,10 +15,10 @@ class ContentfulApp(GraphQLApplication):
14
15
  **kwargs: Any,
15
16
  ) -> None:
16
17
  self.space_id: str | None = None
17
- self.environment_id: str = "master" # Default Contentful environment
18
+ self.environment_id: str = "master"
18
19
  self._access_token: str | None = None
19
- self._is_eu_customer: bool = False # Default data center
20
- self._credentials_loaded: bool = False # Flag for lazy loading
20
+ self._is_eu_customer: bool = False
21
+ self._credentials_loaded: bool = False
21
22
  default_base_url = "https://graphql.contentful.com"
22
23
 
23
24
  super().__init__(
@@ -63,9 +64,7 @@ class ContentfulApp(GraphQLApplication):
63
64
  self._credentials_loaded = True # Prevent retries
64
65
  return False
65
66
 
66
- # --- Extract Credentials ---
67
67
  self.space_id = credentials.get("space_id")
68
- # Prefer access_token, fallback to api_key for naming flexibility
69
68
  self._access_token = credentials.get("access_token") or credentials.get(
70
69
  "api_key"
71
70
  )
@@ -76,7 +75,6 @@ class ContentfulApp(GraphQLApplication):
76
75
  "is_eu_customer", False
77
76
  ) # Use default if not specified
78
77
 
79
- # --- Validate Required Credentials ---
80
78
  missing_creds = []
81
79
  if not self.space_id:
82
80
  missing_creds.append("'space_id'")
@@ -91,20 +89,13 @@ class ContentfulApp(GraphQLApplication):
91
89
  self._credentials_loaded = True # Prevent retries
92
90
  return False
93
91
 
94
- # --- Construct Final Base URL ---
95
92
  contentful_api_domain = (
96
93
  "graphql.eu.contentful.com"
97
94
  if self._is_eu_customer
98
95
  else "graphql.contentful.com"
99
96
  )
100
- # Update self.base_url which was initially set to the default by super().__init__
101
97
  self.base_url = f"https://{contentful_api_domain}/content/v1/spaces/{self.space_id}/environments/{self.environment_id}"
102
98
 
103
- # --- Force GraphQL Client Re-initialization ---
104
- # Reset the internal client instance of the base class.
105
- # The next time self.client property is accessed (e.g., in self.query),
106
- # it will be recreated using the new self.base_url and fresh headers
107
- # obtained via self._get_headers() (which will now find self._access_token).
108
99
  self._client = None
109
100
 
110
101
  logger.info(
@@ -115,11 +106,6 @@ class ContentfulApp(GraphQLApplication):
115
106
  self._credentials_loaded = True
116
107
  return True
117
108
 
118
- # We rely on the base GraphQLApplication._get_headers() which looks for
119
- # 'access_token' or 'api_key' and creates the Bearer token header.
120
- # No override needed here as long as _load_credentials_and_construct_url
121
- # correctly populates self._access_token before the client is used.
122
-
123
109
  @staticmethod
124
110
  def _to_camel_case(s: str) -> str:
125
111
  """Converts a string to camelCase based on Contentful's typical ID to GraphQL name conversion."""
@@ -340,6 +326,9 @@ class ContentfulApp(GraphQLApplication):
340
326
 
341
327
  Returns:
342
328
  The result of the query, or an error dictionary.
329
+
330
+ Tags:
331
+ important
343
332
  """
344
333
  if not self._ensure_loaded():
345
334
  return {
@@ -248,9 +248,7 @@ class DigitaloceanApp(APIApplication):
248
248
  except ValueError:
249
249
  return None
250
250
 
251
- def ssh_keys_update(
252
- self, ssh_key_identifier: str, name: str | None = None
253
- ) -> Any:
251
+ def ssh_keys_update(self, ssh_key_identifier: str, name: str | None = None) -> Any:
254
252
  """
255
253
  Update an SSH Key's Name
256
254
 
@@ -331,9 +329,7 @@ class DigitaloceanApp(APIApplication):
331
329
  except ValueError:
332
330
  return None
333
331
 
334
- def actions_list(
335
- self, per_page: int | None = None, page: int | None = None
336
- ) -> Any:
332
+ def actions_list(self, per_page: int | None = None, page: int | None = None) -> Any:
337
333
  """
338
334
  List All Actions
339
335
 
@@ -5055,9 +5051,7 @@ class DigitaloceanApp(APIApplication):
5055
5051
  except ValueError:
5056
5052
  return None
5057
5053
 
5058
- def domains_list(
5059
- self, per_page: int | None = None, page: int | None = None
5060
- ) -> Any:
5054
+ def domains_list(self, per_page: int | None = None, page: int | None = None) -> Any:
5061
5055
  """
5062
5056
  List All Domains
5063
5057
 
@@ -7266,9 +7260,7 @@ class DigitaloceanApp(APIApplication):
7266
7260
  except ValueError:
7267
7261
  return None
7268
7262
 
7269
- def firewalls_delete_tags(
7270
- self, firewall_id: str, tags: Any | None = None
7271
- ) -> Any:
7263
+ def firewalls_delete_tags(self, firewall_id: str, tags: Any | None = None) -> Any:
7272
7264
  """
7273
7265
  Remove Tags from a Firewall
7274
7266
 
@@ -9618,9 +9610,7 @@ class DigitaloceanApp(APIApplication):
9618
9610
  except ValueError:
9619
9611
  return None
9620
9612
 
9621
- def kubernetes_remove_registry(
9622
- self, cluster_uuids: list[str] | None = None
9623
- ) -> Any:
9613
+ def kubernetes_remove_registry(self, cluster_uuids: list[str] | None = None) -> Any:
9624
9614
  """
9625
9615
  Remove Container Registry from Kubernetes Clusters
9626
9616
 
@@ -14015,9 +14005,7 @@ class DigitaloceanApp(APIApplication):
14015
14005
  except ValueError:
14016
14006
  return None
14017
14007
 
14018
- def regions_list(
14019
- self, per_page: int | None = None, page: int | None = None
14020
- ) -> Any:
14008
+ def regions_list(self, per_page: int | None = None, page: int | None = None) -> Any:
14021
14009
  """
14022
14010
  List All Data Center Regions
14023
14011
 
@@ -15314,9 +15302,7 @@ class DigitaloceanApp(APIApplication):
15314
15302
  except ValueError:
15315
15303
  return None
15316
15304
 
15317
- def sizes_list(
15318
- self, per_page: int | None = None, page: int | None = None
15319
- ) -> Any:
15305
+ def sizes_list(self, per_page: int | None = None, page: int | None = None) -> Any:
15320
15306
  """
15321
15307
  List All Droplet Sizes
15322
15308
 
@@ -15764,9 +15750,7 @@ class DigitaloceanApp(APIApplication):
15764
15750
  except ValueError:
15765
15751
  return None
15766
15752
 
15767
- def tags_list(
15768
- self, per_page: int | None = None, page: int | None = None
15769
- ) -> Any:
15753
+ def tags_list(self, per_page: int | None = None, page: int | None = None) -> Any:
15770
15754
  """
15771
15755
  List All Tags
15772
15756
 
@@ -16622,9 +16606,7 @@ class DigitaloceanApp(APIApplication):
16622
16606
  except ValueError:
16623
16607
  return None
16624
16608
 
16625
- def vpcs_list(
16626
- self, per_page: int | None = None, page: int | None = None
16627
- ) -> Any:
16609
+ def vpcs_list(self, per_page: int | None = None, page: int | None = None) -> Any:
16628
16610
  """
16629
16611
  List All VPCs
16630
16612
 
@@ -4,6 +4,7 @@ from typing import Any
4
4
 
5
5
  import dns.resolver
6
6
  import requests
7
+
7
8
  from universal_mcp.applications.application import APIApplication
8
9
  from universal_mcp.integrations import Integration
9
10
 
@@ -45,7 +46,7 @@ class DomainCheckerApp(APIApplication):
45
46
  """
46
47
 
47
48
  def __init__(self, integration: Integration = None, **kwargs) -> None:
48
- super().__init__(name="domain-checker", integration=integration, **kwargs)
49
+ super().__init__(name="domain_checker", integration=integration, **kwargs)
49
50
 
50
51
  async def get_rdap_data(self, domain: str) -> dict[str, Any] | None:
51
52
  """Get RDAP data for a domain"""