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.
- universal_mcp/applications/airtable/app.py +1 -0
- universal_mcp/applications/apollo/app.py +1 -0
- universal_mcp/applications/{aws-s3 → aws_s3}/app.py +4 -5
- universal_mcp/applications/bill/app.py +3 -3
- universal_mcp/applications/box/app.py +2 -6
- universal_mcp/applications/braze/app.py +2 -6
- universal_mcp/applications/cal_com_v2/__init__.py +1 -0
- universal_mcp/applications/{cal-com-v2 → cal_com_v2}/app.py +138 -182
- universal_mcp/applications/clickup/app.py +2 -2
- universal_mcp/applications/confluence/app.py +1 -0
- universal_mcp/applications/contentful/app.py +8 -19
- universal_mcp/applications/digitalocean/app.py +9 -27
- universal_mcp/applications/{domain-checker → domain_checker}/app.py +2 -1
- universal_mcp/applications/elevenlabs/app.py +98 -3188
- universal_mcp/applications/falai/app.py +1 -0
- universal_mcp/applications/file_system/__init__.py +1 -0
- universal_mcp/applications/file_system/app.py +96 -0
- universal_mcp/applications/fireflies/app.py +4 -3
- universal_mcp/applications/fpl/app.py +1 -0
- universal_mcp/applications/fpl/utils/fixtures.py +1 -1
- universal_mcp/applications/fpl/utils/helper.py +1 -1
- universal_mcp/applications/fpl/utils/position_utils.py +0 -1
- universal_mcp/applications/{ghost-content → ghost_content}/app.py +2 -1
- universal_mcp/applications/github/app.py +4 -3
- universal_mcp/applications/{google-calendar → google_calendar}/app.py +2 -1
- universal_mcp/applications/{google-docs → google_docs}/app.py +1 -1
- universal_mcp/applications/{google-drive → google_drive}/app.py +2 -1
- universal_mcp/applications/google_gemini/app.py +183 -0
- universal_mcp/applications/{google-mail → google_mail}/app.py +2 -1
- universal_mcp/applications/{google-searchconsole → google_searchconsole}/app.py +1 -1
- universal_mcp/applications/{google-sheet → google_sheet}/app.py +3 -2
- universal_mcp/applications/google_sheet/helper.py +385 -0
- universal_mcp/applications/hashnode/app.py +2 -1
- universal_mcp/applications/{http-tools → http_tools}/app.py +2 -1
- universal_mcp/applications/hubspot/app.py +16 -2
- universal_mcp/applications/jira/app.py +7 -18
- universal_mcp/applications/markitdown/app.py +2 -3
- universal_mcp/applications/{ms-teams → ms_teams}/app.py +1 -1
- universal_mcp/applications/openai/app.py +2 -3
- universal_mcp/applications/outlook/app.py +1 -3
- universal_mcp/applications/pipedrive/app.py +2 -6
- universal_mcp/applications/reddit/app.py +1 -0
- universal_mcp/applications/replicate/app.py +3 -3
- universal_mcp/applications/resend/app.py +1 -2
- universal_mcp/applications/rocketlane/app.py +1 -0
- universal_mcp/applications/semrush/app.py +478 -1467
- universal_mcp/applications/sentry/README.md +20 -20
- universal_mcp/applications/sentry/app.py +40 -40
- universal_mcp/applications/serpapi/app.py +2 -2
- universal_mcp/applications/sharepoint/app.py +2 -1
- universal_mcp/applications/shopify/app.py +1 -0
- universal_mcp/applications/slack/app.py +3 -3
- universal_mcp/applications/trello/app.py +9 -27
- universal_mcp/applications/twilio/__init__.py +1 -0
- universal_mcp/applications/{twillo → twilio}/app.py +2 -2
- universal_mcp/applications/twitter/README.md +1 -1
- universal_mcp/applications/twitter/api_segments/dm_conversations_api.py +2 -2
- universal_mcp/applications/twitter/api_segments/lists_api.py +1 -1
- universal_mcp/applications/unipile/app.py +5 -1
- universal_mcp/applications/whatsapp/app.py +18 -17
- universal_mcp/applications/whatsapp/audio.py +110 -0
- universal_mcp/applications/whatsapp/whatsapp.py +398 -0
- universal_mcp/applications/{whatsapp-business → whatsapp_business}/app.py +1 -1
- universal_mcp/applications/youtube/app.py +195 -191
- universal_mcp/applications/zenquotes/app.py +1 -1
- {universal_mcp_applications-0.1.1.dist-info → universal_mcp_applications-0.1.3.dist-info}/METADATA +4 -2
- {universal_mcp_applications-0.1.1.dist-info → universal_mcp_applications-0.1.3.dist-info}/RECORD +97 -95
- universal_mcp/applications/cal-com-v2/__init__.py +0 -1
- universal_mcp/applications/google-ads/__init__.py +0 -1
- universal_mcp/applications/google-ads/app.py +0 -23
- universal_mcp/applications/google-gemini/app.py +0 -663
- universal_mcp/applications/twillo/README.md +0 -0
- universal_mcp/applications/twillo/__init__.py +0 -1
- /universal_mcp/applications/{aws-s3 → aws_s3}/README.md +0 -0
- /universal_mcp/applications/{aws-s3 → aws_s3}/__init__.py +0 -0
- /universal_mcp/applications/{cal-com-v2 → cal_com_v2}/README.md +0 -0
- /universal_mcp/applications/{domain-checker → domain_checker}/README.md +0 -0
- /universal_mcp/applications/{domain-checker → domain_checker}/__init__.py +0 -0
- /universal_mcp/applications/{ghost-content → ghost_content}/README.md +0 -0
- /universal_mcp/applications/{ghost-content → ghost_content}/__init__.py +0 -0
- /universal_mcp/applications/{google-calendar → google_calendar}/README.md +0 -0
- /universal_mcp/applications/{google-calendar → google_calendar}/__init__.py +0 -0
- /universal_mcp/applications/{google-docs → google_docs}/README.md +0 -0
- /universal_mcp/applications/{google-docs → google_docs}/__init__.py +0 -0
- /universal_mcp/applications/{google-drive → google_drive}/README.md +0 -0
- /universal_mcp/applications/{google-drive → google_drive}/__init__.py +0 -0
- /universal_mcp/applications/{google-gemini → google_gemini}/README.md +0 -0
- /universal_mcp/applications/{google-gemini → google_gemini}/__init__.py +0 -0
- /universal_mcp/applications/{google-mail → google_mail}/README.md +0 -0
- /universal_mcp/applications/{google-mail → google_mail}/__init__.py +0 -0
- /universal_mcp/applications/{google-searchconsole → google_searchconsole}/README.md +0 -0
- /universal_mcp/applications/{google-searchconsole → google_searchconsole}/__init__.py +0 -0
- /universal_mcp/applications/{google-sheet → google_sheet}/README.md +0 -0
- /universal_mcp/applications/{google-sheet → google_sheet}/__init__.py +0 -0
- /universal_mcp/applications/{http-tools → http_tools}/README.md +0 -0
- /universal_mcp/applications/{http-tools → http_tools}/__init__.py +0 -0
- /universal_mcp/applications/{ms-teams → ms_teams}/README.md +0 -0
- /universal_mcp/applications/{ms-teams → ms_teams}/__init__.py +0 -0
- /universal_mcp/applications/{google-ads → twilio}/README.md +0 -0
- /universal_mcp/applications/{whatsapp-business → whatsapp_business}/README.md +0 -0
- /universal_mcp/applications/{whatsapp-business → whatsapp_business}/__init__.py +0 -0
- {universal_mcp_applications-0.1.1.dist-info → universal_mcp_applications-0.1.3.dist-info}/WHEEL +0 -0
- {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
|
|
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.
|
|
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,
|
|
@@ -2,7 +2,8 @@ from collections.abc import Callable
|
|
|
2
2
|
from typing import Any
|
|
3
3
|
|
|
4
4
|
from loguru import logger
|
|
5
|
-
|
|
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"
|
|
18
|
+
self.environment_id: str = "master"
|
|
18
19
|
self._access_token: str | None = None
|
|
19
|
-
self._is_eu_customer: bool = False
|
|
20
|
-
self._credentials_loaded: bool = False
|
|
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="
|
|
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"""
|