universal-mcp-applications 0.1.13__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 +117 -117
  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.13.dist-info → universal_mcp_applications-0.1.14.dist-info}/METADATA +1 -1
  52. {universal_mcp_applications-0.1.13.dist-info → universal_mcp_applications-0.1.14.dist-info}/RECORD +54 -54
  53. {universal_mcp_applications-0.1.13.dist-info → universal_mcp_applications-0.1.14.dist-info}/WHEEL +0 -0
  54. {universal_mcp_applications-0.1.13.dist-info → universal_mcp_applications-0.1.14.dist-info}/licenses/LICENSE +0 -0
@@ -13,6 +13,9 @@ class ResendApp(APIApplication):
13
13
 
14
14
  @property
15
15
  def api_key(self) -> str:
16
+ """
17
+ A property that lazily retrieves, validates, and caches the Resend API key from integration credentials. On first access, it configures the `resend` library, raising an error if authentication fails. This ensures the application is authenticated for all subsequent API calls within the class.
18
+ """
16
19
  if self._api_key is None:
17
20
  if not self.integration:
18
21
  raise NotAuthorizedError("Resend integration not configured.")
@@ -36,20 +39,20 @@ class ResendApp(APIApplication):
36
39
  text: str,
37
40
  ) -> dict[str, Any]:
38
41
  """
39
- Sends an email to specified recipients using the Resend API.
40
-
42
+ Sends a single email with a specified subject and text body to a list of recipients via the Resend API. Unlike `send_batch_emails`, which processes multiple distinct emails at once, this function is designed for dispatching one individual email composition per API call.
43
+
41
44
  Args:
42
45
  from_email: The email address to send the email from in this format:- Ankit <ankit@agentr.dev>
43
46
  to_emails: A list of email addresses to send the email to.
44
47
  subject: The subject of the email.
45
48
  text: The text content of the email.
46
-
49
+
47
50
  Returns:
48
51
  A dictionary containing the response from the Resend API.
49
-
52
+
50
53
  Raises:
51
54
  ToolError: If the email fails to send due to an API error.
52
-
55
+
53
56
  Tags:
54
57
  send, email, api, communication, important
55
58
  """
@@ -71,17 +74,17 @@ class ResendApp(APIApplication):
71
74
  emails: list[dict[str, Any]],
72
75
  ) -> dict[str, Any]:
73
76
  """
74
- Sends a batch of emails using the Resend API.
75
-
77
+ Sends multiple emails (1-100) in a single API request. Unlike the `send_email` function which handles a single message, this accepts a list of email objects for efficient, high-volume delivery. It validates that the batch size is within the allowed limits before making the API call.
78
+
76
79
  Args:
77
80
  emails: A list of dictionaries containing parameters for individual emails, such as `from`, `to`, `subject`, `html`, and `text`.
78
-
81
+
79
82
  Returns:
80
83
  A dictionary containing the response from the Resend API.
81
-
84
+
82
85
  Raises:
83
86
  ToolError: If the batch email sending fails or if the number of emails is not between 1 and 100.
84
-
87
+
85
88
  Tags:
86
89
  batch, send, emails, resend-api
87
90
  """
@@ -97,19 +100,19 @@ class ResendApp(APIApplication):
97
100
  except Exception as e:
98
101
  raise ToolError(f"Failed to send batch emails: {e}")
99
102
 
100
- def get_email(self, email_id: str) -> dict[str, Any]:
103
+ def retrieve_email_by_id(self, email_id: str) -> dict[str, Any]:
101
104
  """
102
- Retrieves a single email by its specified ID.
103
-
105
+ Retrieves the details and status of a single email from the Resend API using its unique identifier. This function allows for looking up a specific email that has already been sent or scheduled, distinct from functions that initiate sending.
106
+
104
107
  Args:
105
108
  email_id: The unique identifier of the email to retrieve.
106
-
109
+
107
110
  Returns:
108
111
  A dictionary containing the details of the retrieved email.
109
-
112
+
110
113
  Raises:
111
114
  ToolError: Raised if the retrieval of the email fails due to an internal error.
112
-
115
+
113
116
  Tags:
114
117
  retrieve, email, management
115
118
  """
@@ -120,22 +123,22 @@ class ResendApp(APIApplication):
120
123
  except Exception as e:
121
124
  raise ToolError(f"Failed to retrieve email: {e}")
122
125
 
123
- def update_scheduled_email(
126
+ def reschedule_email(
124
127
  self, email_id: str, scheduled_at: str
125
128
  ) -> dict[str, Any]:
126
129
  """
127
- Updates the scheduling of an email to a new time.
128
-
130
+ Modifies the delivery time for a specific, previously scheduled email using its ID. It updates the `scheduled_at` attribute to a new ISO 8601 formatted time, effectively rescheduling its dispatch. This differs from `cancel_scheduled_email`, which permanently stops the send.
131
+
129
132
  Args:
130
133
  email_id: The ID of the email to update.
131
134
  scheduled_at: The new scheduled time in ISO 8601 format.
132
-
135
+
133
136
  Returns:
134
137
  A dictionary containing the response from the Resend API.
135
-
138
+
136
139
  Raises:
137
140
  ToolError: If updating the scheduled email fails.
138
-
141
+
139
142
  Tags:
140
143
  update, email, async_job, management
141
144
  """
@@ -152,17 +155,17 @@ class ResendApp(APIApplication):
152
155
 
153
156
  def cancel_scheduled_email(self, email_id: str) -> dict[str, Any]:
154
157
  """
155
- Cancels a scheduled email using the provided email ID.
156
-
158
+ Cancels a previously scheduled email using its unique ID, preventing it from being sent. This function calls the Resend API's cancellation endpoint, returning a confirmation response. It is distinct from `update_scheduled_email`, which reschedules the email instead of stopping its transmission.
159
+
157
160
  Args:
158
161
  email_id: The ID of the scheduled email to cancel.
159
-
162
+
160
163
  Returns:
161
164
  A dictionary containing the response from the Resend API.
162
-
165
+
163
166
  Raises:
164
167
  ToolError: If canceling the scheduled email fails.
165
-
168
+
166
169
  Tags:
167
170
  cancel, email, management
168
171
  """
@@ -175,17 +178,17 @@ class ResendApp(APIApplication):
175
178
 
176
179
  def create_domain(self, name: str) -> dict[str, Any]:
177
180
  """
178
- Creates a new domain with the specified name.
179
-
181
+ Registers a new sending domain with the Resend service using the provided name. This is a prerequisite for sending emails from your own domain and returns a dictionary containing details of the new domain object, which can then be verified and managed with other domain-related functions.
182
+
180
183
  Args:
181
184
  name: The name of the domain to create (e.g., 'example.com')
182
-
185
+
183
186
  Returns:
184
187
  A dictionary containing the created domain object and its details.
185
-
188
+
186
189
  Raises:
187
190
  ToolError: If the domain creation fails due to API errors or invalid input.
188
-
191
+
189
192
  Tags:
190
193
  create, domain, management, api, batch, important
191
194
  """
@@ -199,17 +202,17 @@ class ResendApp(APIApplication):
199
202
 
200
203
  def get_domain(self, domain_id: str) -> dict[str, Any]:
201
204
  """
202
- Retrieves a single domain by its ID.
203
-
205
+ Retrieves the details of a specific domain from the Resend API using its unique ID. Unlike `list_domains`, which fetches all domains, this function targets a single record and returns a dictionary containing the domain's properties, like its verification status and tracking settings.
206
+
204
207
  Args:
205
208
  domain_id: The ID of the domain to retrieve.
206
-
209
+
207
210
  Returns:
208
211
  A dictionary containing the domain object.
209
-
212
+
210
213
  Raises:
211
214
  ToolError: Raised if the domain retrieval fails.
212
-
215
+
213
216
  Tags:
214
217
  retrieve, domain, management
215
218
  """
@@ -222,17 +225,17 @@ class ResendApp(APIApplication):
222
225
 
223
226
  def verify_domain(self, domain_id: str) -> dict[str, Any]:
224
227
  """
225
- Verifies an existing domain using the provided domain ID.
226
-
228
+ Triggers the verification process for a registered domain using its unique ID. This action is crucial for authorizing the domain to send emails via Resend and returns an API response containing the verification status and necessary DNS records to complete the process.
229
+
227
230
  Args:
228
231
  domain_id: The ID of the domain to verify.
229
-
232
+
230
233
  Returns:
231
234
  A dictionary containing the response from the domain verification API.
232
-
235
+
233
236
  Raises:
234
237
  ToolError: If the domain verification process fails.
235
-
238
+
236
239
  Tags:
237
240
  verify, domain
238
241
  """
@@ -243,7 +246,7 @@ class ResendApp(APIApplication):
243
246
  except Exception as e:
244
247
  raise ToolError(f"Failed to verify domain: {e}")
245
248
 
246
- def update_domain(
249
+ def update_domain_settings(
247
250
  self,
248
251
  domain_id: str,
249
252
  open_tracking: bool | None = None,
@@ -251,20 +254,20 @@ class ResendApp(APIApplication):
251
254
  tls: str | None = None,
252
255
  ) -> dict[str, Any]:
253
256
  """
254
- Updates an existing domain's settings regarding open tracking, click tracking, and TLS enforcement.
255
-
257
+ Updates settings for a specific domain identified by its ID. This function can modify configurations like open and click tracking, and TLS enforcement. It returns the updated domain object from the API, raising a ToolError if the update fails. Only the provided settings are modified.
258
+
256
259
  Args:
257
260
  domain_id: The ID of the domain to update.
258
261
  open_tracking: Enable or disable open tracking.
259
262
  click_tracking: Enable or disable click tracking.
260
263
  tls: The TLS enforcement policy (enforced or opportunistic).
261
-
264
+
262
265
  Returns:
263
266
  A dictionary containing the updated domain object.
264
-
267
+
265
268
  Raises:
266
269
  ToolError: Raised if updating the domain fails.
267
-
270
+
268
271
  Tags:
269
272
  update, domain, management
270
273
  """
@@ -284,14 +287,14 @@ class ResendApp(APIApplication):
284
287
 
285
288
  def list_domains(self) -> list[dict[str, Any]]:
286
289
  """
287
- Retrieves a list of all domains for the authenticated user.
288
-
290
+ Fetches a complete list of all domains registered with the Resend account. Unlike `get_domain`, which retrieves a single domain by ID, this provides a comprehensive overview of all configured domains for management and verification tasks.
291
+
289
292
  Returns:
290
293
  A list of dictionaries, each representing a domain.
291
-
294
+
292
295
  Raises:
293
296
  ToolError: If listing the domains fails.
294
-
297
+
295
298
  Tags:
296
299
  list, domains, important, management
297
300
  """
@@ -304,17 +307,17 @@ class ResendApp(APIApplication):
304
307
 
305
308
  def remove_domain(self, domain_id: str) -> dict[str, Any]:
306
309
  """
307
- Removes an existing domain by its ID using the Resend API.
308
-
310
+ Permanently removes a specific domain from the Resend account using its unique ID. This function makes an authenticated API call to delete the domain, distinguishing it from retrieval (`get_domain`) or modification (`update_domain`) operations, and raises an error if the process fails.
311
+
309
312
  Args:
310
313
  domain_id: The unique identifier of the domain to be removed.
311
-
314
+
312
315
  Returns:
313
316
  A dictionary containing the response from the Resend API after attempting to remove the domain.
314
-
317
+
315
318
  Raises:
316
319
  ToolError: Raised if the operation to remove the domain fails, including if the API call encounters an error.
317
-
320
+
318
321
  Tags:
319
322
  remove, management, api, domain
320
323
  """
@@ -327,17 +330,17 @@ class ResendApp(APIApplication):
327
330
 
328
331
  def create_api_key(self, name: str) -> dict[str, Any]:
329
332
  """
330
- Creates a new API key for authenticating with Resend.
331
-
333
+ Creates a new API key for authenticating with the Resend service, identified by a specified name. It returns a dictionary containing the new key object, including the generated token required for subsequent API requests.
334
+
332
335
  Args:
333
336
  name: The name of the API key (e.g., 'Production').
334
-
337
+
335
338
  Returns:
336
339
  A dictionary containing the new API key object.
337
-
340
+
338
341
  Raises:
339
342
  ToolError: Raised if API key creation fails.
340
-
343
+
341
344
  Tags:
342
345
  create, api-key, authentication
343
346
  """
@@ -351,17 +354,17 @@ class ResendApp(APIApplication):
351
354
 
352
355
  def list_api_keys(self) -> list[dict[str, Any]]:
353
356
  """
354
- Retrieves a list of all API keys available through the resend service.
355
-
357
+ Retrieves a list of all API keys for the authenticated Resend account. This read-only operation allows for auditing and viewing existing credentials, contrasting with `create_api_key` and `remove_api_key` which are used to add or delete keys.
358
+
356
359
  Args:
357
360
  None: This function takes no arguments.
358
-
361
+
359
362
  Returns:
360
363
  List of dictionaries, each representing an API key with associated details.
361
-
364
+
362
365
  Raises:
363
366
  ToolError: If there is a failure when attempting to list the API keys, typically due to an underlying exception from the resend API.
364
-
367
+
365
368
  Tags:
366
369
  list, api, important
367
370
  """
@@ -374,17 +377,17 @@ class ResendApp(APIApplication):
374
377
 
375
378
  def remove_api_key(self, api_key_id: str) -> dict[str, Any]:
376
379
  """
377
- Removes an existing API key using the specified key ID.
378
-
380
+ Deletes a specific Resend API key identified by its unique ID. This function, part of the key management suite alongside `create_api_key` and `list_api_keys`, returns an API confirmation response or raises a `ToolError` if the operation fails.
381
+
379
382
  Args:
380
383
  api_key_id: The ID of the API key to remove.
381
-
384
+
382
385
  Returns:
383
386
  A dictionary containing the response from the Resend API after removing the API key.
384
-
387
+
385
388
  Raises:
386
389
  ToolError: Raised if removing the API key fails, including any underlying errors.
387
-
390
+
388
391
  Tags:
389
392
  remove, api-key, management
390
393
  """
@@ -395,7 +398,7 @@ class ResendApp(APIApplication):
395
398
  except Exception as e:
396
399
  raise ToolError(f"Failed to remove API key: {e}")
397
400
 
398
- def create_broadcast(
401
+ def register_broadcast(
399
402
  self,
400
403
  audience_id: str,
401
404
  from_email: str,
@@ -403,20 +406,20 @@ class ResendApp(APIApplication):
403
406
  html: str,
404
407
  ) -> dict[str, Any]:
405
408
  """
406
- Creates a new broadcast to send to a specified audience.
407
-
409
+ Registers a new email broadcast campaign for a specific audience using the Resend API. This function creates the broadcast object but does not send it; use the `send_broadcast` function to dispatch the created campaign to the audience.
410
+
408
411
  Args:
409
412
  audience_id: The ID of the audience to send the broadcast to.
410
413
  from_email: The sender's email address.
411
414
  subject: The subject line of the broadcast.
412
415
  html: The HTML content of the broadcast. Use {{{...}}} for merge tags.
413
-
416
+
414
417
  Returns:
415
418
  A dictionary containing the created broadcast object.
416
-
419
+
417
420
  Raises:
418
421
  ToolError: Raised if creating the broadcast fails due to an underlying exception.
419
-
422
+
420
423
  Tags:
421
424
  broadcast, email, important
422
425
  """
@@ -435,17 +438,17 @@ class ResendApp(APIApplication):
435
438
 
436
439
  def get_broadcast(self, broadcast_id: str) -> dict[str, Any]:
437
440
  """
438
- Retrieves a single broadcast by its ID.
439
-
441
+ Retrieves a specific broadcast's complete details, including its status and content, by its unique ID. Unlike `list_broadcasts` which retrieves all broadcasts, this function targets a single entry for inspection.
442
+
440
443
  Args:
441
444
  broadcast_id: The ID of the broadcast to retrieve.
442
-
445
+
443
446
  Returns:
444
447
  A dictionary containing the broadcast object.
445
-
448
+
446
449
  Raises:
447
450
  ToolError: Raised if retrieving the broadcast fails.
448
-
451
+
449
452
  Tags:
450
453
  retrieve, broadcast
451
454
  """
@@ -463,19 +466,19 @@ class ResendApp(APIApplication):
463
466
  subject: str | None = None,
464
467
  ) -> dict[str, Any]:
465
468
  """
466
- Updates a broadcast by modifying its HTML content and/or subject line.
467
-
469
+ Updates the HTML content and/or subject of an existing broadcast, identified by its ID. Requires that at least one modifiable field (html or subject) is provided. This function alters a broadcast's content, differing from `send_broadcast` which triggers its delivery.
470
+
468
471
  Args:
469
472
  broadcast_id: The ID of the broadcast to update.
470
473
  html: The new HTML content for the broadcast.
471
474
  subject: The new subject line for the broadcast.
472
-
475
+
473
476
  Returns:
474
477
  A dictionary containing the updated broadcast object.
475
-
478
+
476
479
  Raises:
477
480
  ToolError: Raised if updating the broadcast fails or no update fields are provided.
478
-
481
+
479
482
  Tags:
480
483
  update, management, broadcast, api
481
484
  """
@@ -495,22 +498,22 @@ class ResendApp(APIApplication):
495
498
  except Exception as e:
496
499
  raise ToolError(f"Failed to update broadcast: {e}")
497
500
 
498
- def send_broadcast(
501
+ def send_or_schedule_broadcast(
499
502
  self, broadcast_id: str, scheduled_at: str | None = None
500
503
  ) -> dict[str, Any]:
501
504
  """
502
- Starts sending a broadcast via the API.
503
-
505
+ Initiates the delivery of a pre-existing broadcast, identified by its ID, to its target audience. The broadcast can be sent immediately or scheduled for a future time via the optional `scheduled_at` parameter. It returns the API response upon execution.
506
+
504
507
  Args:
505
508
  broadcast_id: The ID of the broadcast to send.
506
509
  scheduled_at: The time to send the broadcast, e.g., 'in 1 min' or an ISO 8601 datetime.
507
-
510
+
508
511
  Returns:
509
512
  A dictionary containing the response from the Resend API.
510
-
513
+
511
514
  Raises:
512
515
  ToolError: If sending the broadcast fails.
513
-
516
+
514
517
  Tags:
515
518
  broadcast, send, api, management
516
519
  """
@@ -524,19 +527,19 @@ class ResendApp(APIApplication):
524
527
  except Exception as e:
525
528
  raise ToolError(f"Failed to send broadcast: {e}")
526
529
 
527
- def remove_broadcast(self, broadcast_id: str) -> dict[str, Any]:
530
+ def remove_draft_broadcast(self, broadcast_id: str) -> dict[str, Any]:
528
531
  """
529
- Removes an existing broadcast with 'draft' status.
530
-
532
+ Deletes a broadcast from the Resend service using its unique ID. This action is restricted to broadcasts that have a 'draft' status and have not been sent, returning the API's response upon successful removal or raising an error if the operation fails.
533
+
531
534
  Args:
532
535
  broadcast_id: The ID of the broadcast to remove.
533
-
536
+
534
537
  Returns:
535
538
  A dictionary containing the response from the Resend API.
536
-
539
+
537
540
  Raises:
538
541
  ToolError: If removing the broadcast fails.
539
-
542
+
540
543
  Tags:
541
544
  remove, broadcast, api-management, draft-status
542
545
  """
@@ -549,14 +552,14 @@ class ResendApp(APIApplication):
549
552
 
550
553
  def list_broadcasts(self) -> list[dict[str, Any]]:
551
554
  """
552
- Retrieves a list of all available broadcasts using the configured API key.
553
-
555
+ Retrieves a list of all broadcasts associated with the authenticated account. Unlike `get_broadcast` which fetches a single item by ID, this function returns a list of dictionaries, each containing the attributes of a specific broadcast. Raises a `ToolError` on API failure.
556
+
554
557
  Returns:
555
558
  A list of dictionaries, each representing a broadcast with its attributes.
556
-
559
+
557
560
  Raises:
558
561
  ToolError: If listing broadcasts fails due to a connection, API, or other retrieval error.
559
-
562
+
560
563
  Tags:
561
564
  list, broadcast, api, management, important
562
565
  """
@@ -569,17 +572,17 @@ class ResendApp(APIApplication):
569
572
 
570
573
  def create_audience(self, name: str) -> dict[str, Any]:
571
574
  """
572
- Creates a new audience (a list of contacts) with the specified name.
573
-
575
+ Creates a new audience, a named list for contacts, within the Resend service. This function requires a name for the audience and returns a dictionary representing the newly created object, enabling subsequent management of contacts within that specific list.
576
+
574
577
  Args:
575
578
  name: The name of the audience (e.g., "Registered Users").
576
-
579
+
577
580
  Returns:
578
581
  A dictionary containing the created audience object.
579
-
582
+
580
583
  Raises:
581
584
  ToolError: If creating the audience fails due to an underlying error.
582
-
585
+
583
586
  Tags:
584
587
  create, audience, management, important
585
588
  """
@@ -593,17 +596,17 @@ class ResendApp(APIApplication):
593
596
 
594
597
  def get_audience(self, audience_id: str) -> dict[str, Any]:
595
598
  """
596
- Retrieves a single audience object from the API using the specified audience ID.
597
-
599
+ Retrieves the details of a single audience using its unique ID. This provides a targeted lookup for one audience, distinct from `list_audiences` which fetches all available audiences in the account.
600
+
598
601
  Args:
599
602
  audience_id: The unique identifier of the audience to retrieve.
600
-
603
+
601
604
  Returns:
602
605
  A dictionary containing all data for the requested audience object.
603
-
606
+
604
607
  Raises:
605
608
  ToolError: If retrieving the audience from the API fails, with a message describing the error.
606
-
609
+
607
610
  Tags:
608
611
  fetch, audience, management, api
609
612
  """
@@ -616,17 +619,17 @@ class ResendApp(APIApplication):
616
619
 
617
620
  def remove_audience(self, audience_id: str) -> dict[str, Any]:
618
621
  """
619
- Removes an existing audience using the provided audience ID and returns the API response.
620
-
622
+ Deletes a specific audience from the Resend service using its unique identifier. This function wraps the Resend API's remove operation, returning the API's response. Unlike `remove_contact`, which targets individuals, this function removes the entire contact list defined by the audience ID.
623
+
621
624
  Args:
622
625
  audience_id: The unique identifier of the audience to remove.
623
-
626
+
624
627
  Returns:
625
628
  A dictionary containing the response from the Resend API.
626
-
629
+
627
630
  Raises:
628
631
  ToolError: Raised if removing the audience fails due to API error or other issues.
629
-
632
+
630
633
  Tags:
631
634
  remove, audience, management, api
632
635
  """
@@ -639,14 +642,14 @@ class ResendApp(APIApplication):
639
642
 
640
643
  def list_audiences(self) -> list[dict[str, Any]]:
641
644
  """
642
- Retrieves a list of all audiences.
643
-
645
+ Retrieves a complete list of all audiences from the Resend account. It returns a list of dictionaries, with each containing the details of a specific audience. This function is distinct from `get_audience`, which fetches a single audience by its ID.
646
+
644
647
  Returns:
645
648
  A list of dictionaries, each representing an audience.
646
-
649
+
647
650
  Raises:
648
651
  ToolError: Raised if listing the audiences fails due to an internal error.
649
-
652
+
650
653
  Tags:
651
654
  list, audiences, management, important
652
655
  """
@@ -666,21 +669,21 @@ class ResendApp(APIApplication):
666
669
  unsubscribed: bool = False,
667
670
  ) -> dict[str, Any]:
668
671
  """
669
- Creates a contact within a specific audience.
670
-
672
+ Creates a new contact with a given email, optional name, and subscription status, adding it to a specific audience. This function populates audience lists, differing from `update_contact` which modifies existing entries, and requires a valid `audience_id` to function.
673
+
671
674
  Args:
672
675
  audience_id: The ID of the audience to add the contact to.
673
676
  email: The email address of the contact.
674
677
  first_name: The contact's first name.
675
678
  last_name: The contact's last name.
676
679
  unsubscribed: The contact's subscription status.
677
-
680
+
678
681
  Returns:
679
682
  A dictionary containing the created contact's ID.
680
-
683
+
681
684
  Raises:
682
685
  ToolError: Raised if creating the contact fails.
683
-
686
+
684
687
  Tags:
685
688
  create, contact, management, important
686
689
  """
@@ -704,19 +707,19 @@ class ResendApp(APIApplication):
704
707
  self, audience_id: str, contact_id: str | None = None, email: str | None = None
705
708
  ) -> dict[str, Any]:
706
709
  """
707
- Retrieves a single contact from an audience by providing either a unique contact ID or an email address, ensuring exactly one identifier is given.
708
-
710
+ Fetches a single contact's details from a specified audience by its unique ID or email address. The function requires exactly one identifier for the lookup, raising an error if the identifier is missing, ambiguous, or if the API call fails.
711
+
709
712
  Args:
710
713
  audience_id: The ID of the audience in which to search for the contact.
711
714
  contact_id: The unique ID of the contact, if available. Exactly one of 'contact_id' or 'email' must be provided.
712
715
  email: The email address of the contact, if available. Exactly one of 'contact_id' or 'email' must be provided.
713
-
716
+
714
717
  Returns:
715
718
  A dictionary containing the retrieved contact object, with details such as ID, email, and other contact attributes.
716
-
719
+
717
720
  Raises:
718
721
  ToolError: Raised if neither 'contact_id' nor 'email' is provided, if both are provided (ambiguous identifier), or if retrieval from the API fails.
719
-
722
+
720
723
  Tags:
721
724
  retrieve, contact, audience, management, api
722
725
  """
@@ -744,8 +747,8 @@ class ResendApp(APIApplication):
744
747
  unsubscribed: bool | None = None,
745
748
  ) -> dict[str, Any]:
746
749
  """
747
- Updates an existing contact, identified by ID or email, within a specified audience.
748
-
750
+ Updates an existing contact's details (e.g., name, subscription status) within a specific audience. The contact is identified by its unique ID or email address. This function validates inputs and returns the Resend API response, raising a ToolError on failure or if arguments are invalid.
751
+
749
752
  Args:
750
753
  audience_id: The ID of the audience containing the contact.
751
754
  contact_id: The ID of the contact to update.
@@ -753,13 +756,13 @@ class ResendApp(APIApplication):
753
756
  first_name: The new first name for the contact.
754
757
  last_name: The new last name for the contact.
755
758
  unsubscribed: The new subscription status for the contact.
756
-
759
+
757
760
  Returns:
758
761
  A dictionary containing the response from the Resend API.
759
-
762
+
760
763
  Raises:
761
764
  ToolError: Raised if the update fails, if an identifier is missing, or if no update fields are provided.
762
-
765
+
763
766
  Tags:
764
767
  update, contact, management
765
768
  """
@@ -793,19 +796,19 @@ class ResendApp(APIApplication):
793
796
  self, audience_id: str, contact_id: str | None = None, email: str | None = None
794
797
  ) -> dict[str, Any]:
795
798
  """
796
- Removes a contact from an audience, identified by ID or email.
797
-
799
+ Removes a contact from a specified audience. The contact must be identified by either its unique ID or email address, but not both. Raises an error if the identifier is missing, ambiguous, or if the API call to the Resend service fails.
800
+
798
801
  Args:
799
802
  audience_id: The ID of the audience.
800
803
  contact_id: The ID of the contact to remove.
801
804
  email: The email of the contact to remove.
802
-
805
+
803
806
  Returns:
804
807
  A dictionary containing the response from the Resend API.
805
-
808
+
806
809
  Raises:
807
810
  ToolError: If contact removal fails, or if the contact identifier is missing or ambiguous.
808
-
811
+
809
812
  Tags:
810
813
  remove, contact-management, api-call
811
814
  """
@@ -825,17 +828,17 @@ class ResendApp(APIApplication):
825
828
 
826
829
  def list_contacts(self, audience_id: str) -> list[dict[str, Any]]:
827
830
  """
828
- Lists all contacts from a specified audience.
829
-
831
+ Retrieves a complete list of contacts belonging to a specific audience, identified by its unique ID. This function returns all contacts within the audience, unlike `get_contact` which retrieves only a single contact by its ID or email.
832
+
830
833
  Args:
831
834
  audience_id: The ID of the audience whose contacts you want to list.
832
-
835
+
833
836
  Returns:
834
837
  A list of dictionaries, each representing a contact in the audience.
835
-
838
+
836
839
  Raises:
837
840
  ToolError: Raised if listing the contacts fails.
838
-
841
+
839
842
  Tags:
840
843
  list, contacts, management, important
841
844
  """
@@ -850,23 +853,23 @@ class ResendApp(APIApplication):
850
853
  return [
851
854
  self.send_email,
852
855
  self.send_batch_emails,
853
- self.get_email,
854
- self.update_scheduled_email,
856
+ self.retrieve_email_by_id,
857
+ self.reschedule_email,
855
858
  self.cancel_scheduled_email,
856
859
  self.create_domain,
857
860
  self.get_domain,
858
861
  self.verify_domain,
859
- self.update_domain,
862
+ self.update_domain_settings,
860
863
  self.list_domains,
861
864
  self.remove_domain,
862
865
  self.create_api_key,
863
866
  self.list_api_keys,
864
867
  self.remove_api_key,
865
- self.create_broadcast,
868
+ self.register_broadcast,
866
869
  self.get_broadcast,
867
870
  self.update_broadcast,
868
- self.send_broadcast,
869
- self.remove_broadcast,
871
+ self.send_or_schedule_broadcast,
872
+ self.remove_draft_broadcast,
870
873
  self.list_broadcasts,
871
874
  self.create_audience,
872
875
  self.get_audience,