universal-mcp-applications 0.1.32__py3-none-any.whl → 0.1.36rc2__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 (105) hide show
  1. universal_mcp/applications/ahrefs/app.py +52 -198
  2. universal_mcp/applications/airtable/app.py +23 -122
  3. universal_mcp/applications/apollo/app.py +111 -464
  4. universal_mcp/applications/asana/app.py +417 -1567
  5. universal_mcp/applications/aws_s3/app.py +36 -103
  6. universal_mcp/applications/bill/app.py +546 -1957
  7. universal_mcp/applications/box/app.py +1068 -3981
  8. universal_mcp/applications/braze/app.py +364 -1430
  9. universal_mcp/applications/browser_use/app.py +2 -8
  10. universal_mcp/applications/cal_com_v2/app.py +207 -625
  11. universal_mcp/applications/calendly/app.py +61 -200
  12. universal_mcp/applications/canva/app.py +45 -110
  13. universal_mcp/applications/clickup/app.py +207 -674
  14. universal_mcp/applications/coda/app.py +146 -426
  15. universal_mcp/applications/confluence/app.py +310 -1098
  16. universal_mcp/applications/contentful/app.py +36 -151
  17. universal_mcp/applications/crustdata/app.py +28 -107
  18. universal_mcp/applications/dialpad/app.py +283 -756
  19. universal_mcp/applications/digitalocean/app.py +1766 -5777
  20. universal_mcp/applications/domain_checker/app.py +3 -54
  21. universal_mcp/applications/e2b/app.py +14 -64
  22. universal_mcp/applications/elevenlabs/app.py +9 -47
  23. universal_mcp/applications/exa/app.py +6 -17
  24. universal_mcp/applications/falai/app.py +24 -101
  25. universal_mcp/applications/figma/app.py +53 -137
  26. universal_mcp/applications/file_system/app.py +2 -13
  27. universal_mcp/applications/firecrawl/app.py +51 -152
  28. universal_mcp/applications/fireflies/app.py +59 -281
  29. universal_mcp/applications/fpl/app.py +91 -528
  30. universal_mcp/applications/fpl/utils/fixtures.py +15 -49
  31. universal_mcp/applications/fpl/utils/helper.py +25 -89
  32. universal_mcp/applications/fpl/utils/league_utils.py +20 -64
  33. universal_mcp/applications/ghost_content/app.py +52 -161
  34. universal_mcp/applications/github/app.py +19 -56
  35. universal_mcp/applications/gong/app.py +88 -248
  36. universal_mcp/applications/google_calendar/app.py +16 -68
  37. universal_mcp/applications/google_docs/app.py +85 -189
  38. universal_mcp/applications/google_drive/app.py +141 -463
  39. universal_mcp/applications/google_gemini/app.py +12 -64
  40. universal_mcp/applications/google_mail/app.py +28 -157
  41. universal_mcp/applications/google_searchconsole/app.py +15 -48
  42. universal_mcp/applications/google_sheet/app.py +100 -581
  43. universal_mcp/applications/google_sheet/helper.py +10 -37
  44. universal_mcp/applications/hashnode/app.py +57 -269
  45. universal_mcp/applications/heygen/app.py +44 -122
  46. universal_mcp/applications/http_tools/app.py +10 -32
  47. universal_mcp/applications/hubspot/api_segments/crm_api.py +460 -1573
  48. universal_mcp/applications/hubspot/api_segments/marketing_api.py +74 -262
  49. universal_mcp/applications/hubspot/app.py +23 -87
  50. universal_mcp/applications/jira/app.py +2071 -7986
  51. universal_mcp/applications/klaviyo/app.py +494 -1376
  52. universal_mcp/applications/linkedin/README.md +9 -2
  53. universal_mcp/applications/linkedin/app.py +240 -181
  54. universal_mcp/applications/mailchimp/app.py +450 -1605
  55. universal_mcp/applications/markitdown/app.py +8 -20
  56. universal_mcp/applications/miro/app.py +217 -699
  57. universal_mcp/applications/ms_teams/app.py +64 -186
  58. universal_mcp/applications/neon/app.py +86 -192
  59. universal_mcp/applications/notion/app.py +21 -36
  60. universal_mcp/applications/onedrive/app.py +16 -38
  61. universal_mcp/applications/openai/app.py +42 -165
  62. universal_mcp/applications/outlook/app.py +24 -84
  63. universal_mcp/applications/perplexity/app.py +4 -19
  64. universal_mcp/applications/pipedrive/app.py +832 -3142
  65. universal_mcp/applications/posthog/app.py +163 -432
  66. universal_mcp/applications/reddit/app.py +40 -139
  67. universal_mcp/applications/resend/app.py +41 -107
  68. universal_mcp/applications/retell/app.py +14 -41
  69. universal_mcp/applications/rocketlane/app.py +221 -934
  70. universal_mcp/applications/scraper/README.md +7 -4
  71. universal_mcp/applications/scraper/app.py +50 -109
  72. universal_mcp/applications/semanticscholar/app.py +22 -64
  73. universal_mcp/applications/semrush/app.py +43 -77
  74. universal_mcp/applications/sendgrid/app.py +512 -1262
  75. universal_mcp/applications/sentry/app.py +271 -906
  76. universal_mcp/applications/serpapi/app.py +40 -143
  77. universal_mcp/applications/sharepoint/app.py +17 -39
  78. universal_mcp/applications/shopify/app.py +1551 -4287
  79. universal_mcp/applications/shortcut/app.py +155 -417
  80. universal_mcp/applications/slack/app.py +33 -115
  81. universal_mcp/applications/spotify/app.py +126 -325
  82. universal_mcp/applications/supabase/app.py +104 -213
  83. universal_mcp/applications/tavily/app.py +1 -1
  84. universal_mcp/applications/trello/app.py +693 -2656
  85. universal_mcp/applications/twilio/app.py +14 -50
  86. universal_mcp/applications/twitter/api_segments/compliance_api.py +4 -14
  87. universal_mcp/applications/twitter/api_segments/dm_conversations_api.py +6 -18
  88. universal_mcp/applications/twitter/api_segments/likes_api.py +1 -3
  89. universal_mcp/applications/twitter/api_segments/lists_api.py +5 -15
  90. universal_mcp/applications/twitter/api_segments/trends_api.py +1 -3
  91. universal_mcp/applications/twitter/api_segments/tweets_api.py +9 -31
  92. universal_mcp/applications/twitter/api_segments/usage_api.py +1 -5
  93. universal_mcp/applications/twitter/api_segments/users_api.py +14 -42
  94. universal_mcp/applications/whatsapp/app.py +35 -186
  95. universal_mcp/applications/whatsapp/audio.py +2 -6
  96. universal_mcp/applications/whatsapp/whatsapp.py +17 -51
  97. universal_mcp/applications/whatsapp_business/app.py +70 -283
  98. universal_mcp/applications/wrike/app.py +45 -118
  99. universal_mcp/applications/yahoo_finance/app.py +19 -65
  100. universal_mcp/applications/youtube/app.py +75 -261
  101. universal_mcp/applications/zenquotes/app.py +2 -2
  102. {universal_mcp_applications-0.1.32.dist-info → universal_mcp_applications-0.1.36rc2.dist-info}/METADATA +2 -2
  103. {universal_mcp_applications-0.1.32.dist-info → universal_mcp_applications-0.1.36rc2.dist-info}/RECORD +105 -105
  104. {universal_mcp_applications-0.1.32.dist-info → universal_mcp_applications-0.1.36rc2.dist-info}/WHEEL +0 -0
  105. {universal_mcp_applications-0.1.32.dist-info → universal_mcp_applications-0.1.36rc2.dist-info}/licenses/LICENSE +0 -0
@@ -1,5 +1,4 @@
1
1
  from typing import Any
2
-
3
2
  from universal_mcp.applications.application import APIApplication
4
3
  from universal_mcp.integrations import Integration
5
4
 
@@ -20,7 +19,6 @@ class SemrushApp(APIApplication):
20
19
  credentials = self.integration.get_credentials()
21
20
  if "api_key" in credentials:
22
21
  self.api_key = credentials["api_key"]
23
- # Always return empty headers
24
22
  return {}
25
23
 
26
24
  @property
@@ -44,22 +42,17 @@ class SemrushApp(APIApplication):
44
42
  """
45
43
  Builds the parameters dictionary and makes a GET request to the Semrush API.
46
44
  """
47
- params = {
48
- "type": report_type,
49
- "key": self.api_key,
50
- }
45
+ params = {"type": report_type, "key": self.api_key}
51
46
  for key, value in kwargs.items():
52
47
  if value is not None:
53
48
  params[key] = value
54
-
55
49
  url = self.base_url
56
50
  if "analytics" in report_type:
57
51
  url = f"{self.base_url}/analytics/v1"
58
-
59
52
  response = self._get(url, params=params)
60
53
  return self._handle_response(response)
61
54
 
62
- def domain_ad_history(
55
+ async def domain_ad_history(
63
56
  self,
64
57
  domain: str,
65
58
  database: str = "us",
@@ -91,7 +84,7 @@ class SemrushApp(APIApplication):
91
84
  export_decode=export_decode,
92
85
  )
93
86
 
94
- def domain_organic_pages(
87
+ async def domain_organic_pages(
95
88
  self,
96
89
  domain: str,
97
90
  database: str = "us",
@@ -123,7 +116,7 @@ class SemrushApp(APIApplication):
123
116
  export_decode=export_decode,
124
117
  )
125
118
 
126
- def domain_organic_search_keywords(
119
+ async def domain_organic_search_keywords(
127
120
  self,
128
121
  domain: str,
129
122
  database: str = "us",
@@ -183,7 +176,7 @@ class SemrushApp(APIApplication):
183
176
  export_escape=export_escape,
184
177
  )
185
178
 
186
- def domain_organic_subdomains(
179
+ async def domain_organic_subdomains(
187
180
  self,
188
181
  domain: str,
189
182
  database: str = "us",
@@ -213,7 +206,7 @@ class SemrushApp(APIApplication):
213
206
  export_decode=export_decode,
214
207
  )
215
208
 
216
- def domain_paid_search_keywords(
209
+ async def domain_paid_search_keywords(
217
210
  self,
218
211
  domain: str,
219
212
  database: str = "us",
@@ -247,7 +240,7 @@ class SemrushApp(APIApplication):
247
240
  export_decode=export_decode,
248
241
  )
249
242
 
250
- def domain_pla_search_keywords(
243
+ async def domain_pla_search_keywords(
251
244
  self,
252
245
  domain: str,
253
246
  database: str = "us",
@@ -277,7 +270,7 @@ class SemrushApp(APIApplication):
277
270
  export_decode=export_decode,
278
271
  )
279
272
 
280
- def domain_vs_domain(
273
+ async def domain_vs_domain(
281
274
  self,
282
275
  domains: str,
283
276
  database: str = "us",
@@ -309,7 +302,7 @@ class SemrushApp(APIApplication):
309
302
  export_decode=export_decode,
310
303
  )
311
304
 
312
- def backlinks(
305
+ async def backlinks(
313
306
  self,
314
307
  target: str,
315
308
  target_type: str,
@@ -335,7 +328,7 @@ class SemrushApp(APIApplication):
335
328
  display_filter=display_filter,
336
329
  )
337
330
 
338
- def backlinks_overview(
331
+ async def backlinks_overview(
339
332
  self,
340
333
  target: str,
341
334
  target_type: str,
@@ -361,12 +354,8 @@ class SemrushApp(APIApplication):
361
354
  display_filter=display_filter,
362
355
  )
363
356
 
364
- def keyword_difficulty(
365
- self,
366
- phrase: str,
367
- database: str = "us",
368
- export_columns: str | None = None,
369
- export_escape: int | None = None,
357
+ async def keyword_difficulty(
358
+ self, phrase: str, database: str = "us", export_columns: str | None = None, export_escape: int | None = None
370
359
  ) -> dict[str, Any]:
371
360
  """
372
361
  Get keyword difficulty data to estimate ranking difficulty for organic search terms.
@@ -374,14 +363,10 @@ class SemrushApp(APIApplication):
374
363
  if not phrase:
375
364
  raise ValueError("Phrase parameter is required")
376
365
  return self._build_params_and_get(
377
- "phrase_kdi",
378
- phrase=phrase,
379
- database=database,
380
- export_columns=export_columns,
381
- export_escape=export_escape,
366
+ "phrase_kdi", phrase=phrase, database=database, export_columns=export_columns, export_escape=export_escape
382
367
  )
383
368
 
384
- def ads_copies(
369
+ async def ads_copies(
385
370
  self,
386
371
  domain: str,
387
372
  database: str = "us",
@@ -411,7 +396,7 @@ class SemrushApp(APIApplication):
411
396
  export_decode=export_decode,
412
397
  )
413
398
 
414
- def anchors(
399
+ async def anchors(
415
400
  self,
416
401
  target: str,
417
402
  target_type: str,
@@ -435,24 +420,15 @@ class SemrushApp(APIApplication):
435
420
  display_offset=display_offset,
436
421
  )
437
422
 
438
- def authority_score_profile(self, target: str, target_type: str) -> dict[str, Any]:
423
+ async def authority_score_profile(self, target: str, target_type: str) -> dict[str, Any]:
439
424
  """
440
425
  Get distribution of referring domains by Authority Score from 0 to 100.
441
426
  """
442
427
  if not target or not target_type:
443
428
  raise ValueError("Target and target_type parameters are required")
444
- return self._build_params_and_get(
445
- "backlinks_ascore_profile_analytics",
446
- target=target,
447
- target_type=target_type,
448
- )
429
+ return self._build_params_and_get("backlinks_ascore_profile_analytics", target=target, target_type=target_type)
449
430
 
450
- def batch_comparison(
451
- self,
452
- targets: list[str],
453
- target_types: list[str],
454
- export_columns: str | None = None,
455
- ) -> dict[str, Any]:
431
+ async def batch_comparison(self, targets: list[str], target_types: list[str], export_columns: str | None = None) -> dict[str, Any]:
456
432
  """
457
433
  Compare backlink profiles and link-building progress across multiple competitors.
458
434
  """
@@ -461,17 +437,12 @@ class SemrushApp(APIApplication):
461
437
  if len(targets) > 200:
462
438
  raise ValueError("Maximum 200 targets allowed")
463
439
  if len(targets) != len(target_types):
464
- raise ValueError(
465
- "Targets and target_types arrays must have the same length"
466
- )
440
+ raise ValueError("Targets and target_types arrays must have the same length")
467
441
  return self._build_params_and_get(
468
- "backlinks_comparison_analytics",
469
- targets=targets,
470
- target_types=target_types,
471
- export_columns=export_columns,
442
+ "backlinks_comparison_analytics", targets=targets, target_types=target_types, export_columns=export_columns
472
443
  )
473
444
 
474
- def batch_keyword_overview(
445
+ async def batch_keyword_overview(
475
446
  self,
476
447
  phrase: str,
477
448
  database: str = "us",
@@ -495,7 +466,7 @@ class SemrushApp(APIApplication):
495
466
  export_columns=export_columns,
496
467
  )
497
468
 
498
- def broad_match_keyword(
469
+ async def broad_match_keyword(
499
470
  self,
500
471
  phrase: str,
501
472
  database: str = "us",
@@ -525,22 +496,17 @@ class SemrushApp(APIApplication):
525
496
  display_filter=display_filter,
526
497
  )
527
498
 
528
- def categories(
529
- self, target: str, target_type: str, export_columns: str | None = None
530
- ) -> dict[str, Any]:
499
+ async def categories(self, target: str, target_type: str, export_columns: str | None = None) -> dict[str, Any]:
531
500
  """
532
501
  Get list of categories that the queried domain belongs to with confidence ratings.
533
502
  """
534
503
  if not target or not target_type:
535
504
  raise ValueError("Target and target_type parameters are required")
536
505
  return self._build_params_and_get(
537
- "backlinks_categories_analytics",
538
- target=target,
539
- target_type=target_type,
540
- export_columns=export_columns,
506
+ "backlinks_categories_analytics", target=target, target_type=target_type, export_columns=export_columns
541
507
  )
542
508
 
543
- def categories_profile(
509
+ async def categories_profile(
544
510
  self,
545
511
  target: str,
546
512
  target_type: str,
@@ -562,7 +528,7 @@ class SemrushApp(APIApplication):
562
528
  display_offset=display_offset,
563
529
  )
564
530
 
565
- def competitors(
531
+ async def competitors(
566
532
  self,
567
533
  target: str,
568
534
  target_type: str,
@@ -584,7 +550,7 @@ class SemrushApp(APIApplication):
584
550
  display_offset=display_offset,
585
551
  )
586
552
 
587
- def competitors_organic_search(
553
+ async def competitors_organic_search(
588
554
  self,
589
555
  domain: str,
590
556
  database: str = "us",
@@ -614,7 +580,7 @@ class SemrushApp(APIApplication):
614
580
  display_sort=display_sort,
615
581
  )
616
582
 
617
- def competitors_paid_search(
583
+ async def competitors_paid_search(
618
584
  self,
619
585
  domain: str,
620
586
  database: str = "us",
@@ -644,7 +610,7 @@ class SemrushApp(APIApplication):
644
610
  display_sort=display_sort,
645
611
  )
646
612
 
647
- def indexed_pages(
613
+ async def indexed_pages(
648
614
  self,
649
615
  target: str,
650
616
  target_type: str,
@@ -668,7 +634,7 @@ class SemrushApp(APIApplication):
668
634
  display_offset=display_offset,
669
635
  )
670
636
 
671
- def keyword_ads_history(
637
+ async def keyword_ads_history(
672
638
  self,
673
639
  phrase: str,
674
640
  database: str = "us",
@@ -694,7 +660,7 @@ class SemrushApp(APIApplication):
694
660
  export_columns=export_columns,
695
661
  )
696
662
 
697
- def keyword_overview_all_databases(
663
+ async def keyword_overview_all_databases(
698
664
  self,
699
665
  phrase: str,
700
666
  database: str | None = None,
@@ -716,7 +682,7 @@ class SemrushApp(APIApplication):
716
682
  export_columns=export_columns,
717
683
  )
718
684
 
719
- def keyword_overview_one_database(
685
+ async def keyword_overview_one_database(
720
686
  self,
721
687
  phrase: str,
722
688
  database: str = "us",
@@ -740,7 +706,7 @@ class SemrushApp(APIApplication):
740
706
  export_columns=export_columns,
741
707
  )
742
708
 
743
- def organic_results(
709
+ async def organic_results(
744
710
  self,
745
711
  phrase: str,
746
712
  database: str = "us",
@@ -770,7 +736,7 @@ class SemrushApp(APIApplication):
770
736
  positions_type=positions_type,
771
737
  )
772
738
 
773
- def paid_results(
739
+ async def paid_results(
774
740
  self,
775
741
  phrase: str,
776
742
  database: str = "us",
@@ -798,7 +764,7 @@ class SemrushApp(APIApplication):
798
764
  export_columns=export_columns,
799
765
  )
800
766
 
801
- def phrase_questions(
767
+ async def phrase_questions(
802
768
  self,
803
769
  phrase: str,
804
770
  database: str = "us",
@@ -828,7 +794,7 @@ class SemrushApp(APIApplication):
828
794
  display_filter=display_filter,
829
795
  )
830
796
 
831
- def pla_competitors(
797
+ async def pla_competitors(
832
798
  self,
833
799
  domain: str,
834
800
  database: str = "us",
@@ -856,7 +822,7 @@ class SemrushApp(APIApplication):
856
822
  display_sort=display_sort,
857
823
  )
858
824
 
859
- def pla_copies(
825
+ async def pla_copies(
860
826
  self,
861
827
  domain: str,
862
828
  database: str = "us",
@@ -886,7 +852,7 @@ class SemrushApp(APIApplication):
886
852
  display_filter=display_filter,
887
853
  )
888
854
 
889
- def referring_domains(
855
+ async def referring_domains(
890
856
  self,
891
857
  target: str,
892
858
  target_type: str,
@@ -912,7 +878,7 @@ class SemrushApp(APIApplication):
912
878
  display_filter=display_filter,
913
879
  )
914
880
 
915
- def referring_domains_by_country(
881
+ async def referring_domains_by_country(
916
882
  self,
917
883
  target: str,
918
884
  target_type: str,
@@ -936,7 +902,7 @@ class SemrushApp(APIApplication):
936
902
  display_offset=display_offset,
937
903
  )
938
904
 
939
- def related_keywords(
905
+ async def related_keywords(
940
906
  self,
941
907
  phrase: str,
942
908
  database: str = "us",
@@ -966,7 +932,7 @@ class SemrushApp(APIApplication):
966
932
  display_filter=display_filter,
967
933
  )
968
934
 
969
- def tlds_distribution(
935
+ async def tlds_distribution(
970
936
  self,
971
937
  target: str,
972
938
  target_type: str,
@@ -990,7 +956,7 @@ class SemrushApp(APIApplication):
990
956
  display_offset=display_offset,
991
957
  )
992
958
 
993
- def url_organic_search_keywords(
959
+ async def url_organic_search_keywords(
994
960
  self,
995
961
  url: str,
996
962
  database: str = "us",
@@ -1020,7 +986,7 @@ class SemrushApp(APIApplication):
1020
986
  display_sort=display_sort,
1021
987
  )
1022
988
 
1023
- def url_paid_search_keywords(
989
+ async def url_paid_search_keywords(
1024
990
  self,
1025
991
  url: str,
1026
992
  database: str = "us",