universal-mcp-applications 0.1.21__py3-none-any.whl → 0.1.22__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.

Potentially problematic release.


This version of universal-mcp-applications might be problematic. Click here for more details.

Files changed (78) hide show
  1. universal_mcp/applications/BEST_PRACTICES.md +166 -0
  2. universal_mcp/applications/airtable/app.py +0 -1
  3. universal_mcp/applications/apollo/app.py +0 -1
  4. universal_mcp/applications/aws_s3/app.py +40 -39
  5. universal_mcp/applications/browser_use/README.md +1 -0
  6. universal_mcp/applications/browser_use/__init__.py +0 -0
  7. universal_mcp/applications/browser_use/app.py +76 -0
  8. universal_mcp/applications/calendly/app.py +125 -125
  9. universal_mcp/applications/canva/app.py +95 -99
  10. universal_mcp/applications/confluence/app.py +0 -1
  11. universal_mcp/applications/contentful/app.py +4 -5
  12. universal_mcp/applications/domain_checker/app.py +11 -15
  13. universal_mcp/applications/e2b/app.py +4 -4
  14. universal_mcp/applications/elevenlabs/app.py +18 -15
  15. universal_mcp/applications/exa/app.py +17 -17
  16. universal_mcp/applications/falai/app.py +28 -29
  17. universal_mcp/applications/file_system/app.py +9 -9
  18. universal_mcp/applications/firecrawl/app.py +36 -36
  19. universal_mcp/applications/fireflies/app.py +55 -56
  20. universal_mcp/applications/fpl/app.py +49 -50
  21. universal_mcp/applications/ghost_content/app.py +0 -1
  22. universal_mcp/applications/github/app.py +41 -43
  23. universal_mcp/applications/google_calendar/app.py +40 -39
  24. universal_mcp/applications/google_docs/app.py +56 -56
  25. universal_mcp/applications/google_drive/app.py +212 -215
  26. universal_mcp/applications/google_gemini/app.py +1 -5
  27. universal_mcp/applications/google_mail/app.py +91 -90
  28. universal_mcp/applications/google_searchconsole/app.py +29 -29
  29. universal_mcp/applications/google_sheet/app.py +115 -115
  30. universal_mcp/applications/hashnode/README.md +6 -3
  31. universal_mcp/applications/hashnode/app.py +174 -25
  32. universal_mcp/applications/http_tools/app.py +10 -11
  33. universal_mcp/applications/hubspot/__init__.py +1 -1
  34. universal_mcp/applications/hubspot/api_segments/api_segment_base.py +36 -7
  35. universal_mcp/applications/hubspot/api_segments/crm_api.py +368 -368
  36. universal_mcp/applications/hubspot/api_segments/marketing_api.py +115 -115
  37. universal_mcp/applications/hubspot/app.py +131 -72
  38. universal_mcp/applications/jira/app.py +0 -1
  39. universal_mcp/applications/linkedin/app.py +20 -20
  40. universal_mcp/applications/markitdown/app.py +10 -5
  41. universal_mcp/applications/ms_teams/app.py +123 -123
  42. universal_mcp/applications/openai/app.py +40 -39
  43. universal_mcp/applications/outlook/app.py +32 -32
  44. universal_mcp/applications/perplexity/app.py +4 -4
  45. universal_mcp/applications/reddit/app.py +69 -70
  46. universal_mcp/applications/resend/app.py +116 -117
  47. universal_mcp/applications/rocketlane/app.py +0 -1
  48. universal_mcp/applications/scraper/__init__.py +1 -1
  49. universal_mcp/applications/scraper/app.py +80 -81
  50. universal_mcp/applications/serpapi/app.py +14 -14
  51. universal_mcp/applications/sharepoint/app.py +19 -20
  52. universal_mcp/applications/shopify/app.py +0 -1
  53. universal_mcp/applications/slack/app.py +48 -48
  54. universal_mcp/applications/tavily/app.py +4 -4
  55. universal_mcp/applications/twitter/api_segments/compliance_api.py +13 -15
  56. universal_mcp/applications/twitter/api_segments/dm_conversations_api.py +20 -20
  57. universal_mcp/applications/twitter/api_segments/dm_events_api.py +12 -12
  58. universal_mcp/applications/twitter/api_segments/likes_api.py +12 -12
  59. universal_mcp/applications/twitter/api_segments/lists_api.py +37 -39
  60. universal_mcp/applications/twitter/api_segments/spaces_api.py +24 -24
  61. universal_mcp/applications/twitter/api_segments/trends_api.py +4 -4
  62. universal_mcp/applications/twitter/api_segments/tweets_api.py +105 -105
  63. universal_mcp/applications/twitter/api_segments/usage_api.py +4 -4
  64. universal_mcp/applications/twitter/api_segments/users_api.py +136 -136
  65. universal_mcp/applications/twitter/app.py +6 -2
  66. universal_mcp/applications/unipile/app.py +90 -97
  67. universal_mcp/applications/whatsapp/app.py +53 -54
  68. universal_mcp/applications/whatsapp/audio.py +39 -35
  69. universal_mcp/applications/whatsapp/whatsapp.py +176 -154
  70. universal_mcp/applications/whatsapp_business/app.py +92 -92
  71. universal_mcp/applications/yahoo_finance/app.py +105 -63
  72. universal_mcp/applications/youtube/app.py +193 -196
  73. universal_mcp/applications/zenquotes/__init__.py +2 -0
  74. universal_mcp/applications/zenquotes/app.py +3 -3
  75. {universal_mcp_applications-0.1.21.dist-info → universal_mcp_applications-0.1.22.dist-info}/METADATA +2 -1
  76. {universal_mcp_applications-0.1.21.dist-info → universal_mcp_applications-0.1.22.dist-info}/RECORD +78 -74
  77. {universal_mcp_applications-0.1.21.dist-info → universal_mcp_applications-0.1.22.dist-info}/WHEEL +0 -0
  78. {universal_mcp_applications-0.1.21.dist-info → universal_mcp_applications-0.1.22.dist-info}/licenses/LICENSE +0 -0
@@ -1,19 +1,19 @@
1
- from typing import Any, List, Optional
1
+ from typing import Any
2
+
2
3
  from .api_segment_base import APISegmentBase
3
4
 
4
5
 
5
6
  class MarketingApi(APISegmentBase):
6
-
7
7
  def __init__(self, main_app_client: Any):
8
8
  super().__init__(main_app_client)
9
9
 
10
10
  def get_marketing_campaigns(
11
11
  self,
12
- sort: Optional[str] = None,
13
- after: Optional[str] = None,
14
- limit: Optional[int] = None,
15
- name: Optional[str] = None,
16
- properties: Optional[List[str]] = None,
12
+ sort: str | None = None,
13
+ after: str | None = None,
14
+ limit: int | None = None,
15
+ name: str | None = None,
16
+ properties: list[str] | None = None,
17
17
  ) -> dict[str, Any]:
18
18
  """
19
19
 
@@ -84,10 +84,10 @@ class MarketingApi(APISegmentBase):
84
84
 
85
85
  def batch_read_campaigns_post(
86
86
  self,
87
- inputs: List[dict[str, Any]],
88
- startDate: Optional[str] = None,
89
- endDate: Optional[str] = None,
90
- properties: Optional[List[str]] = None,
87
+ inputs: list[dict[str, Any]],
88
+ startDate: str | None = None,
89
+ endDate: str | None = None,
90
+ properties: list[str] | None = None,
91
91
  ) -> dict[str, Any]:
92
92
  """
93
93
 
@@ -131,7 +131,7 @@ class MarketingApi(APISegmentBase):
131
131
  )
132
132
  return self._handle_response(response)
133
133
 
134
- def update_campaigns_batch(self, inputs: List[dict[str, Any]]) -> dict[str, Any]:
134
+ def update_campaigns_batch(self, inputs: list[dict[str, Any]]) -> dict[str, Any]:
135
135
  """
136
136
 
137
137
  Updates multiple marketing campaigns in a batch using the POST method, requiring a JSON body and authentication via OAuth2 or private apps with "marketing.campaigns.read" permissions.
@@ -166,8 +166,8 @@ class MarketingApi(APISegmentBase):
166
166
  def get_campaign_metrics(
167
167
  self,
168
168
  campaignGuid: str,
169
- startDate: Optional[str] = None,
170
- endDate: Optional[str] = None,
169
+ startDate: str | None = None,
170
+ endDate: str | None = None,
171
171
  ) -> dict[str, Any]:
172
172
  """
173
173
 
@@ -202,10 +202,10 @@ class MarketingApi(APISegmentBase):
202
202
  self,
203
203
  campaignGuid: str,
204
204
  assetType: str,
205
- after: Optional[str] = None,
206
- limit: Optional[str] = None,
207
- startDate: Optional[str] = None,
208
- endDate: Optional[str] = None,
205
+ after: str | None = None,
206
+ limit: str | None = None,
207
+ startDate: str | None = None,
208
+ endDate: str | None = None,
209
209
  ) -> dict[str, Any]:
210
210
  """
211
211
 
@@ -246,7 +246,7 @@ class MarketingApi(APISegmentBase):
246
246
  response = self._get(url, params=query_params)
247
247
  return self._handle_response(response)
248
248
 
249
- def archive_campaigns_batch(self, inputs: List[dict[str, Any]]) -> Any:
249
+ def archive_campaigns_batch(self, inputs: list[dict[str, Any]]) -> Any:
250
250
  """
251
251
 
252
252
  Archives a batch of marketing campaigns using the HubSpot API, requiring a JSON request body and returning a 204 status upon successful completion.
@@ -351,9 +351,9 @@ class MarketingApi(APISegmentBase):
351
351
  def get_campaign_revenue_report(
352
352
  self,
353
353
  campaignGuid: str,
354
- attributionModel: Optional[str] = None,
355
- startDate: Optional[str] = None,
356
- endDate: Optional[str] = None,
354
+ attributionModel: str | None = None,
355
+ startDate: str | None = None,
356
+ endDate: str | None = None,
357
357
  ) -> dict[str, Any]:
358
358
  """
359
359
 
@@ -389,7 +389,7 @@ class MarketingApi(APISegmentBase):
389
389
  response = self._get(url, params=query_params)
390
390
  return self._handle_response(response)
391
391
 
392
- def create_campaigns_batch(self, inputs: List[dict[str, Any]]) -> dict[str, Any]:
392
+ def create_campaigns_batch(self, inputs: list[dict[str, Any]]) -> dict[str, Any]:
393
393
  """
394
394
 
395
395
  Creates multiple marketing campaigns in a single operation using the "POST" method, accepting a JSON body with campaign details and returning a status message upon successful creation.
@@ -448,9 +448,9 @@ class MarketingApi(APISegmentBase):
448
448
  def get_campaign_by_guid(
449
449
  self,
450
450
  campaignGuid: str,
451
- startDate: Optional[str] = None,
452
- endDate: Optional[str] = None,
453
- properties: Optional[List[str]] = None,
451
+ startDate: str | None = None,
452
+ endDate: str | None = None,
453
+ properties: list[str] | None = None,
454
454
  ) -> dict[str, Any]:
455
455
  """
456
456
 
@@ -546,10 +546,10 @@ class MarketingApi(APISegmentBase):
546
546
  self,
547
547
  campaignGuid: str,
548
548
  contactType: str,
549
- startDate: Optional[str] = None,
550
- endDate: Optional[str] = None,
551
- limit: Optional[int] = None,
552
- after: Optional[str] = None,
549
+ startDate: str | None = None,
550
+ endDate: str | None = None,
551
+ limit: int | None = None,
552
+ after: str | None = None,
553
553
  ) -> dict[str, Any]:
554
554
  """
555
555
 
@@ -592,10 +592,10 @@ class MarketingApi(APISegmentBase):
592
592
 
593
593
  def list_email_statistics(
594
594
  self,
595
- startTimestamp: Optional[str] = None,
596
- endTimestamp: Optional[str] = None,
597
- emailIds: Optional[List[int]] = None,
598
- property: Optional[str] = None,
595
+ startTimestamp: str | None = None,
596
+ endTimestamp: str | None = None,
597
+ emailIds: list[int] | None = None,
598
+ property: str | None = None,
599
599
  ) -> dict[str, Any]:
600
600
  """
601
601
 
@@ -667,10 +667,10 @@ class MarketingApi(APISegmentBase):
667
667
 
668
668
  def get_email_statistics_histogram(
669
669
  self,
670
- interval: Optional[str] = None,
671
- startTimestamp: Optional[str] = None,
672
- endTimestamp: Optional[str] = None,
673
- emailIds: Optional[List[int]] = None,
670
+ interval: str | None = None,
671
+ startTimestamp: str | None = None,
672
+ endTimestamp: str | None = None,
673
+ emailIds: list[int] | None = None,
674
674
  ) -> dict[str, Any]:
675
675
  """
676
676
 
@@ -825,24 +825,24 @@ class MarketingApi(APISegmentBase):
825
825
  def update_email_draft_by_id(
826
826
  self,
827
827
  emailId: str,
828
- rssData: Optional[dict[str, Any]] = None,
829
- subject: Optional[str] = None,
830
- testing: Optional[dict[str, Any]] = None,
831
- publishDate: Optional[str] = None,
832
- language: Optional[str] = None,
833
- businessUnitId: Optional[str] = None,
834
- content: Optional[dict[str, Any]] = None,
835
- webversion: Optional[dict[str, Any]] = None,
836
- archived: Optional[bool] = None,
837
- subscriptionDetails: Optional[dict[str, Any]] = None,
838
- activeDomain: Optional[str] = None,
839
- name: Optional[str] = None,
840
- campaign: Optional[str] = None,
841
- from_: Optional[dict[str, Any]] = None,
842
- state: Optional[str] = None,
843
- to: Optional[dict[str, Any]] = None,
844
- subcategory: Optional[str] = None,
845
- sendOnPublish: Optional[bool] = None,
828
+ rssData: dict[str, Any] | None = None,
829
+ subject: str | None = None,
830
+ testing: dict[str, Any] | None = None,
831
+ publishDate: str | None = None,
832
+ language: str | None = None,
833
+ businessUnitId: str | None = None,
834
+ content: dict[str, Any] | None = None,
835
+ webversion: dict[str, Any] | None = None,
836
+ archived: bool | None = None,
837
+ subscriptionDetails: dict[str, Any] | None = None,
838
+ activeDomain: str | None = None,
839
+ name: str | None = None,
840
+ campaign: str | None = None,
841
+ from_: dict[str, Any] | None = None,
842
+ state: str | None = None,
843
+ to: dict[str, Any] | None = None,
844
+ subcategory: str | None = None,
845
+ sendOnPublish: bool | None = None,
846
846
  ) -> dict[str, Any]:
847
847
  """
848
848
 
@@ -936,9 +936,9 @@ class MarketingApi(APISegmentBase):
936
936
  def get_email_revisions(
937
937
  self,
938
938
  emailId: str,
939
- after: Optional[str] = None,
940
- before: Optional[str] = None,
941
- limit: Optional[int] = None,
939
+ after: str | None = None,
940
+ before: str | None = None,
941
+ limit: int | None = None,
942
942
  ) -> dict[str, Any]:
943
943
  """
944
944
 
@@ -997,7 +997,7 @@ class MarketingApi(APISegmentBase):
997
997
  response = self._get(url, params=query_params)
998
998
  return self._handle_response(response)
999
999
 
1000
- def clone_email(self, id: str, cloneName: Optional[str] = None) -> dict[str, Any]:
1000
+ def clone_email(self, id: str, cloneName: str | None = None) -> dict[str, Any]:
1001
1001
  """
1002
1002
 
1003
1003
  Clones a marketing email using the POST method at the "/marketing/v3/emails/clone" endpoint, creating a duplicate email with the same properties as the original but with a unique ID.
@@ -1032,20 +1032,20 @@ class MarketingApi(APISegmentBase):
1032
1032
 
1033
1033
  def list_marketing_emails(
1034
1034
  self,
1035
- createdAt: Optional[str] = None,
1036
- createdAfter: Optional[str] = None,
1037
- createdBefore: Optional[str] = None,
1038
- updatedAt: Optional[str] = None,
1039
- updatedAfter: Optional[str] = None,
1040
- updatedBefore: Optional[str] = None,
1041
- sort: Optional[List[str]] = None,
1042
- after: Optional[str] = None,
1043
- limit: Optional[int] = None,
1044
- includeStats: Optional[bool] = None,
1045
- type: Optional[str] = None,
1046
- isPublished: Optional[bool] = None,
1047
- includedProperties: Optional[List[str]] = None,
1048
- archived: Optional[bool] = None,
1035
+ createdAt: str | None = None,
1036
+ createdAfter: str | None = None,
1037
+ createdBefore: str | None = None,
1038
+ updatedAt: str | None = None,
1039
+ updatedAfter: str | None = None,
1040
+ updatedBefore: str | None = None,
1041
+ sort: list[str] | None = None,
1042
+ after: str | None = None,
1043
+ limit: int | None = None,
1044
+ includeStats: bool | None = None,
1045
+ type: str | None = None,
1046
+ isPublished: bool | None = None,
1047
+ includedProperties: list[str] | None = None,
1048
+ archived: bool | None = None,
1049
1049
  ) -> dict[str, Any]:
1050
1050
  """
1051
1051
 
@@ -1103,24 +1103,24 @@ class MarketingApi(APISegmentBase):
1103
1103
  def create_email_marketing_campaign(
1104
1104
  self,
1105
1105
  name: str,
1106
- feedbackSurveyId: Optional[str] = None,
1107
- rssData: Optional[dict[str, Any]] = None,
1108
- subject: Optional[str] = None,
1109
- testing: Optional[dict[str, Any]] = None,
1110
- publishDate: Optional[str] = None,
1111
- language: Optional[str] = None,
1112
- businessUnitId: Optional[str] = None,
1113
- content: Optional[dict[str, Any]] = None,
1114
- webversion: Optional[dict[str, Any]] = None,
1115
- archived: Optional[bool] = None,
1116
- subscriptionDetails: Optional[dict[str, Any]] = None,
1117
- activeDomain: Optional[str] = None,
1118
- campaign: Optional[str] = None,
1119
- from_: Optional[dict[str, Any]] = None,
1120
- state: Optional[str] = None,
1121
- to: Optional[dict[str, Any]] = None,
1122
- subcategory: Optional[str] = None,
1123
- sendOnPublish: Optional[bool] = None,
1106
+ feedbackSurveyId: str | None = None,
1107
+ rssData: dict[str, Any] | None = None,
1108
+ subject: str | None = None,
1109
+ testing: dict[str, Any] | None = None,
1110
+ publishDate: str | None = None,
1111
+ language: str | None = None,
1112
+ businessUnitId: str | None = None,
1113
+ content: dict[str, Any] | None = None,
1114
+ webversion: dict[str, Any] | None = None,
1115
+ archived: bool | None = None,
1116
+ subscriptionDetails: dict[str, Any] | None = None,
1117
+ activeDomain: str | None = None,
1118
+ campaign: str | None = None,
1119
+ from_: dict[str, Any] | None = None,
1120
+ state: str | None = None,
1121
+ to: dict[str, Any] | None = None,
1122
+ subcategory: str | None = None,
1123
+ sendOnPublish: bool | None = None,
1124
1124
  ) -> dict[str, Any]:
1125
1125
  """
1126
1126
 
@@ -1251,9 +1251,9 @@ class MarketingApi(APISegmentBase):
1251
1251
  def get_email_by_id_marketing(
1252
1252
  self,
1253
1253
  emailId: str,
1254
- includeStats: Optional[bool] = None,
1255
- includedProperties: Optional[List[str]] = None,
1256
- archived: Optional[bool] = None,
1254
+ includeStats: bool | None = None,
1255
+ includedProperties: list[str] | None = None,
1256
+ archived: bool | None = None,
1257
1257
  ) -> dict[str, Any]:
1258
1258
  """
1259
1259
 
@@ -1290,7 +1290,7 @@ class MarketingApi(APISegmentBase):
1290
1290
  return self._handle_response(response)
1291
1291
 
1292
1292
  def delete_email_by_id_marketing(
1293
- self, emailId: str, archived: Optional[bool] = None
1293
+ self, emailId: str, archived: bool | None = None
1294
1294
  ) -> Any:
1295
1295
  """
1296
1296
 
@@ -1319,25 +1319,25 @@ class MarketingApi(APISegmentBase):
1319
1319
  def patch_email_by_id(
1320
1320
  self,
1321
1321
  emailId: str,
1322
- archived: Optional[bool] = None,
1323
- rssData: Optional[dict[str, Any]] = None,
1324
- subject: Optional[str] = None,
1325
- testing: Optional[dict[str, Any]] = None,
1326
- publishDate: Optional[str] = None,
1327
- language: Optional[str] = None,
1328
- businessUnitId: Optional[str] = None,
1329
- content: Optional[dict[str, Any]] = None,
1330
- webversion: Optional[dict[str, Any]] = None,
1331
- archived_body: Optional[bool] = None,
1332
- subscriptionDetails: Optional[dict[str, Any]] = None,
1333
- activeDomain: Optional[str] = None,
1334
- name: Optional[str] = None,
1335
- campaign: Optional[str] = None,
1336
- from_: Optional[dict[str, Any]] = None,
1337
- state: Optional[str] = None,
1338
- to: Optional[dict[str, Any]] = None,
1339
- subcategory: Optional[str] = None,
1340
- sendOnPublish: Optional[bool] = None,
1322
+ archived: bool | None = None,
1323
+ rssData: dict[str, Any] | None = None,
1324
+ subject: str | None = None,
1325
+ testing: dict[str, Any] | None = None,
1326
+ publishDate: str | None = None,
1327
+ language: str | None = None,
1328
+ businessUnitId: str | None = None,
1329
+ content: dict[str, Any] | None = None,
1330
+ webversion: dict[str, Any] | None = None,
1331
+ archived_body: bool | None = None,
1332
+ subscriptionDetails: dict[str, Any] | None = None,
1333
+ activeDomain: str | None = None,
1334
+ name: str | None = None,
1335
+ campaign: str | None = None,
1336
+ from_: dict[str, Any] | None = None,
1337
+ state: str | None = None,
1338
+ to: dict[str, Any] | None = None,
1339
+ subcategory: str | None = None,
1340
+ sendOnPublish: bool | None = None,
1341
1341
  ) -> dict[str, Any]:
1342
1342
  """
1343
1343