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
@@ -30,7 +30,7 @@ class AwsS3App(BaseApplication):
30
30
  @property
31
31
  def client(self):
32
32
  """
33
- Gets the S3 client.
33
+ Lazily initializes and returns a cached Boto3 S3 client instance. It retrieves authentication credentials from the associated `integration` object. This property is the core mechanism used by all other methods in the class to interact with AWS S3, raising an error if the integration is not set.
34
34
  """
35
35
  if not self.integration:
36
36
  raise ValueError("Integration not initialized")
@@ -48,8 +48,8 @@ class AwsS3App(BaseApplication):
48
48
 
49
49
  def list_buckets(self) -> list[str]:
50
50
  """
51
- Lists all S3 buckets.
52
-
51
+ Retrieves all S3 buckets accessible by the configured AWS credentials. It calls the S3 API's list_buckets operation and processes the response to return a simple list containing just the names of the buckets.
52
+
53
53
  Returns:
54
54
  List[str]: A list of bucket names.
55
55
  """
@@ -58,12 +58,12 @@ class AwsS3App(BaseApplication):
58
58
 
59
59
  def create_bucket(self, bucket_name: str, region: str | None = None) -> bool:
60
60
  """
61
- Creates a new S3 bucket.
62
-
61
+ Creates a new Amazon S3 bucket with a specified name and optional region. Returns `True` upon successful creation, or `False` if an AWS client error, such as a naming conflict or permission issue, occurs.
62
+
63
63
  Args:
64
64
  bucket_name (str): The name of the bucket to create.
65
65
  region (str, optional): The region to create the bucket in.
66
-
66
+
67
67
  Returns:
68
68
  bool: True if the bucket was created successfully.
69
69
  Tags:
@@ -83,11 +83,11 @@ class AwsS3App(BaseApplication):
83
83
 
84
84
  def delete_bucket(self, bucket_name: str) -> bool:
85
85
  """
86
- Deletes an S3 bucket (must be empty).
87
-
86
+ Deletes a specified S3 bucket. The operation requires the bucket to be empty to succeed. It returns `True` if the bucket is successfully deleted and `False` if an error occurs, such as the bucket not being found or containing objects.
87
+
88
88
  Args:
89
89
  bucket_name (str): The name of the bucket to delete.
90
-
90
+
91
91
  Returns:
92
92
  bool: True if the bucket was deleted successfully.
93
93
  Tags:
@@ -101,11 +101,11 @@ class AwsS3App(BaseApplication):
101
101
 
102
102
  def get_bucket_policy(self, bucket_name: str) -> dict[str, Any]:
103
103
  """
104
- Gets the bucket policy for the specified bucket.
105
-
104
+ Retrieves the IAM resource policy for a specified S3 bucket, parsing the JSON string into a dictionary. If the operation fails due to permissions or a non-existent policy, it returns an error dictionary. This complements `put_bucket_policy`, which applies a new policy.
105
+
106
106
  Args:
107
107
  bucket_name (str): The name of the S3 bucket.
108
-
108
+
109
109
  Returns:
110
110
  Dict[str, Any]: The bucket policy as a dictionary.
111
111
  Tags:
@@ -117,14 +117,14 @@ class AwsS3App(BaseApplication):
117
117
  except ClientError as e:
118
118
  return {"error": str(e)}
119
119
 
120
- def put_bucket_policy(self, bucket_name: str, policy: dict[str, Any]) -> bool:
120
+ def set_bucket_policy(self, bucket_name: str, policy: dict[str, Any]) -> bool:
121
121
  """
122
- Sets the bucket policy for the specified bucket.
123
-
122
+ Applies or replaces the access policy for a specified S3 bucket. The function accepts the policy as a dictionary, converts it to JSON, and assigns it to the bucket. This write operation is the counterpart to `get_bucket_policy` and returns `True` on success.
123
+
124
124
  Args:
125
125
  bucket_name (str): The name of the S3 bucket.
126
126
  policy (Dict[str, Any]): The bucket policy as a dictionary.
127
-
127
+
128
128
  Returns:
129
129
  bool: True if the policy was set successfully.
130
130
  Tags:
@@ -136,14 +136,14 @@ class AwsS3App(BaseApplication):
136
136
  except ClientError:
137
137
  return False
138
138
 
139
- def list_prefixes(self, bucket_name: str, prefix: str | None = None) -> list[str]:
139
+ def list_subdirectories(self, bucket_name: str, prefix: str | None = None) -> list[str]:
140
140
  """
141
- Lists common prefixes ("folders") in the specified S3 bucket and prefix.
142
-
141
+ Lists immediate subdirectories (common prefixes) within an S3 bucket. If a prefix is provided, it returns subdirectories under that path; otherwise, it lists top-level directories. This function specifically lists folders, distinguishing it from `list_objects`, which lists files.
142
+
143
143
  Args:
144
144
  bucket_name (str): The name of the S3 bucket.
145
145
  prefix (str, optional): The prefix to list folders under.
146
-
146
+
147
147
  Returns:
148
148
  List[str]: A list of folder prefixes.
149
149
  Tags:
@@ -163,17 +163,17 @@ class AwsS3App(BaseApplication):
163
163
  prefixes.append(cp.get("Prefix"))
164
164
  return prefixes
165
165
 
166
- def put_prefix(
166
+ def create_prefix(
167
167
  self, bucket_name: str, prefix_name: str, parent_prefix: str | None = None
168
168
  ) -> bool:
169
169
  """
170
- Creates a prefix ("folder") in the specified S3 bucket.
171
-
170
+ Creates a prefix (folder) in an S3 bucket, optionally nested under a parent prefix. It simulates a directory by creating a zero-byte object with a key ending in a slash ('/'), distinguishing it from put_object, which uploads content.
171
+
172
172
  Args:
173
173
  bucket_name (str): The name of the S3 bucket.
174
174
  prefix_name (str): The name of the prefix to create.
175
175
  parent_prefix (str, optional): The parent prefix (folder path).
176
-
176
+
177
177
  Returns:
178
178
  bool: True if the prefix was created successfully.
179
179
  Tags:
@@ -188,12 +188,12 @@ class AwsS3App(BaseApplication):
188
188
 
189
189
  def list_objects(self, bucket_name: str, prefix: str) -> list[dict[str, Any]]:
190
190
  """
191
- Lists all objects in a specified S3 prefix.
192
-
191
+ Paginates through and lists all objects within a specified S3 bucket prefix. It returns a curated list of metadata for each object (key, name, size, last modified), excluding folder placeholders. This function specifically lists files, distinguishing it from `list_prefixes` which lists folders.
192
+
193
193
  Args:
194
194
  bucket_name (str): The name of the S3 bucket.
195
195
  prefix (str): The prefix (folder path) to list objects under.
196
-
196
+
197
197
  Returns:
198
198
  List[Dict[str, Any]]: A list of dictionaries containing object metadata.
199
199
  Tags:
@@ -217,18 +217,18 @@ class AwsS3App(BaseApplication):
217
217
  )
218
218
  return objects
219
219
 
220
- def put_object(
220
+ def put_text_object(
221
221
  self, bucket_name: str, prefix: str, object_name: str, content: str
222
222
  ) -> bool:
223
223
  """
224
- Uploads an object to the specified S3 prefix.
225
-
224
+ Uploads string content to create an object in a specified S3 bucket and prefix. The content is UTF-8 encoded before being written. This method is for text, distinguishing it from `put_object_from_base64` which handles binary data.
225
+
226
226
  Args:
227
227
  bucket_name (str): The name of the S3 bucket.
228
228
  prefix (str): The prefix (folder path) where the object will be created.
229
229
  object_name (str): The name of the object to create.
230
230
  content (str): The content to write into the object.
231
-
231
+
232
232
  Returns:
233
233
  bool: True if the object was created successfully.
234
234
  Tags:
@@ -244,14 +244,14 @@ class AwsS3App(BaseApplication):
244
244
  self, bucket_name: str, prefix: str, object_name: str, base64_content: str
245
245
  ) -> bool:
246
246
  """
247
- Uploads a binary object from base64 content to the specified S3 prefix.
248
-
247
+ Decodes a base64 string into binary data and uploads it as an object to a specified S3 location. This method is designed for binary files, differentiating it from `put_object` which handles plain text content. Returns true on success.
248
+
249
249
  Args:
250
250
  bucket_name (str): The name of the S3 bucket.
251
251
  prefix (str): The prefix (folder path) where the object will be created.
252
252
  object_name (str): The name of the object to create.
253
253
  base64_content (str): The base64-encoded content to upload.
254
-
254
+
255
255
  Returns:
256
256
  bool: True if the object was created successfully.
257
257
  Tags:
@@ -265,14 +265,14 @@ class AwsS3App(BaseApplication):
265
265
  except Exception:
266
266
  return False
267
267
 
268
- def get_object_content(self, bucket_name: str, key: str) -> dict[str, Any]:
268
+ def get_object_with_content(self, bucket_name: str, key: str) -> dict[str, Any]:
269
269
  """
270
- Gets the content of a specified object.
271
-
270
+ Retrieves an S3 object's content. It decodes text files as UTF-8 or encodes binary files as base64 based on the object's key. This function downloads the full object body, unlike `get_object_metadata` which only fetches metadata without content, returning the content, name, size, and type.
271
+
272
272
  Args:
273
273
  bucket_name (str): The name of the S3 bucket.
274
274
  key (str): The key (path) to the object.
275
-
275
+
276
276
  Returns:
277
277
  Dict[str, Any]: A dictionary containing the object's name, content type, content (as text or base64), and size.
278
278
  Tags:
@@ -300,12 +300,12 @@ class AwsS3App(BaseApplication):
300
300
 
301
301
  def get_object_metadata(self, bucket_name: str, key: str) -> dict[str, Any]:
302
302
  """
303
- Gets metadata for a specified object without downloading the content.
304
-
303
+ Efficiently retrieves metadata for a specified S3 object, such as size and last modified date, without downloading its content. This function uses a HEAD request, making it faster than `get_object_content` for accessing object properties. Returns a dictionary of metadata or an error message on failure.
304
+
305
305
  Args:
306
306
  bucket_name (str): The name of the S3 bucket.
307
307
  key (str): The key (path) to the object.
308
-
308
+
309
309
  Returns:
310
310
  Dict[str, Any]: A dictionary containing the object's metadata.
311
311
  Tags:
@@ -331,14 +331,14 @@ class AwsS3App(BaseApplication):
331
331
  self, source_bucket: str, source_key: str, dest_bucket: str, dest_key: str
332
332
  ) -> bool:
333
333
  """
334
- Copies an object from one location to another.
335
-
334
+ Copies an S3 object from a specified source location to a destination, which can be in the same or a different bucket. Unlike `move_object`, the original object remains at the source after the copy operation. It returns `True` for a successful operation.
335
+
336
336
  Args:
337
337
  source_bucket (str): The source bucket name.
338
338
  source_key (str): The source object key.
339
339
  dest_bucket (str): The destination bucket name.
340
340
  dest_key (str): The destination object key.
341
-
341
+
342
342
  Returns:
343
343
  bool: True if the object was copied successfully.
344
344
  Tags:
@@ -357,14 +357,14 @@ class AwsS3App(BaseApplication):
357
357
  self, source_bucket: str, source_key: str, dest_bucket: str, dest_key: str
358
358
  ) -> bool:
359
359
  """
360
- Moves an object from one location to another (copy then delete).
361
-
360
+ Moves an S3 object from a source to a destination. This is achieved by first copying the object to the new location and subsequently deleting the original. The move can occur within the same bucket or between different ones, returning `True` on success.
361
+
362
362
  Args:
363
363
  source_bucket (str): The source bucket name.
364
364
  source_key (str): The source object key.
365
365
  dest_bucket (str): The destination bucket name.
366
366
  dest_key (str): The destination object key.
367
-
367
+
368
368
  Returns:
369
369
  bool: True if the object was moved successfully.
370
370
  Tags:
@@ -374,14 +374,14 @@ class AwsS3App(BaseApplication):
374
374
  return self.delete_object(source_bucket, source_key)
375
375
  return False
376
376
 
377
- def delete_object(self, bucket_name: str, key: str) -> bool:
377
+ def delete_single_object(self, bucket_name: str, key: str) -> bool:
378
378
  """
379
- Deletes an object from S3.
380
-
379
+ Deletes a single, specified object from an S3 bucket using its key. Returns `True` if successful, otherwise `False`. For bulk deletions in a single request, the `delete_objects` function should be used instead.
380
+
381
381
  Args:
382
382
  bucket_name (str): The name of the S3 bucket.
383
383
  key (str): The key (path) to the object to delete.
384
-
384
+
385
385
  Returns:
386
386
  bool: True if the object was deleted successfully.
387
387
  Tags:
@@ -395,12 +395,12 @@ class AwsS3App(BaseApplication):
395
395
 
396
396
  def delete_objects(self, bucket_name: str, keys: list[str]) -> dict[str, Any]:
397
397
  """
398
- Deletes multiple objects from S3.
399
-
398
+ Performs a bulk deletion of objects from a specified S3 bucket in a single request. Given a list of keys, it returns a dictionary detailing successful deletions and any errors. This method is the batch-processing counterpart to the singular `delete_object` function, designed for efficiency.
399
+
400
400
  Args:
401
401
  bucket_name (str): The name of the S3 bucket.
402
402
  keys (List[str]): List of object keys to delete.
403
-
403
+
404
404
  Returns:
405
405
  Dict[str, Any]: Results of the deletion operation.
406
406
  Tags:
@@ -426,14 +426,14 @@ class AwsS3App(BaseApplication):
426
426
  http_method: str = "GET",
427
427
  ) -> str:
428
428
  """
429
- Generates a presigned URL for accessing an S3 object.
430
-
429
+ Generates a temporary, secure URL for a specific S3 object. This URL grants time-limited permissions for actions like GET, PUT, or DELETE, expiring after a defined period. It allows object access without sharing permanent AWS credentials.
430
+
431
431
  Args:
432
432
  bucket_name (str): The name of the S3 bucket.
433
433
  key (str): The key (path) to the object.
434
434
  expiration (int): Time in seconds for the presigned URL to remain valid (default: 3600).
435
435
  http_method (str): HTTP method for the presigned URL (default: 'GET').
436
-
436
+
437
437
  Returns:
438
438
  str: The presigned URL or error message.
439
439
  Tags:
@@ -464,15 +464,15 @@ class AwsS3App(BaseApplication):
464
464
  max_size: int | None = None,
465
465
  ) -> list[dict[str, Any]]:
466
466
  """
467
- Searches for objects in S3 based on various criteria.
468
-
467
+ Filters objects within an S3 bucket and prefix based on a name pattern and size range. It retrieves all objects via `list_objects` and then applies the specified criteria client-side, returning a refined list of matching objects and their metadata.
468
+
469
469
  Args:
470
470
  bucket_name (str): The name of the S3 bucket.
471
471
  prefix (str): The prefix to search within.
472
472
  name_pattern (str): Pattern to match in object names (case-insensitive).
473
473
  min_size (int, optional): Minimum object size in bytes.
474
474
  max_size (int, optional): Maximum object size in bytes.
475
-
475
+
476
476
  Returns:
477
477
  List[Dict[str, Any]]: List of matching objects with metadata.
478
478
  Tags:
@@ -496,14 +496,14 @@ class AwsS3App(BaseApplication):
496
496
 
497
497
  return filtered_objects
498
498
 
499
- def get_bucket_size(self, bucket_name: str, prefix: str = "") -> dict[str, Any]:
499
+ def get_storage_summary(self, bucket_name: str, prefix: str = "") -> dict[str, Any]:
500
500
  """
501
- Calculates the total size and object count for a bucket or prefix.
502
-
501
+ Calculates and returns statistics for an S3 bucket or prefix. The result includes the total number of objects, their combined size in bytes, and a human-readable string representation of the size (e.g., '15.2 MB').
502
+
503
503
  Args:
504
504
  bucket_name (str): The name of the S3 bucket.
505
505
  prefix (str): The prefix to calculate size for (default: entire bucket).
506
-
506
+
507
507
  Returns:
508
508
  Dict[str, Any]: Dictionary containing total size, object count, and human-readable size.
509
509
  Tags:
@@ -533,19 +533,19 @@ class AwsS3App(BaseApplication):
533
533
  self.create_bucket,
534
534
  self.delete_bucket,
535
535
  self.get_bucket_policy,
536
- self.put_bucket_policy,
537
- self.list_prefixes,
538
- self.put_prefix,
536
+ self.set_bucket_policy,
537
+ self.list_subdirectories,
538
+ self.create_prefix,
539
539
  self.list_objects,
540
- self.put_object,
540
+ self.put_text_object,
541
541
  self.put_object_from_base64,
542
- self.get_object_content,
542
+ self.get_object_with_content,
543
543
  self.get_object_metadata,
544
544
  self.copy_object,
545
545
  self.move_object,
546
- self.delete_object,
546
+ self.delete_single_object,
547
547
  self.delete_objects,
548
548
  self.generate_presigned_url,
549
549
  self.search_objects,
550
- self.get_bucket_size,
550
+ self.get_storage_summary,
551
551
  ]