universal-mcp-applications 0.1.12__py3-none-any.whl → 0.1.14__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 (54) hide show
  1. universal_mcp/applications/aws_s3/app.py +71 -71
  2. universal_mcp/applications/calendly/app.py +199 -199
  3. universal_mcp/applications/canva/app.py +189 -189
  4. universal_mcp/applications/domain_checker/app.py +31 -24
  5. universal_mcp/applications/e2b/app.py +6 -7
  6. universal_mcp/applications/elevenlabs/app.py +24 -20
  7. universal_mcp/applications/exa/app.py +25 -20
  8. universal_mcp/applications/falai/app.py +44 -41
  9. universal_mcp/applications/file_system/app.py +20 -12
  10. universal_mcp/applications/firecrawl/app.py +46 -47
  11. universal_mcp/applications/fireflies/app.py +79 -79
  12. universal_mcp/applications/fpl/app.py +83 -74
  13. universal_mcp/applications/github/README.md +0 -1028
  14. universal_mcp/applications/github/app.py +55 -50227
  15. universal_mcp/applications/google_calendar/app.py +63 -65
  16. universal_mcp/applications/google_docs/app.py +78 -78
  17. universal_mcp/applications/google_drive/app.py +361 -440
  18. universal_mcp/applications/google_gemini/app.py +34 -17
  19. universal_mcp/applications/google_mail/app.py +164 -118
  20. universal_mcp/applications/google_searchconsole/app.py +41 -47
  21. universal_mcp/applications/google_sheet/app.py +157 -164
  22. universal_mcp/applications/http_tools/app.py +16 -16
  23. universal_mcp/applications/linkedin/app.py +26 -31
  24. universal_mcp/applications/ms_teams/app.py +190 -190
  25. universal_mcp/applications/openai/app.py +55 -56
  26. universal_mcp/applications/outlook/app.py +57 -57
  27. universal_mcp/applications/perplexity/app.py +17 -17
  28. universal_mcp/applications/reddit/app.py +225 -4053
  29. universal_mcp/applications/replicate/app.py +40 -42
  30. universal_mcp/applications/resend/app.py +157 -154
  31. universal_mcp/applications/scraper/app.py +24 -24
  32. universal_mcp/applications/serpapi/app.py +18 -20
  33. universal_mcp/applications/sharepoint/app.py +46 -36
  34. universal_mcp/applications/slack/app.py +66 -66
  35. universal_mcp/applications/tavily/app.py +7 -7
  36. universal_mcp/applications/twitter/api_segments/compliance_api.py +17 -20
  37. universal_mcp/applications/twitter/api_segments/dm_conversations_api.py +35 -40
  38. universal_mcp/applications/twitter/api_segments/dm_events_api.py +18 -21
  39. universal_mcp/applications/twitter/api_segments/likes_api.py +19 -22
  40. universal_mcp/applications/twitter/api_segments/lists_api.py +59 -68
  41. universal_mcp/applications/twitter/api_segments/spaces_api.py +36 -42
  42. universal_mcp/applications/twitter/api_segments/trends_api.py +7 -8
  43. universal_mcp/applications/twitter/api_segments/tweets_api.py +159 -185
  44. universal_mcp/applications/twitter/api_segments/usage_api.py +5 -6
  45. universal_mcp/applications/twitter/api_segments/users_api.py +230 -264
  46. universal_mcp/applications/unipile/app.py +99 -105
  47. universal_mcp/applications/whatsapp/app.py +86 -82
  48. universal_mcp/applications/whatsapp_business/app.py +147 -147
  49. universal_mcp/applications/youtube/app.py +290 -290
  50. universal_mcp/applications/zenquotes/app.py +6 -6
  51. {universal_mcp_applications-0.1.12.dist-info → universal_mcp_applications-0.1.14.dist-info}/METADATA +2 -2
  52. {universal_mcp_applications-0.1.12.dist-info → universal_mcp_applications-0.1.14.dist-info}/RECORD +54 -54
  53. {universal_mcp_applications-0.1.12.dist-info → universal_mcp_applications-0.1.14.dist-info}/WHEEL +0 -0
  54. {universal_mcp_applications-0.1.12.dist-info → universal_mcp_applications-0.1.14.dist-info}/licenses/LICENSE +0 -0
@@ -38,13 +38,13 @@ class HttpToolsApp(APIApplication):
38
38
  self, url: str, headers: dict | None = None, query_params: dict | None = None
39
39
  ):
40
40
  """
41
- Perform a GET request to the specified URL with optional parameters.
42
-
41
+ Executes an HTTP GET request to a given URL with optional headers and query parameters. It handles HTTP errors by raising an exception and processes the response, returning parsed JSON or a dictionary with the raw text and status details if JSON is unavailable.
42
+
43
43
  Args:
44
44
  url (str): The URL to send the GET request to. Example: "https://api.example.com/data"
45
45
  headers (dict, optional): Optional HTTP headers to include in the request. Example: {"Authorization": "Bearer token"}
46
46
  query_params (dict, optional): Optional dictionary of query parameters to include in the request. Example: {"page": 1}
47
-
47
+
48
48
  Returns:
49
49
  dict: The JSON response from the GET request, or text if not JSON.
50
50
  Tags:
@@ -61,13 +61,13 @@ class HttpToolsApp(APIApplication):
61
61
  self, url: str, headers: dict | None = None, body: dict | None = None
62
62
  ):
63
63
  """
64
- Perform a POST request to the specified URL with optional parameters.
65
-
64
+ Sends an HTTP POST request to a URL with an optional JSON body and headers. It returns the parsed JSON response or raw text if parsing fails and raises an exception for HTTP errors. It is used for creating new resources, unlike http_get which retrieves data.
65
+
66
66
  Args:
67
67
  url (str): The URL to send the POST request to. Example: "https://api.example.com/data"
68
68
  headers (dict, optional): Optional HTTP headers to include in the request. Example: {"Content-Type": "application/json"}
69
69
  body (dict, optional): Optional JSON body to include in the request. Example: {"name": "John"}
70
-
70
+
71
71
  Returns:
72
72
  dict: The JSON response from the POST request, or text if not JSON.
73
73
  Tags:
@@ -80,13 +80,13 @@ class HttpToolsApp(APIApplication):
80
80
 
81
81
  def http_put(self, url: str, headers: dict | None = None, body: dict | None = None):
82
82
  """
83
- Perform a PUT request to the specified URL with optional parameters.
84
-
83
+ Performs an HTTP PUT request to update or replace a resource at a specified URL. It accepts an optional JSON body and headers, raises an exception for error responses, and returns the parsed JSON response or a dictionary with the raw text and status details.
84
+
85
85
  Args:
86
86
  url (str): The URL to send the PUT request to. Example: "https://api.example.com/data/1"
87
87
  headers (dict, optional): Optional HTTP headers to include in the request. Example: {"Authorization": "Bearer token"}
88
88
  body (dict, optional): Optional JSON body to include in the request. Example: {"name": "Jane"}
89
-
89
+
90
90
  Returns:
91
91
  dict: The JSON response from the PUT request, or text if not JSON.
92
92
  Tags:
@@ -101,20 +101,20 @@ class HttpToolsApp(APIApplication):
101
101
  self, url: str, headers: dict | None = None, body: dict | None = None
102
102
  ):
103
103
  """
104
- Perform a DELETE request to the specified URL with optional parameters.
105
-
104
+ Sends an HTTP DELETE request to a URL with optional headers and a JSON body. Raises an exception for HTTP error statuses and returns the parsed JSON response. If the response isn't JSON, it returns the text content, status code, and headers.
105
+
106
106
  Args:
107
107
  url (str): The URL to send the DELETE request to. Example: "https://api.example.com/data/1"
108
108
  headers (dict, optional): Optional HTTP headers to include in the request. Example: {"Authorization": "Bearer token"}
109
109
  body (dict, optional): Optional JSON body to include in the request. Example: {"reason": "obsolete"}
110
-
110
+
111
111
  Returns:
112
112
  dict: The JSON response from the DELETE request, or text if not JSON.
113
113
  Tags:
114
114
  delete, important
115
115
  """
116
116
  logger.debug(f"DELETE request to {url} with headers {headers} and body {body}")
117
- response = httpx.delete(url, json=body, headers=headers)
117
+ response = httpx.delete(url, headers=headers)
118
118
  response.raise_for_status()
119
119
  return self._handle_response(response)
120
120
 
@@ -122,13 +122,13 @@ class HttpToolsApp(APIApplication):
122
122
  self, url: str, headers: dict | None = None, body: dict | None = None
123
123
  ):
124
124
  """
125
- Perform a PATCH request to the specified URL with optional parameters.
126
-
125
+ Sends an HTTP PATCH request to apply partial modifications to a resource at a given URL. It accepts optional headers and a JSON body. It returns the parsed JSON response, or the raw text with status details if the response is not valid JSON.
126
+
127
127
  Args:
128
128
  url (str): The URL to send the PATCH request to. Example: "https://api.example.com/data/1"
129
129
  headers (dict, optional): Optional HTTP headers to include in the request. Example: {"Authorization": "Bearer token"}
130
130
  body (dict, optional): Optional JSON body to include in the request. Example: {"status": "active"}
131
-
131
+
132
132
  Returns:
133
133
  dict: The JSON response from the PATCH request, or text if not JSON.
134
134
  Tags:
@@ -37,31 +37,26 @@ class LinkedinApp(APIApplication):
37
37
  is_reshare_disabled: bool = False,
38
38
  ) -> dict[str, str]:
39
39
  """
40
- Create a post on LinkedIn.
41
-
40
+ Publishes a new text post to a specified LinkedIn author's feed (person or organization). It requires commentary and allows configuring visibility, distribution, and lifecycle state. Upon success, it returns the unique URN and a direct URL for the newly created post, distinguishing it from update/delete operations.
41
+
42
42
  Args:
43
43
  commentary (str): The user generated commentary for the post. Supports mentions using format "@[Entity Name](urn:li:organization:123456)" and hashtags using "#keyword". Text linking to annotated entities must match the name exactly (case sensitive). For member mentions, partial name matching is supported.
44
-
45
44
  author (str): The URN of the author creating the post. Use "urn:li:person:{id}" for individual posts or "urn:li:organization:{id}" for company page posts. Example: "urn:li:person:wGgGaX_xbB" or "urn:li:organization:2414183"
46
-
47
45
  visibility (str): Controls who can view the post. Use "PUBLIC" for posts viewable by anyone on LinkedIn or "CONNECTIONS" for posts viewable by 1st-degree connections only. Defaults to "PUBLIC".
48
-
49
46
  distribution (dict[str, Any], optional): Distribution settings for the post. If not provided, defaults to {"feedDistribution": "MAIN_FEED", "targetEntities": [], "thirdPartyDistributionChannels": []}. feedDistribution controls where the post appears in feeds, targetEntities specifies entities to target, and thirdPartyDistributionChannels defines external distribution channels.
50
-
51
47
  lifecycle_state (str): The state of the post. Use "PUBLISHED" for live posts accessible to all entities, "DRAFT" for posts accessible only to author, "PUBLISH_REQUESTED" for posts submitted but processing, or "PUBLISH_FAILED" for posts that failed to publish. Defaults to "PUBLISHED".
52
-
53
48
  is_reshare_disabled (bool): Whether resharing is disabled by the author. Set to True to prevent other users from resharing this post, or False to allow resharing. Defaults to False.
54
-
49
+
55
50
  Returns:
56
51
  dict[str, str]: Dictionary containing the post ID with key "post_id". Example: {"post_id": "urn:li:share:6844785523593134080"}
57
-
52
+
58
53
  Raises:
59
54
  ValueError: If required parameters (commentary, author) are missing or if x-restli-id header is not found
60
55
  HTTPStatusError: Raised when the API request fails with detailed error information including status code and response body
61
-
56
+
62
57
  Notes:
63
58
  Requires LinkedIn API permissions: w_member_social (for individual posts) or w_organization_social (for company posts). All requests require headers: X-Restli-Protocol-Version: 2.0.0 and LinkedIn-Version: 202507. Rate limits: 150 requests per day per member, 100,000 requests per day per application. The Posts API replaces the deprecated ugcPosts API.
64
-
59
+
65
60
  Tags:
66
61
  posts, important
67
62
  """
@@ -102,17 +97,17 @@ class LinkedinApp(APIApplication):
102
97
  "post_url": f"https://www.linkedin.com/feed/update/{post_id}",
103
98
  }
104
99
 
105
- def get_your_info(self) -> dict[str, Any]:
100
+ def get_authenticated_user_profile(self) -> dict[str, Any]:
106
101
  """
107
- Get your LinkedIn profile information.
108
-
102
+ Retrieves the authenticated user's profile information from the LinkedIn `/v2/userinfo` endpoint. It returns a dictionary containing the user's basic profile details, such as name and email, using the credentials from the active integration.
103
+
109
104
  Returns:
110
105
  dict[str, Any]: Dictionary containing your LinkedIn profile information.
111
-
106
+
112
107
  Raises:
113
108
  ValueError: If integration is not found
114
109
  HTTPStatusError: Raised when the API request fails with detailed error information including status code and response body
115
-
110
+
116
111
  Tags:
117
112
  profile, info
118
113
  """
@@ -128,19 +123,19 @@ class LinkedinApp(APIApplication):
128
123
 
129
124
  def delete_post(self, post_urn: str) -> dict[str, str]:
130
125
  """
131
- Delete a post on LinkedIn.
132
-
126
+ Deletes a specific LinkedIn post identified by its unique Uniform Resource Name (URN). The function sends a DELETE request to the LinkedIn API and returns a confirmation dictionary with the deletion status upon a successful (HTTP 204) response.
127
+
133
128
  Args:
134
129
  post_urn (str): The URN of the post to delete. Can be either a ugcPostUrn (urn:li:ugcPost:{id}) or shareUrn (urn:li:share:{id}).
135
-
130
+
136
131
  Returns:
137
132
  dict[str, str]: Dictionary containing the deletion status. Example: {"status": "deleted", "post_urn": "urn:li:share:6844785523593134080"}
138
-
133
+
139
134
  Raises:
140
135
  ValueError: If required parameter (post_urn) is missing or if integration is not found
141
136
  HTTPStatusError: Raised when the API request fails with detailed error information including status code and response body
142
-
143
-
137
+
138
+
144
139
  Tags:
145
140
  posts, important
146
141
  """
@@ -168,8 +163,8 @@ class LinkedinApp(APIApplication):
168
163
  ad_context_status: str | None = None,
169
164
  ) -> dict[str, str]:
170
165
  """
171
- Update a post on LinkedIn.
172
-
166
+ Modifies an existing LinkedIn post identified by its URN. This function performs a partial update, allowing changes to specific attributes such as commentary, call-to-action details, lifecycle state, or sponsored ad context. It returns a confirmation dictionary upon successful completion of the PATCH request.
167
+
173
168
  Args:
174
169
  post_urn (str): The URN of the post to update. Can be either a ugcPostUrn (urn:li:ugcPost:{id}) or shareUrn (urn:li:share:{id}).
175
170
  commentary (str | None, optional): The user generated commentary of this post in little format.
@@ -178,17 +173,17 @@ class LinkedinApp(APIApplication):
178
173
  lifecycle_state (str | None, optional): The state of the content. Can be DRAFT, PUBLISHED, PUBLISH_REQUESTED, or PUBLISH_FAILED.
179
174
  ad_context_name (str | None, optional): Update the name of the sponsored content.
180
175
  ad_context_status (str | None, optional): Update the status of the sponsored content.
181
-
176
+
182
177
  Returns:
183
178
  dict[str, str]: Dictionary containing the update status. Example: {"status": "updated", "post_urn": "urn:li:share:6844785523593134080"}
184
-
179
+
185
180
  Raises:
186
181
  ValueError: If required parameter (post_urn) is missing or if integration is not found
187
182
  HTTPStatusError: Raised when the API request fails with detailed error information including status code and response body
188
-
189
-
190
-
191
-
183
+
184
+
185
+
186
+
192
187
  Tags:
193
188
  posts, update, important
194
189
  """
@@ -237,7 +232,7 @@ class LinkedinApp(APIApplication):
237
232
  """
238
233
  return [
239
234
  self.create_post,
240
- self.get_your_info,
235
+ self.get_authenticated_user_profile,
241
236
  self.delete_post,
242
237
  self.update_post,
243
238
  ]