universal-mcp-applications 0.1.2__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/app.py +3 -4
- 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/app.py +22 -64
- 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 +3 -1
- universal_mcp/applications/google_calendar/app.py +2 -1
- universal_mcp/applications/google_docs/app.py +1 -1
- universal_mcp/applications/google_drive/app.py +2 -1
- universal_mcp/applications/google_gemini/app.py +138 -618
- universal_mcp/applications/google_mail/app.py +2 -1
- universal_mcp/applications/{google-searchconsole → google_searchconsole}/app.py +1 -1
- universal_mcp/applications/google_sheet/app.py +2 -1
- universal_mcp/applications/google_sheet/helper.py +156 -116
- universal_mcp/applications/hashnode/app.py +1 -0
- universal_mcp/applications/{http-tools → http_tools}/app.py +2 -1
- universal_mcp/applications/hubspot/app.py +4 -1
- universal_mcp/applications/jira/app.py +7 -18
- universal_mcp/applications/markitdown/app.py +2 -3
- universal_mcp/applications/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 +1 -1
- 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 +1 -0
- 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/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.2.dist-info → universal_mcp_applications-0.1.3.dist-info}/METADATA +4 -2
- {universal_mcp_applications-0.1.2.dist-info → universal_mcp_applications-0.1.3.dist-info}/RECORD +76 -75
- universal_mcp/applications/google-ads/__init__.py +0 -1
- universal_mcp/applications/google-ads/app.py +0 -23
- universal_mcp/applications/twillo/README.md +0 -0
- universal_mcp/applications/twillo/__init__.py +0 -1
- /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-searchconsole → google_searchconsole}/README.md +0 -0
- /universal_mcp/applications/{google-searchconsole → google_searchconsole}/__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/{google-ads → twilio}/README.md +0 -0
- {universal_mcp_applications-0.1.2.dist-info → universal_mcp_applications-0.1.3.dist-info}/WHEEL +0 -0
- {universal_mcp_applications-0.1.2.dist-info → universal_mcp_applications-0.1.3.dist-info}/licenses/LICENSE +0 -0
|
@@ -4,6 +4,7 @@ from typing import Any
|
|
|
4
4
|
|
|
5
5
|
import boto3
|
|
6
6
|
from botocore.exceptions import ClientError
|
|
7
|
+
|
|
7
8
|
from universal_mcp.applications.application import BaseApplication
|
|
8
9
|
from universal_mcp.integrations import Integration
|
|
9
10
|
|
|
@@ -22,7 +23,7 @@ class AwsS3App(BaseApplication):
|
|
|
22
23
|
aws_secret_access_key (str, optional): AWS secret access key.
|
|
23
24
|
region_name (str, optional): AWS region name.
|
|
24
25
|
"""
|
|
25
|
-
super().__init__(name="
|
|
26
|
+
super().__init__(name="aws_s3", integration=integration, **kwargs)
|
|
26
27
|
self._client = client
|
|
27
28
|
self.integration = integration
|
|
28
29
|
|
|
@@ -135,9 +136,7 @@ class AwsS3App(BaseApplication):
|
|
|
135
136
|
except ClientError:
|
|
136
137
|
return False
|
|
137
138
|
|
|
138
|
-
def list_prefixes(
|
|
139
|
-
self, bucket_name: str, prefix: str | None = None
|
|
140
|
-
) -> list[str]:
|
|
139
|
+
def list_prefixes(self, bucket_name: str, prefix: str | None = None) -> list[str]:
|
|
141
140
|
"""
|
|
142
141
|
Lists common prefixes ("folders") in the specified S3 bucket and prefix.
|
|
143
142
|
|
|
@@ -244,7 +244,7 @@ class BillApp(APIApplication):
|
|
|
244
244
|
HTTPStatusError: Raised when the API request fails with detailed error information including status code and response body.
|
|
245
245
|
|
|
246
246
|
Tags:
|
|
247
|
-
bills
|
|
247
|
+
bills, , important
|
|
248
248
|
"""
|
|
249
249
|
url = f"{self.base_url}/v3/bills"
|
|
250
250
|
query_params = {
|
|
@@ -356,7 +356,7 @@ class BillApp(APIApplication):
|
|
|
356
356
|
HTTPStatusError: Raised when the API request fails with detailed error information including status code and response body.
|
|
357
357
|
|
|
358
358
|
Tags:
|
|
359
|
-
bills
|
|
359
|
+
bills, important
|
|
360
360
|
"""
|
|
361
361
|
if billId is None:
|
|
362
362
|
raise ValueError("Missing required parameter 'billId'.")
|
|
@@ -2927,7 +2927,7 @@ class BillApp(APIApplication):
|
|
|
2927
2927
|
HTTPStatusError: Raised when the API request fails with detailed error information including status code and response body.
|
|
2928
2928
|
|
|
2929
2929
|
Tags:
|
|
2930
|
-
customers
|
|
2930
|
+
customers, important
|
|
2931
2931
|
"""
|
|
2932
2932
|
if customerId is None:
|
|
2933
2933
|
raise ValueError("Missing required parameter 'customerId'.")
|
|
@@ -3155,9 +3155,7 @@ class BoxApp(APIApplication):
|
|
|
3155
3155
|
except ValueError:
|
|
3156
3156
|
return None
|
|
3157
3157
|
|
|
3158
|
-
def delete_folders_id(
|
|
3159
|
-
self, folder_id: str, recursive: bool | None = None
|
|
3160
|
-
) -> Any:
|
|
3158
|
+
def delete_folders_id(self, folder_id: str, recursive: bool | None = None) -> Any:
|
|
3161
3159
|
"""
|
|
3162
3160
|
Delete folder
|
|
3163
3161
|
|
|
@@ -11630,9 +11628,7 @@ class BoxApp(APIApplication):
|
|
|
11630
11628
|
except ValueError:
|
|
11631
11629
|
return None
|
|
11632
11630
|
|
|
11633
|
-
def create_shield_barriers(
|
|
11634
|
-
self, enterprise: Any | None = None
|
|
11635
|
-
) -> dict[str, Any]:
|
|
11631
|
+
def create_shield_barriers(self, enterprise: Any | None = None) -> dict[str, Any]:
|
|
11636
11632
|
"""
|
|
11637
11633
|
Create shield information barrier
|
|
11638
11634
|
|
|
@@ -927,9 +927,7 @@ class BrazeApp(APIApplication):
|
|
|
927
927
|
except ValueError:
|
|
928
928
|
return None
|
|
929
929
|
|
|
930
|
-
def add_email_to_blocklist(
|
|
931
|
-
self, email: list[str] | None = None
|
|
932
|
-
) -> dict[str, Any]:
|
|
930
|
+
def add_email_to_blocklist(self, email: list[str] | None = None) -> dict[str, Any]:
|
|
933
931
|
"""
|
|
934
932
|
Blocklist Email Addresses
|
|
935
933
|
|
|
@@ -2367,9 +2365,7 @@ class BrazeApp(APIApplication):
|
|
|
2367
2365
|
except ValueError:
|
|
2368
2366
|
return None
|
|
2369
2367
|
|
|
2370
|
-
def list_scheduled_broadcasts(
|
|
2371
|
-
self, end_time: str | None = None
|
|
2372
|
-
) -> dict[str, Any]:
|
|
2368
|
+
def list_scheduled_broadcasts(self, end_time: str | None = None) -> dict[str, Any]:
|
|
2373
2369
|
"""
|
|
2374
2370
|
List Upcoming Scheduled Campaigns and Canvases
|
|
2375
2371
|
|
|
@@ -6,7 +6,7 @@ from universal_mcp.integrations import Integration
|
|
|
6
6
|
|
|
7
7
|
class CalComV2App(APIApplication):
|
|
8
8
|
def __init__(self, integration: Integration = None, **kwargs) -> None:
|
|
9
|
-
super().__init__(name="
|
|
9
|
+
super().__init__(name="cal_com_v2", integration=integration, **kwargs)
|
|
10
10
|
self.base_url = "https://api.cal.com"
|
|
11
11
|
|
|
12
12
|
def get_provider_details(self, clientId: str) -> dict[str, Any]:
|
|
@@ -34,9 +34,7 @@ class CalComV2App(APIApplication):
|
|
|
34
34
|
self._handle_response(response)
|
|
35
35
|
)
|
|
36
36
|
|
|
37
|
-
def get_provider_access_token(
|
|
38
|
-
self, clientId: str
|
|
39
|
-
) -> dict[str, Any]:
|
|
37
|
+
def get_provider_access_token(self, clientId: str) -> dict[str, Any]:
|
|
40
38
|
"""
|
|
41
39
|
Retrieves an access token for the specified client ID using a GET request.
|
|
42
40
|
|
|
@@ -215,9 +213,7 @@ class CalComV2App(APIApplication):
|
|
|
215
213
|
self._handle_response(response)
|
|
216
214
|
)
|
|
217
215
|
|
|
218
|
-
def get_oauth_client_user_by_id(
|
|
219
|
-
self, clientId: str, userId: str
|
|
220
|
-
) -> dict[str, Any]:
|
|
216
|
+
def get_oauth_client_user_by_id(self, clientId: str, userId: str) -> dict[str, Any]:
|
|
221
217
|
"""
|
|
222
218
|
Retrieves user-specific information associated with an OAuth client using the provided client ID and user ID.
|
|
223
219
|
|
|
@@ -307,9 +303,7 @@ class CalComV2App(APIApplication):
|
|
|
307
303
|
self._handle_response(response)
|
|
308
304
|
)
|
|
309
305
|
|
|
310
|
-
def delete_user_by_client_id_id(
|
|
311
|
-
self, clientId: str, userId: str
|
|
312
|
-
) -> dict[str, Any]:
|
|
306
|
+
def delete_user_by_client_id_id(self, clientId: str, userId: str) -> dict[str, Any]:
|
|
313
307
|
"""
|
|
314
308
|
Removes a user's association with an OAuth client identified by the client ID and user ID.
|
|
315
309
|
|
|
@@ -337,9 +331,7 @@ class CalComV2App(APIApplication):
|
|
|
337
331
|
self._handle_response(response)
|
|
338
332
|
)
|
|
339
333
|
|
|
340
|
-
def force_refresh_user(
|
|
341
|
-
self, clientId: str, userId: str
|
|
342
|
-
) -> dict[str, Any]:
|
|
334
|
+
def force_refresh_user(self, clientId: str, userId: str) -> dict[str, Any]:
|
|
343
335
|
"""
|
|
344
336
|
Forces a refresh for the OAuth client's user session, invalidating existing tokens and generating new ones.
|
|
345
337
|
|
|
@@ -797,9 +789,7 @@ class CalComV2App(APIApplication):
|
|
|
797
789
|
self._handle_response(response)
|
|
798
790
|
)
|
|
799
791
|
|
|
800
|
-
def delete_org_attribute(
|
|
801
|
-
self, orgId: str, attributeId: str
|
|
802
|
-
) -> dict[str, Any]:
|
|
792
|
+
def delete_org_attribute(self, orgId: str, attributeId: str) -> dict[str, Any]:
|
|
803
793
|
"""
|
|
804
794
|
Deletes a specified attribute from an organization using the provided orgId and attributeId path parameters.
|
|
805
795
|
|
|
@@ -874,9 +864,7 @@ class CalComV2App(APIApplication):
|
|
|
874
864
|
self._handle_response(response)
|
|
875
865
|
)
|
|
876
866
|
|
|
877
|
-
def get_org_attribute_options(
|
|
878
|
-
self, orgId: str, attributeId: str
|
|
879
|
-
) -> dict[str, Any]:
|
|
867
|
+
def get_org_attribute_options(self, orgId: str, attributeId: str) -> dict[str, Any]:
|
|
880
868
|
"""
|
|
881
869
|
Retrieves options for a specific attribute within an organization using the "GET" method at the "/v2/organizations/{orgId}/attributes/{attributeId}/options" endpoint.
|
|
882
870
|
|
|
@@ -1039,9 +1027,7 @@ class CalComV2App(APIApplication):
|
|
|
1039
1027
|
self._handle_response(response)
|
|
1040
1028
|
)
|
|
1041
1029
|
|
|
1042
|
-
def get_user_org_attribute_options(
|
|
1043
|
-
self, orgId: str, userId: str
|
|
1044
|
-
) -> dict[str, Any]:
|
|
1030
|
+
def get_user_org_attribute_options(self, orgId: str, userId: str) -> dict[str, Any]:
|
|
1045
1031
|
"""
|
|
1046
1032
|
Retrieves attribute options for a specified user within an organization using the "GET" method.
|
|
1047
1033
|
|
|
@@ -1507,9 +1493,7 @@ class CalComV2App(APIApplication):
|
|
|
1507
1493
|
self._handle_response(response)
|
|
1508
1494
|
)
|
|
1509
1495
|
|
|
1510
|
-
def get_org_membership_by_id(
|
|
1511
|
-
self, orgId: str, membershipId: str
|
|
1512
|
-
) -> dict[str, Any]:
|
|
1496
|
+
def get_org_membership_by_id(self, orgId: str, membershipId: str) -> dict[str, Any]:
|
|
1513
1497
|
"""
|
|
1514
1498
|
Retrieves membership details for a specific organization membership using the provided organization ID and membership ID.
|
|
1515
1499
|
|
|
@@ -1704,9 +1688,7 @@ class CalComV2App(APIApplication):
|
|
|
1704
1688
|
self._handle_response(response)
|
|
1705
1689
|
)
|
|
1706
1690
|
|
|
1707
|
-
def get_user_schedule(
|
|
1708
|
-
self, orgId: str, userId: str
|
|
1709
|
-
) -> dict[str, Any]:
|
|
1691
|
+
def get_user_schedule(self, orgId: str, userId: str) -> dict[str, Any]:
|
|
1710
1692
|
"""
|
|
1711
1693
|
Retrieves a user's schedule for a specific organization using the GET method.
|
|
1712
1694
|
|
|
@@ -2013,9 +1995,7 @@ class CalComV2App(APIApplication):
|
|
|
2013
1995
|
self._handle_response(response)
|
|
2014
1996
|
)
|
|
2015
1997
|
|
|
2016
|
-
def get_organization_team_by_id(
|
|
2017
|
-
self, orgId: str, teamId: str
|
|
2018
|
-
) -> dict[str, Any]:
|
|
1998
|
+
def get_organization_team_by_id(self, orgId: str, teamId: str) -> dict[str, Any]:
|
|
2019
1999
|
"""
|
|
2020
2000
|
Retrieves information about a specific team within an organization using the organization and team IDs.
|
|
2021
2001
|
|
|
@@ -2043,9 +2023,7 @@ class CalComV2App(APIApplication):
|
|
|
2043
2023
|
self._handle_response(response)
|
|
2044
2024
|
)
|
|
2045
2025
|
|
|
2046
|
-
def delete_team_by_id(
|
|
2047
|
-
self, orgId: str, teamId: str
|
|
2048
|
-
) -> dict[str, Any]:
|
|
2026
|
+
def delete_team_by_id(self, orgId: str, teamId: str) -> dict[str, Any]:
|
|
2049
2027
|
"""
|
|
2050
2028
|
Deletes a specific team within an organization and returns a success status upon completion.
|
|
2051
2029
|
|
|
@@ -2838,9 +2816,7 @@ class CalComV2App(APIApplication):
|
|
|
2838
2816
|
response = self._get(url, params=query_params)
|
|
2839
2817
|
return Getbookingbyuidresponse.model_validate(self._handle_response(response))
|
|
2840
2818
|
|
|
2841
|
-
def reschedule_booking_by_uid(
|
|
2842
|
-
self, bookingUid: str
|
|
2843
|
-
) -> dict[str, Any]:
|
|
2819
|
+
def reschedule_booking_by_uid(self, bookingUid: str) -> dict[str, Any]:
|
|
2844
2820
|
"""
|
|
2845
2821
|
Reschedules an existing booking identified by its unique `bookingUid`, using the `POST` method at the "/v2/bookings/{bookingUid}/reschedule" endpoint.
|
|
2846
2822
|
|
|
@@ -3341,9 +3317,7 @@ class CalComV2App(APIApplication):
|
|
|
3341
3317
|
self._handle_response(response)
|
|
3342
3318
|
)
|
|
3343
3319
|
|
|
3344
|
-
def conferencing_controller_connect(
|
|
3345
|
-
self, app: str
|
|
3346
|
-
) -> dict[str, Any]:
|
|
3320
|
+
def conferencing_controller_connect(self, app: str) -> dict[str, Any]:
|
|
3347
3321
|
"""
|
|
3348
3322
|
Establishes a connection for conferencing using the specified application via the POST method at the "/v2/conferencing/{app}/connect" endpoint.
|
|
3349
3323
|
|
|
@@ -3452,9 +3426,7 @@ class CalComV2App(APIApplication):
|
|
|
3452
3426
|
response = self._get(url, params=query_params)
|
|
3453
3427
|
return Listconferencingresponse.model_validate(self._handle_response(response))
|
|
3454
3428
|
|
|
3455
|
-
def conferencing_controller_default(
|
|
3456
|
-
self, app: str
|
|
3457
|
-
) -> dict[str, Any]:
|
|
3429
|
+
def conferencing_controller_default(self, app: str) -> dict[str, Any]:
|
|
3458
3430
|
"""
|
|
3459
3431
|
Sets the default conferencing application for the specified app identifier.
|
|
3460
3432
|
|
|
@@ -3823,9 +3795,7 @@ class CalComV2App(APIApplication):
|
|
|
3823
3795
|
self._handle_response(response)
|
|
3824
3796
|
)
|
|
3825
3797
|
|
|
3826
|
-
def get_webhook_by_id(
|
|
3827
|
-
self, eventTypeId: str, webhookId: str
|
|
3828
|
-
) -> dict[str, Any]:
|
|
3798
|
+
def get_webhook_by_id(self, eventTypeId: str, webhookId: str) -> dict[str, Any]:
|
|
3829
3799
|
"""
|
|
3830
3800
|
Retrieves details about a specific webhook for a given event type using the provided event type ID and webhook ID.
|
|
3831
3801
|
|
|
@@ -4366,9 +4336,7 @@ class CalComV2App(APIApplication):
|
|
|
4366
4336
|
self._handle_response(response)
|
|
4367
4337
|
)
|
|
4368
4338
|
|
|
4369
|
-
def stripe_controller_save(
|
|
4370
|
-
self, state: str, code: str
|
|
4371
|
-
) -> dict[str, Any]:
|
|
4339
|
+
def stripe_controller_save(self, state: str, code: str) -> dict[str, Any]:
|
|
4372
4340
|
"""
|
|
4373
4341
|
Retrieves a Stripe resource using a state and code query parameter and returns the result upon successful authentication.
|
|
4374
4342
|
|
|
@@ -4551,9 +4519,7 @@ class CalComV2App(APIApplication):
|
|
|
4551
4519
|
self._handle_response(response)
|
|
4552
4520
|
)
|
|
4553
4521
|
|
|
4554
|
-
def teams_controller_get_team(
|
|
4555
|
-
self, teamId: str
|
|
4556
|
-
) -> dict[str, Any]:
|
|
4522
|
+
def teams_controller_get_team(self, teamId: str) -> dict[str, Any]:
|
|
4557
4523
|
"""
|
|
4558
4524
|
Retrieves information about a team specified by the team ID using the GET method.
|
|
4559
4525
|
|
|
@@ -4672,9 +4638,7 @@ class CalComV2App(APIApplication):
|
|
|
4672
4638
|
self._handle_response(response)
|
|
4673
4639
|
)
|
|
4674
4640
|
|
|
4675
|
-
def teams_controller_delete_team(
|
|
4676
|
-
self, teamId: str
|
|
4677
|
-
) -> dict[str, Any]:
|
|
4641
|
+
def teams_controller_delete_team(self, teamId: str) -> dict[str, Any]:
|
|
4678
4642
|
"""
|
|
4679
4643
|
Deletes a specified team using the provided team ID.
|
|
4680
4644
|
|
|
@@ -5089,9 +5053,7 @@ class CalComV2App(APIApplication):
|
|
|
5089
5053
|
self._handle_response(response)
|
|
5090
5054
|
)
|
|
5091
5055
|
|
|
5092
|
-
def get_membership_by_id(
|
|
5093
|
-
self, teamId: str, membershipId: str
|
|
5094
|
-
) -> dict[str, Any]:
|
|
5056
|
+
def get_membership_by_id(self, teamId: str, membershipId: str) -> dict[str, Any]:
|
|
5095
5057
|
"""
|
|
5096
5058
|
Retrieves the membership details for a specific user in a team using the provided membership ID.
|
|
5097
5059
|
|
|
@@ -5341,9 +5303,7 @@ class CalComV2App(APIApplication):
|
|
|
5341
5303
|
self._handle_response(response)
|
|
5342
5304
|
)
|
|
5343
5305
|
|
|
5344
|
-
def webhooks_controller_get_webhook(
|
|
5345
|
-
self, webhookId: str
|
|
5346
|
-
) -> dict[str, Any]:
|
|
5306
|
+
def webhooks_controller_get_webhook(self, webhookId: str) -> dict[str, Any]:
|
|
5347
5307
|
"""
|
|
5348
5308
|
Retrieves information about a specific webhook identified by its ID using the "GET" method.
|
|
5349
5309
|
|
|
@@ -5368,9 +5328,7 @@ class CalComV2App(APIApplication):
|
|
|
5368
5328
|
self._handle_response(response)
|
|
5369
5329
|
)
|
|
5370
5330
|
|
|
5371
|
-
def delete_user_webhook_by_id(
|
|
5372
|
-
self, webhookId: str
|
|
5373
|
-
) -> dict[str, Any]:
|
|
5331
|
+
def delete_user_webhook_by_id(self, webhookId: str) -> dict[str, Any]:
|
|
5374
5332
|
"""
|
|
5375
5333
|
Deletes a webhook by its ID using the DELETE method at the "/v2/webhooks/{webhookId}" path, removing the specified webhook endpoint.
|
|
5376
5334
|
|
|
@@ -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"""
|