universal-mcp-applications 0.1.17__py3-none-any.whl → 0.1.33__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 (143) hide show
  1. universal_mcp/applications/BEST_PRACTICES.md +166 -0
  2. universal_mcp/applications/ahrefs/README.md +3 -3
  3. universal_mcp/applications/airtable/README.md +3 -3
  4. universal_mcp/applications/airtable/app.py +0 -1
  5. universal_mcp/applications/apollo/app.py +0 -1
  6. universal_mcp/applications/asana/README.md +3 -3
  7. universal_mcp/applications/aws_s3/README.md +29 -0
  8. universal_mcp/applications/aws_s3/app.py +40 -39
  9. universal_mcp/applications/bill/README.md +249 -0
  10. universal_mcp/applications/browser_use/README.md +1 -0
  11. universal_mcp/applications/browser_use/__init__.py +0 -0
  12. universal_mcp/applications/browser_use/app.py +71 -0
  13. universal_mcp/applications/calendly/README.md +45 -45
  14. universal_mcp/applications/calendly/app.py +125 -125
  15. universal_mcp/applications/canva/README.md +35 -35
  16. universal_mcp/applications/canva/app.py +95 -99
  17. universal_mcp/applications/clickup/README.md +4 -4
  18. universal_mcp/applications/confluence/app.py +0 -1
  19. universal_mcp/applications/contentful/README.md +1 -2
  20. universal_mcp/applications/contentful/app.py +4 -5
  21. universal_mcp/applications/crustdata/README.md +3 -3
  22. universal_mcp/applications/domain_checker/README.md +2 -2
  23. universal_mcp/applications/domain_checker/app.py +11 -15
  24. universal_mcp/applications/e2b/README.md +4 -4
  25. universal_mcp/applications/e2b/app.py +4 -4
  26. universal_mcp/applications/elevenlabs/README.md +3 -77
  27. universal_mcp/applications/elevenlabs/app.py +18 -15
  28. universal_mcp/applications/exa/README.md +7 -7
  29. universal_mcp/applications/exa/app.py +17 -17
  30. universal_mcp/applications/falai/README.md +13 -12
  31. universal_mcp/applications/falai/app.py +34 -35
  32. universal_mcp/applications/figma/README.md +3 -3
  33. universal_mcp/applications/file_system/README.md +13 -0
  34. universal_mcp/applications/file_system/app.py +9 -9
  35. universal_mcp/applications/firecrawl/README.md +9 -9
  36. universal_mcp/applications/firecrawl/app.py +46 -46
  37. universal_mcp/applications/fireflies/README.md +14 -14
  38. universal_mcp/applications/fireflies/app.py +164 -57
  39. universal_mcp/applications/fpl/README.md +12 -12
  40. universal_mcp/applications/fpl/app.py +54 -55
  41. universal_mcp/applications/ghost_content/app.py +0 -1
  42. universal_mcp/applications/github/README.md +10 -10
  43. universal_mcp/applications/github/app.py +50 -52
  44. universal_mcp/applications/google_calendar/README.md +10 -10
  45. universal_mcp/applications/google_calendar/app.py +50 -49
  46. universal_mcp/applications/google_docs/README.md +14 -14
  47. universal_mcp/applications/google_docs/app.py +307 -233
  48. universal_mcp/applications/google_drive/README.md +54 -57
  49. universal_mcp/applications/google_drive/app.py +270 -261
  50. universal_mcp/applications/google_gemini/README.md +3 -14
  51. universal_mcp/applications/google_gemini/app.py +15 -18
  52. universal_mcp/applications/google_mail/README.md +20 -20
  53. universal_mcp/applications/google_mail/app.py +110 -109
  54. universal_mcp/applications/google_searchconsole/README.md +10 -10
  55. universal_mcp/applications/google_searchconsole/app.py +37 -37
  56. universal_mcp/applications/google_sheet/README.md +25 -25
  57. universal_mcp/applications/google_sheet/app.py +270 -266
  58. universal_mcp/applications/hashnode/README.md +6 -3
  59. universal_mcp/applications/hashnode/app.py +174 -25
  60. universal_mcp/applications/http_tools/README.md +5 -5
  61. universal_mcp/applications/http_tools/app.py +10 -11
  62. universal_mcp/applications/hubspot/api_segments/__init__.py +0 -0
  63. universal_mcp/applications/hubspot/api_segments/api_segment_base.py +54 -0
  64. universal_mcp/applications/hubspot/api_segments/crm_api.py +7337 -0
  65. universal_mcp/applications/hubspot/api_segments/marketing_api.py +1467 -0
  66. universal_mcp/applications/hubspot/app.py +2 -15
  67. universal_mcp/applications/jira/app.py +0 -1
  68. universal_mcp/applications/klaviyo/README.md +0 -36
  69. universal_mcp/applications/linkedin/README.md +18 -4
  70. universal_mcp/applications/linkedin/app.py +763 -162
  71. universal_mcp/applications/mailchimp/README.md +3 -3
  72. universal_mcp/applications/markitdown/app.py +10 -5
  73. universal_mcp/applications/ms_teams/README.md +31 -31
  74. universal_mcp/applications/ms_teams/app.py +151 -151
  75. universal_mcp/applications/neon/README.md +3 -3
  76. universal_mcp/applications/onedrive/README.md +24 -0
  77. universal_mcp/applications/onedrive/__init__.py +1 -0
  78. universal_mcp/applications/onedrive/app.py +338 -0
  79. universal_mcp/applications/openai/README.md +18 -17
  80. universal_mcp/applications/openai/app.py +40 -39
  81. universal_mcp/applications/outlook/README.md +9 -9
  82. universal_mcp/applications/outlook/app.py +307 -225
  83. universal_mcp/applications/perplexity/README.md +4 -4
  84. universal_mcp/applications/perplexity/app.py +4 -4
  85. universal_mcp/applications/posthog/README.md +128 -127
  86. universal_mcp/applications/reddit/README.md +21 -124
  87. universal_mcp/applications/reddit/app.py +51 -68
  88. universal_mcp/applications/resend/README.md +29 -29
  89. universal_mcp/applications/resend/app.py +116 -117
  90. universal_mcp/applications/rocketlane/app.py +0 -1
  91. universal_mcp/applications/scraper/README.md +7 -4
  92. universal_mcp/applications/scraper/__init__.py +1 -1
  93. universal_mcp/applications/scraper/app.py +341 -103
  94. universal_mcp/applications/semrush/README.md +3 -0
  95. universal_mcp/applications/serpapi/README.md +3 -3
  96. universal_mcp/applications/serpapi/app.py +14 -14
  97. universal_mcp/applications/sharepoint/README.md +19 -0
  98. universal_mcp/applications/sharepoint/app.py +285 -173
  99. universal_mcp/applications/shopify/app.py +0 -1
  100. universal_mcp/applications/shortcut/README.md +3 -3
  101. universal_mcp/applications/slack/README.md +23 -0
  102. universal_mcp/applications/slack/app.py +79 -48
  103. universal_mcp/applications/spotify/README.md +3 -3
  104. universal_mcp/applications/supabase/README.md +3 -3
  105. universal_mcp/applications/tavily/README.md +4 -4
  106. universal_mcp/applications/tavily/app.py +4 -4
  107. universal_mcp/applications/twilio/README.md +15 -0
  108. universal_mcp/applications/twitter/README.md +92 -89
  109. universal_mcp/applications/twitter/api_segments/compliance_api.py +13 -15
  110. universal_mcp/applications/twitter/api_segments/dm_conversations_api.py +20 -20
  111. universal_mcp/applications/twitter/api_segments/dm_events_api.py +12 -12
  112. universal_mcp/applications/twitter/api_segments/likes_api.py +12 -12
  113. universal_mcp/applications/twitter/api_segments/lists_api.py +37 -39
  114. universal_mcp/applications/twitter/api_segments/spaces_api.py +24 -24
  115. universal_mcp/applications/twitter/api_segments/trends_api.py +4 -4
  116. universal_mcp/applications/twitter/api_segments/tweets_api.py +105 -105
  117. universal_mcp/applications/twitter/api_segments/usage_api.py +4 -4
  118. universal_mcp/applications/twitter/api_segments/users_api.py +136 -136
  119. universal_mcp/applications/twitter/app.py +15 -11
  120. universal_mcp/applications/whatsapp/README.md +12 -12
  121. universal_mcp/applications/whatsapp/app.py +66 -67
  122. universal_mcp/applications/whatsapp/audio.py +39 -35
  123. universal_mcp/applications/whatsapp/whatsapp.py +176 -154
  124. universal_mcp/applications/whatsapp_business/README.md +23 -23
  125. universal_mcp/applications/whatsapp_business/app.py +92 -92
  126. universal_mcp/applications/yahoo_finance/README.md +17 -0
  127. universal_mcp/applications/yahoo_finance/__init__.py +1 -0
  128. universal_mcp/applications/yahoo_finance/app.py +300 -0
  129. universal_mcp/applications/youtube/README.md +46 -46
  130. universal_mcp/applications/youtube/app.py +208 -195
  131. universal_mcp/applications/zenquotes/README.md +1 -1
  132. universal_mcp/applications/zenquotes/__init__.py +2 -0
  133. universal_mcp/applications/zenquotes/app.py +5 -5
  134. {universal_mcp_applications-0.1.17.dist-info → universal_mcp_applications-0.1.33.dist-info}/METADATA +5 -90
  135. {universal_mcp_applications-0.1.17.dist-info → universal_mcp_applications-0.1.33.dist-info}/RECORD +137 -128
  136. universal_mcp/applications/replicate/README.md +0 -18
  137. universal_mcp/applications/replicate/__init__.py +0 -1
  138. universal_mcp/applications/replicate/app.py +0 -493
  139. universal_mcp/applications/unipile/README.md +0 -28
  140. universal_mcp/applications/unipile/__init__.py +0 -1
  141. universal_mcp/applications/unipile/app.py +0 -827
  142. {universal_mcp_applications-0.1.17.dist-info → universal_mcp_applications-0.1.33.dist-info}/WHEEL +0 -0
  143. {universal_mcp_applications-0.1.17.dist-info → universal_mcp_applications-0.1.33.dist-info}/licenses/LICENSE +0 -0
@@ -9,127 +9,24 @@ This is automatically generated from OpenAPI schema for the RedditApp API.
9
9
 
10
10
  | Tool | Description |
11
11
  |------|-------------|
12
- | `get_subreddit_posts` | Retrieves and formats top posts from a specified subreddit within a given timeframe using the Reddit API |
13
- | `search_subreddits` | Searches Reddit for subreddits matching a given query string and returns a formatted list of results including subreddit names, subscriber counts, and descriptions. |
14
- | `get_post_flairs` | Retrieves a list of available post flairs for a specified subreddit using the Reddit API. |
15
- | `create_post` | Creates a new Reddit post in a specified subreddit with support for text posts, link posts, and image posts |
16
- | `get_comment_by_id` | Retrieves a specific Reddit comment using its unique identifier. |
17
- | `post_comment` | Posts a comment to a Reddit post or comment using the Reddit API |
18
- | `edit_content` | Edits the text content of an existing Reddit post or comment using the Reddit API |
19
- | `delete_content` | Deletes a specified Reddit post or comment using the Reddit API. |
20
- | `api_v1_me` | Get the current user's information. |
21
- | `api_v1_me_karma` | Get the current user's karma. |
22
- | `api_v1_me_prefs` | Get the current user's preferences. |
23
- | `api_v1_me_prefs1` | Update the current user's preferences. |
24
- | `api_v1_me_trophies` | Get the current user's trophies. |
25
- | `prefs_friends` | Get the current user's friends. |
26
- | `prefs_blocked` | Get the current user's blocked users. |
27
- | `prefs_messaging` | Get the current user's messaging preferences. |
28
- | `prefs_trusted` | Get the current user's trusted users. |
29
- | `api_needs_captcha` | Check if the current user needs a captcha. |
30
- | `api_v1_collections_collection` | Get a collection by ID. |
31
- | `api_v1_collections_subreddit_collections` | Get the current user's subreddit collections. |
32
- | `api_v1_subreddit_emoji_emoji_name` | Get an emoji by name. |
33
- | `api_v1_subreddit_emojis_all` | Get all emojis for a subreddit. |
34
- | `r_subreddit_api_flair` | Get the current user's flair for a subreddit. |
35
- | `r_subreddit_api_flairlist` | Get the current user's flair list for a subreddit. |
36
- | `r_subreddit_api_link_flair` | Get the current user's link flair for a subreddit. |
37
- | `r_subreddit_api_link_flair_v2` | Get the current user's link flair for a subreddit. |
38
- | `r_subreddit_api_user_flair` | Get the current user's user flair for a subreddit. |
39
- | `r_subreddit_api_user_flair_v2` | Get the current user's user flair for a subreddit. |
40
- | `api_info` | Get information about a link or comment. |
41
- | `r_subreddit_api_info` | Get information about a link or comment in a subreddit. |
42
- | `api_morechildren` | Get more children for a link or comment. |
43
- | `api_saved_categories` | Get the current user's saved categories. |
44
- | `req` | Get the current user's requests. |
45
- | `best` | Get the best posts. |
46
- | `by_id_names` | Get posts by ID. |
47
- | `comments_article` | Get comments for a post. |
48
- | `get_post_comments_details` | Get post details and comments like title, author, score, etc. |
49
-
50
- | `controversial` | Get the most controversial posts. |
51
- | `duplicates_article` | Get duplicate posts. |
52
- | `hot` | Get the hottest posts. |
53
- | `new` | Get the newest posts. |
54
- | `r_subreddit_comments_article` | Get comments for a post in a subreddit. |
55
- | `r_subreddit_controversial` | Get the most controversial posts in a subreddit. |
56
- | `r_subreddit_hot` | Get the hottest posts in a subreddit. |
57
- | `r_subreddit_new` | Get the newest posts in a subreddit. |
58
- | `r_subreddit_random` | Get a random post in a subreddit. |
59
- | `r_subreddit_rising` | Get the rising posts in a subreddit. |
60
- | `r_subreddit_top` | Get the top posts in a subreddit. |
61
- | `random` | Get a random post. |
62
- | `rising` | Get the rising posts. |
63
- | `top` | Get the top posts. |
64
- | `api_saved_media_text` | Get the text of a saved media. |
65
- | `api_v1_scopes` | Get the current user's scopes. |
66
- | `r_subreddit_api_saved_media_text` | Get the text of a saved media in a subreddit. |
67
- | `r_subreddit_about_log` | Get the log of a subreddit. |
68
- | `r_subreddit_about_edited` | Get the edited posts in a subreddit. |
69
- | `r_subreddit_about_modqueue` | Get the modqueue in a subreddit. |
70
- | `r_subreddit_about_reports` | Get the reports in a subreddit. |
71
- | `r_subreddit_about_spam` | Get the spam posts in a subreddit. |
72
- | `r_subreddit_about_unmoderated` | Get the unmoderated posts in a subreddit. |
73
- | `r_subreddit_stylesheet` | Get the stylesheet of a subreddit. |
74
- | `stylesheet` | Get the stylesheet of the current user. |
75
- | `api_mod_notes1` | Get the mod notes of a subreddit. |
76
- | `api_mod_notes` | Delete a mod note. |
77
- | `api_mod_notes_recent` | Get the recent mod notes. |
78
- | `api_multi_mine` | Get the current user's multi. |
79
- | `api_multi_user_username` | Get a user's multi. |
80
- | `api_multi_multipath1` | Get a multi. |
81
- | `api_multi_multipath` | Delete a multi. |
82
- | `api_multi_multipath_description` | Get a multi's description. |
83
- | `api_multi_multipath_rsubreddit1` | Get a multi's subreddit. |
84
- | `api_multi_multipath_rsubreddit` | Delete a multi's subreddit. |
85
- | `api_mod_conversations` | Get the mod conversations. |
86
- | `api_mod_conversations_conversation_id` | Get a mod conversation. |
87
- | `api_mod_conversations_conversation_id_highlight` | Highlight a mod conversation. |
88
- | `api_mod_conversations_conversation_id_unarchive` | Unarchive a mod conversation. |
89
- | `api_mod_conversations_conversation_id_unban` | Unban a mod conversation. |
90
- | `api_mod_conversations_conversation_id_unmute` | Unmute a mod conversation. |
91
- | `api_mod_conversations_conversation_id_user` | Get a mod conversation's user. |
92
- | `api_mod_conversations_subreddits` | Get the mod conversations' subreddits. |
93
- | `api_mod_conversations_unread_count` | Get the unread count of the mod conversations. |
94
- | `message_inbox` | Get the current user's inbox. |
95
- | `message_sent` | Get the current user's sent messages. |
96
- | `message_unread` | Get the current user's unread messages. |
97
- | `search` | Search for posts, comments, and users. |
98
- | `r_subreddit_search` | Search for posts, comments, and users in a subreddit. |
99
- | `api_search_reddit_names` | Search for subreddits. |
100
- | `api_subreddit_autocomplete` | Search for subreddits. |
101
- | `api_subreddit_autocomplete_v2` | Search for subreddits. |
102
- | `api_v1_subreddit_post_requirements` | Get the post requirements for a subreddit. |
103
- | `r_subreddit_about_banned` | Get the banned users in a subreddit. |
104
- | `r_subreddit_about` | Get the about information for a subreddit. |
105
- | `r_subreddit_about_edit` | Get the edit information for a subreddit. |
106
- | `r_subreddit_about_contributors` | Get the contributors for a subreddit. |
107
- | `r_subreddit_about_moderators` | Get the moderators for a subreddit. |
108
- | `r_subreddit_about_muted` | Get the muted users for a subreddit. |
109
- | `r_subreddit_about_rules` | Get the rules for a subreddit. |
110
- | `r_subreddit_about_sticky` | Get the sticky posts for a subreddit. |
111
- | `r_subreddit_about_traffic` | Get the traffic for a subreddit. |
112
- | `r_subreddit_about_wikibanned` | Get the wikibanned users for a subreddit. |
113
- | `r_subreddit_about_wikicontributors` | Get the wikicontributors for a subreddit. |
114
- | `r_subreddit_api_submit_text` | Get the submit text for a subreddit. |
115
- | `subreddits_mine_where` | Get the subreddits the current user has access to. |
116
- | `subreddits_search` | Search for subreddits. |
117
- | `subreddits_where` | Get the subreddits the current user has access to. |
118
- | `api_user_data_by_account_ids` | Get the user data by account IDs. |
119
- | `api_username_available` | Check if a username is available. |
120
- | `api_v1_me_friends_username1` | Get a user's friends. |
121
- | `api_v1_me_friends_username` | Delete a user's friend. |
122
- | `api_v1_user_username_trophies` | Get a user's trophies. |
123
- | `user_username_about` | Get the about information for a user. |
124
- | `user_username_where` | Get the user's posts or comments. |
125
- | `users_search` | Search for users. |
126
- | `users_where` | Get the user's posts or comments. |
127
- | `r_subreddit_api_widgets` | Get the widgets for a subreddit. |
128
- | `r_subreddit_api_widget_order_section` | Get the widget order for a subreddit. |
129
- | `r_subreddit_api_widget_widget_id` | Delete a widget. |
130
- | `r_subreddit_wiki_discussions_page` | Get the discussions for a wiki page. |
131
- | `r_subreddit_wiki_page` | Get a wiki page. |
132
- | `r_subreddit_wiki_pages` | Get the pages for a wiki. |
133
- | `r_subreddit_wiki_revisions` | Get the revisions for a wiki. |
134
- | `r_subreddit_wiki_revisions_page` | Get the revisions for a wiki page. |
135
- | `r_subreddit_wiki_settings_page` | Get the settings for a wiki page. |
12
+ | `get_subreddit_posts` | Fetches a specified number of top-rated posts from a particular subreddit, allowing results to be filtered by a specific timeframe (e.g., 'day', 'week'). This is a simplified version compared to `get_subreddit_top_posts`, which uses more complex pagination parameters instead of a direct time filter. |
13
+ | `search_subreddits` | Searches for subreddits by name and description using a query string, with results sortable by relevance or activity. Unlike the broader `search_reddit` function, this method exclusively discovers subreddits, not posts, comments, or users. |
14
+ | `get_post_flairs` | Fetches a list of available post flairs (tags) for a specified subreddit. This is primarily used to discover the correct `flair_id` needed to categorize a new submission when using the `create_post` function. It returns flair details or a message if none are available. |
15
+ | `create_post` | Creates a new Reddit post in a specified subreddit. It supports text ('self') or link posts, requiring a title and corresponding content (text or URL). An optional flair can be assigned. Returns the API response or a formatted error message on failure. |
16
+ | `get_comment_by_id` | Retrieves a single Reddit comment's data, such as author and score, using its unique 't1_' prefixed ID. Unlike `get_post_comments_details` which fetches all comments for a post, this function targets one specific comment directly, returning an error dictionary if it is not found. |
17
+ | `post_comment` | Posts a new comment as a reply to a specified Reddit post or another comment. Using the parent's full ID and the desired text, it submits the comment via the API and returns the response containing the new comment's details. |
18
+ | `edit_content` | Modifies the text of a specific Reddit post or comment via its unique ID. Unlike creation or deletion functions, this method specifically handles updates to existing user-generated content, submitting the new text to the API and returning a JSON response detailing the edited item. |
19
+ | `delete_content` | Deletes a specified Reddit post or comment using its full identifier (`content_id`). It sends a POST request to the `/api/del` endpoint for permanent removal, unlike `edit_content` which only modifies. On success, it returns a confirmation message. |
20
+ | `get_post_comments_details` | Fetches a specific Reddit post's details and its complete comment tree using the post's unique ID. This function returns the entire discussion, including the original post and all associated comments, providing broader context than `get_comment_by_id` which only retrieves a single comment. |
21
+ | `get_current_user_info` | Retrieves the full profile information for the currently authenticated user by making a GET request to the `/api/v1/me` Reddit API endpoint. This differs from `get_user_profile`, which requires a username, and `get_current_user_karma`, which specifically fetches karma data. |
22
+ | `get_current_user_karma` | Fetches the karma breakdown for the authenticated user from the Reddit API. This function specifically targets the `/api/v1/me/karma` endpoint, returning karma statistics per subreddit, which is more specific than `get_current_user_info` that retrieves general profile information. |
23
+ | `get_hot_posts` | Retrieves trending 'hot' posts from the global Reddit feed. Unlike `get_subreddit_hot_posts`, this operates across all of Reddit, not a specific subreddit. It supports pagination and optional filtering by geographical region to customize the listing of returned posts. |
24
+ | `get_new_posts` | Fetches a list of the newest posts from across all of Reddit, not limited to a specific subreddit. This function supports optional pagination and filtering parameters to customize the API response, differentiating it from `get_subreddit_new_posts` which targets a single subreddit. |
25
+ | `get_top_posts` | Fetches top-rated posts from across all of Reddit, distinct from `get_subreddit_top_posts`, which operates on a specific subreddit. The function supports standard API pagination parameters like `limit`, `after`, and `before` to navigate results, providing a broad, site-wide view of top content. |
26
+ | `get_rising_posts` | Retrieves a list of rising posts from across all of Reddit. Unlike subreddit-specific listing functions (e.g., `get_subreddit_hot_posts`), this operates globally. It supports optional pagination and filtering parameters, such as `limit` and `after`, to customize the API response and navigate through results. |
27
+ | `get_controversial_posts` | Fetches a global list of the most controversial posts from across all of Reddit, distinct from subreddit-specific queries. Optional parameters allow for pagination and customization of the results, returning the direct API response data with the post listings. |
28
+ | `get_subreddit_hot_posts` | Retrieves a list of 'hot' posts from a specified subreddit, supporting pagination and geographical filtering. Unlike `get_hot_posts`, which queries all of Reddit, this function targets a single subreddit to fetch its currently trending content, distinct from top or new posts. |
29
+ | `get_subreddit_new_posts` | Retrieves a list of the newest posts from a specified subreddit, sorted chronologically. Unlike `get_new_posts` which targets all of Reddit, this function is subreddit-specific and supports standard pagination parameters like `limit` and `after` to navigate through the listing of recent submissions. |
30
+ | `get_subreddit_top_posts` | Fetches top-rated posts from a specific subreddit using standard API pagination parameters. Unlike the simpler `get_subreddit_posts` which filters by timeframe, this function offers more direct control over retrieving listings, distinguishing it from the site-wide `get_top_posts` which queries all of Reddit. |
31
+ | `search_reddit` | Executes a broad, keyword-based search across Reddit for various content types like posts, comments, or users. This general-purpose function offers extensive filtering options, distinguishing it from the more specialized `search_subreddits` which only finds communities. |
32
+ | `get_user_profile` | Retrieves public profile information for a specified Reddit user via the `/user/{username}/about` endpoint. Unlike `get_current_user_info`, which targets the authenticated user, this function fetches data like karma and account age for any user identified by their username. |
@@ -2,7 +2,6 @@ from typing import Any
2
2
 
3
3
  import httpx
4
4
  from loguru import logger
5
-
6
5
  from universal_mcp.applications.application import APIApplication
7
6
  from universal_mcp.exceptions import NotAuthorizedError
8
7
  from universal_mcp.integrations import Integration
@@ -45,11 +44,9 @@ class RedditApp(APIApplication):
45
44
  "User-Agent": "agentr-reddit-app/0.1 by AgentR",
46
45
  }
47
46
 
48
- def get_subreddit_posts(
49
- self, subreddit: str, limit: int = 5, timeframe: str = "day"
50
- ) -> dict[str, Any]:
47
+ def get_subreddit_posts(self, subreddit: str, limit: int = 5, timeframe: str = "day") -> dict[str, Any]:
51
48
  """
52
- Fetches top posts from a given subreddit, filterable by time.
49
+ Fetches a specified number of top-rated posts from a particular subreddit, allowing results to be filtered by a specific timeframe (e.g., 'day', 'week'). This is a simplified version compared to `get_subreddit_top_posts`, which uses more complex pagination parameters instead of a direct time filter.
53
50
 
54
51
  Args:
55
52
  subreddit: The name of the subreddit (e.g., 'python', 'worldnews') without the 'r/' prefix
@@ -57,7 +54,7 @@ class RedditApp(APIApplication):
57
54
  timeframe: The time period for top posts. Valid options: 'hour', 'day', 'week', 'month', 'year', 'all' (default: 'day')
58
55
 
59
56
  Returns:
60
- A formatted string containing a numbered list of top posts, including titles, authors, scores, and URLs, or an error message if the request fails
57
+ A dictionary containing a list of top posts with their details, or an error message if the request fails.
61
58
 
62
59
  Raises:
63
60
  RequestException: When the HTTP request to the Reddit API fails
@@ -70,34 +67,29 @@ class RedditApp(APIApplication):
70
67
  if timeframe not in valid_timeframes:
71
68
  return f"Error: Invalid timeframe '{timeframe}'. Please use one of: {', '.join(valid_timeframes)}"
72
69
  if not 1 <= limit <= 100:
73
- return (
74
- f"Error: Invalid limit '{limit}'. Please use a value between 1 and 100."
75
- )
70
+ return f"Error: Invalid limit '{limit}'. Please use a value between 1 and 100."
76
71
  url = f"{self.base_api_url}/r/{subreddit}/top"
77
72
  params = {"limit": limit, "t": timeframe}
78
- logger.info(
79
- f"Requesting top {limit} posts from r/{subreddit} for timeframe '{timeframe}'"
80
- )
73
+ logger.info(f"Requesting top {limit} posts from r/{subreddit} for timeframe '{timeframe}'")
81
74
  response = self._get(url, params=params)
82
75
  return self._handle_response(response)
83
76
 
84
- def search_subreddits(
85
- self, query: str, limit: int = 5, sort: str = "relevance"
86
- ) -> str:
77
+ def search_subreddits(self, query: str, limit: int = 5, sort: str = "relevance") -> dict[str, Any]:
87
78
  """
88
- Searches Reddit for subreddits matching a given query string and returns a formatted list of results including subreddit names, subscriber counts, and descriptions.
79
+ Finds subreddits based on a query string, searching their names and descriptions.
80
+ Results can be sorted by relevance or activity. This function is for discovering communities and does not search for posts or users, unlike the more general `search_reddit` function.
89
81
 
90
82
  Args:
91
- query: The text to search for in subreddit names and descriptions
92
- limit: The maximum number of subreddits to return, between 1 and 100 (default: 5)
93
- sort: The order of results, either 'relevance' or 'activity' (default: 'relevance')
83
+ query: The search query for subreddit names and descriptions.
84
+ limit: The maximum number of subreddits to return (1-100, default is 5).
85
+ sort: The sorting order for results. Can be 'relevance' or 'activity' (default is 'relevance').
94
86
 
95
87
  Returns:
96
- A formatted string containing a list of matching subreddits with their names, subscriber counts, and descriptions, or an error message if the search fails or parameters are invalid
88
+ A dictionary containing a list of matching subreddits, including their names, subscriber counts, and descriptions. Returns an error message on failure.
97
89
 
98
90
  Raises:
99
- RequestException: When the HTTP request to Reddit's API fails
100
- JSONDecodeError: When the API response contains invalid JSON
91
+ RequestException: If the API request to Reddit fails.
92
+ JSONDecodeError: If the API response is not valid JSON.
101
93
 
102
94
  Tags:
103
95
  search, important, reddit, api, query, format, list, validation
@@ -106,24 +98,20 @@ class RedditApp(APIApplication):
106
98
  if sort not in valid_sorts:
107
99
  return f"Error: Invalid sort option '{sort}'. Please use one of: {', '.join(valid_sorts)}"
108
100
  if not 1 <= limit <= 100:
109
- return (
110
- f"Error: Invalid limit '{limit}'. Please use a value between 1 and 100."
111
- )
101
+ return f"Error: Invalid limit '{limit}'. Please use a value between 1 and 100."
112
102
  url = f"{self.base_api_url}/subreddits/search"
113
103
  params = {
114
104
  "q": query,
115
105
  "limit": limit,
116
106
  "sort": sort,
117
107
  }
118
- logger.info(
119
- f"Searching for subreddits matching '{query}' (limit: {limit}, sort: {sort})"
120
- )
108
+ logger.info(f"Searching for subreddits matching '{query}' (limit: {limit}, sort: {sort})")
121
109
  response = self._get(url, params=params)
122
110
  return self._handle_response(response)
123
111
 
124
112
  def get_post_flairs(self, subreddit: str):
125
113
  """
126
- Retrieves a list of available post flairs for a specified subreddit using the Reddit API.
114
+ Fetches a list of available post flairs (tags) for a specified subreddit. This is primarily used to discover the correct `flair_id` needed to categorize a new submission when using the `create_post` function. It returns flair details or a message if none are available.
127
115
 
128
116
  Args:
129
117
  subreddit: The name of the subreddit (e.g., 'python', 'worldnews') without the 'r/' prefix
@@ -156,7 +144,7 @@ class RedditApp(APIApplication):
156
144
  flair_id: str = None,
157
145
  ):
158
146
  """
159
- Creates a new Reddit post in a specified subreddit with support for text posts, link posts, and image posts
147
+ Creates a new Reddit post in a specified subreddit. It supports text ('self') or link posts, requiring a title and corresponding content (text or URL). An optional flair can be assigned. Returns the API response or a formatted error message on failure.
160
148
 
161
149
  Args:
162
150
  subreddit: The name of the subreddit (e.g., 'python', 'worldnews') without the 'r/'
@@ -194,22 +182,16 @@ class RedditApp(APIApplication):
194
182
  logger.info(f"Submitting a new post to r/{subreddit}")
195
183
  response = self._post(url_api, data=data)
196
184
  response_json = response.json()
197
- if (
198
- response_json
199
- and "json" in response_json
200
- and "errors" in response_json["json"]
201
- ):
185
+ if response_json and "json" in response_json and "errors" in response_json["json"]:
202
186
  errors = response_json["json"]["errors"]
203
187
  if errors:
204
- error_message = ", ".join(
205
- [f"{code}: {message}" for code, message in errors]
206
- )
188
+ error_message = ", ".join([f"{code}: {message}" for code, message in errors])
207
189
  return f"Reddit API error: {error_message}"
208
190
  return response_json
209
191
 
210
192
  def get_comment_by_id(self, comment_id: str) -> dict:
211
193
  """
212
- Retrieves a specific Reddit comment using its unique identifier.
194
+ Retrieves a single Reddit comment's data, such as author and score, using its unique 't1_' prefixed ID. Unlike `get_post_comments_details` which fetches all comments for a post, this function targets one specific comment directly, returning an error dictionary if it is not found.
213
195
 
214
196
  Args:
215
197
  comment_id: The full unique identifier of the comment (prefixed with 't1_', e.g., 't1_abcdef')
@@ -235,7 +217,7 @@ class RedditApp(APIApplication):
235
217
 
236
218
  def post_comment(self, parent_id: str, text: str) -> dict:
237
219
  """
238
- Posts a comment to a Reddit post or comment using the Reddit API
220
+ Posts a new comment as a reply to a specified Reddit post or another comment. Using the parent's full ID and the desired text, it submits the comment via the API and returns the response containing the new comment's details.
239
221
 
240
222
  Args:
241
223
  parent_id: The full ID of the parent comment or post (e.g., 't3_abc123' for a post, 't1_def456' for a comment)
@@ -262,7 +244,7 @@ class RedditApp(APIApplication):
262
244
 
263
245
  def edit_content(self, content_id: str, text: str) -> dict:
264
246
  """
265
- Edits the text content of an existing Reddit post or comment using the Reddit API
247
+ Modifies the text of a specific Reddit post or comment via its unique ID. Unlike creation or deletion functions, this method specifically handles updates to existing user-generated content, submitting the new text to the API and returning a JSON response detailing the edited item.
266
248
 
267
249
  Args:
268
250
  content_id: The full ID of the content to edit (e.g., 't3_abc123' for a post, 't1_def456' for a comment)
@@ -289,7 +271,7 @@ class RedditApp(APIApplication):
289
271
 
290
272
  def delete_content(self, content_id: str) -> dict:
291
273
  """
292
- Deletes a specified Reddit post or comment using the Reddit API.
274
+ Deletes a specified Reddit post or comment using its full identifier (`content_id`). It sends a POST request to the `/api/del` endpoint for permanent removal, unlike `edit_content` which only modifies. On success, it returns a confirmation message.
293
275
 
294
276
  Args:
295
277
  content_id: The full ID of the content to delete (e.g., 't3_abc123' for a post, 't1_def456' for a comment)
@@ -315,9 +297,10 @@ class RedditApp(APIApplication):
315
297
 
316
298
  def get_current_user_info(self) -> Any:
317
299
  """
318
- Get the current user's information.
300
+ Retrieves the full profile information for the currently authenticated user by making a GET request to the `/api/v1/me` Reddit API endpoint. This differs from `get_user_profile`, which requires a username, and `get_current_user_karma`, which specifically fetches karma data.
301
+
319
302
  Returns:
320
- Any: API response data.
303
+ A dictionary containing the authenticated user's profile information.
321
304
 
322
305
  Tags:
323
306
  users
@@ -330,10 +313,10 @@ class RedditApp(APIApplication):
330
313
 
331
314
  def get_current_user_karma(self) -> Any:
332
315
  """
333
- Get the current user's karma.
316
+ Fetches the karma breakdown for the authenticated user from the Reddit API. This function specifically targets the `/api/v1/me/karma` endpoint, returning karma statistics per subreddit, which is more specific than `get_current_user_info` that retrieves general profile information.
334
317
 
335
318
  Returns:
336
- Any: API response data.
319
+ A dictionary containing the authenticated user's karma breakdown by subreddit.
337
320
 
338
321
  Tags:
339
322
  account
@@ -346,13 +329,13 @@ class RedditApp(APIApplication):
346
329
 
347
330
  def get_post_comments_details(self, post_id: str) -> Any:
348
331
  """
349
- Get post details and comments like title, author, score, etc.
332
+ Fetches a specific Reddit post's details and its complete comment tree using the post's unique ID. This function returns the entire discussion, including the original post and all associated comments, providing broader context than `get_comment_by_id` which only retrieves a single comment.
350
333
 
351
334
  Args:
352
- post_id (string): The Reddit post ID ( e.g. '1m734tx' for https://www.reddit.com/r/mcp/comments/1m734tx/comment/n4occ77/)
335
+ post_id (str): The Reddit post ID ( e.g. '1m734tx' for https://www.reddit.com/r/mcp/comments/1m734tx/comment/n4occ77/)
353
336
 
354
337
  Returns:
355
- Any: API response data containing post details and comments.
338
+ A dictionary containing the post details and its comment tree.
356
339
 
357
340
  Tags:
358
341
  listings, comments, posts, important
@@ -373,7 +356,7 @@ class RedditApp(APIApplication):
373
356
  sr_detail: str = None,
374
357
  ) -> Any:
375
358
  """
376
- Retrieves a list of the most controversial posts across Reddit.
359
+ Fetches a global list of the most controversial posts from across all of Reddit, distinct from subreddit-specific queries. Optional parameters allow for pagination and customization of the results, returning the direct API response data with the post listings.
377
360
 
378
361
  Args:
379
362
  after: Optional. The fullname of a thing (e.g., 't3_xxxxxx') to return results after.
@@ -384,7 +367,7 @@ class RedditApp(APIApplication):
384
367
  sr_detail: Optional. Expand subreddit details.
385
368
 
386
369
  Returns:
387
- Any: API response data containing a list of controversial posts.
370
+ A dictionary containing a listing of controversial posts.
388
371
 
389
372
  Tags:
390
373
  listings, posts, controversial, read-only
@@ -417,7 +400,7 @@ class RedditApp(APIApplication):
417
400
  sr_detail: str = None,
418
401
  ) -> Any:
419
402
  """
420
- Retrieves a list of the hottest posts across Reddit.
403
+ Retrieves trending 'hot' posts from the global Reddit feed. Unlike `get_subreddit_hot_posts`, this operates across all of Reddit, not a specific subreddit. It supports pagination and optional filtering by geographical region to customize the listing of returned posts.
421
404
 
422
405
  Args:
423
406
  g: Optional. A geographical region to filter posts by (e.g., 'GLOBAL', 'US', 'GB').
@@ -429,7 +412,7 @@ class RedditApp(APIApplication):
429
412
  sr_detail: Optional. Expand subreddit details.
430
413
 
431
414
  Returns:
432
- Any: API response data containing a list of hot posts.
415
+ A dictionary containing a listing of hot posts.
433
416
 
434
417
  Tags:
435
418
  listings, posts, hot, read-only
@@ -462,7 +445,7 @@ class RedditApp(APIApplication):
462
445
  sr_detail: str = None,
463
446
  ) -> Any:
464
447
  """
465
- Retrieves a list of the newest posts across Reddit.
448
+ Fetches a list of the newest posts from across all of Reddit, not limited to a specific subreddit. This function supports optional pagination and filtering parameters to customize the API response, differentiating it from `get_subreddit_new_posts` which targets a single subreddit.
466
449
 
467
450
  Args:
468
451
  after: Optional. The fullname of a thing (e.g., 't3_xxxxxx') to return results after.
@@ -473,7 +456,7 @@ class RedditApp(APIApplication):
473
456
  sr_detail: Optional. Expand subreddit details.
474
457
 
475
458
  Returns:
476
- Any: API response data containing a list of new posts.
459
+ A dictionary containing a listing of new posts.
477
460
 
478
461
  Tags:
479
462
  listings, posts, new, read-only
@@ -507,7 +490,7 @@ class RedditApp(APIApplication):
507
490
  sr_detail: str = None,
508
491
  ) -> Any:
509
492
  """
510
- Retrieves a list of the hottest posts in a specified subreddit.
493
+ Retrieves a list of 'hot' posts from a specified subreddit, supporting pagination and geographical filtering. Unlike `get_hot_posts`, which queries all of Reddit, this function targets a single subreddit to fetch its currently trending content, distinct from top or new posts.
511
494
 
512
495
  Args:
513
496
  subreddit: The name of the subreddit (e.g., 'python', 'worldnews') without the 'r/' prefix.
@@ -520,7 +503,7 @@ class RedditApp(APIApplication):
520
503
  sr_detail: Optional. Expand subreddit details.
521
504
 
522
505
  Returns:
523
- Any: API response data containing a list of hot posts from the subreddit.
506
+ A dictionary containing a listing of hot posts from the specified subreddit.
524
507
 
525
508
  Tags:
526
509
  listings, posts, subreddit, hot, read-only
@@ -556,7 +539,7 @@ class RedditApp(APIApplication):
556
539
  sr_detail: str = None,
557
540
  ) -> Any:
558
541
  """
559
- Retrieves a list of the newest posts in a specified subreddit.
542
+ Retrieves a list of the newest posts from a specified subreddit, sorted chronologically. Unlike `get_new_posts` which targets all of Reddit, this function is subreddit-specific and supports standard pagination parameters like `limit` and `after` to navigate through the listing of recent submissions.
560
543
 
561
544
  Args:
562
545
  subreddit: The name of the subreddit (e.g., 'python', 'worldnews') without the 'r/' prefix.
@@ -568,7 +551,7 @@ class RedditApp(APIApplication):
568
551
  sr_detail: Optional. Expand subreddit details.
569
552
 
570
553
  Returns:
571
- Any: API response data containing a list of new posts from the subreddit.
554
+ A dictionary containing a listing of new posts from the specified subreddit.
572
555
 
573
556
  Tags:
574
557
  listings, posts, subreddit, new, read-only
@@ -603,7 +586,7 @@ class RedditApp(APIApplication):
603
586
  sr_detail: str = None,
604
587
  ) -> Any:
605
588
  """
606
- Retrieves a list of the top posts in a specified subreddit.
589
+ Fetches top-rated posts from a specific subreddit using standard API pagination parameters. Unlike the simpler `get_subreddit_posts` which filters by timeframe, this function offers more direct control over retrieving listings, distinguishing it from the site-wide `get_top_posts` which queries all of Reddit.
607
590
 
608
591
  Args:
609
592
  subreddit: The name of the subreddit (e.g., 'python', 'worldnews') without the 'r/' prefix.
@@ -615,7 +598,7 @@ class RedditApp(APIApplication):
615
598
  sr_detail: Optional. Expand subreddit details.
616
599
 
617
600
  Returns:
618
- Any: API response data containing a list of top posts from the subreddit.
601
+ A dictionary containing a listing of top posts from the specified subreddit.
619
602
 
620
603
  Tags:
621
604
  listings, posts, subreddit, top, read-only
@@ -649,7 +632,7 @@ class RedditApp(APIApplication):
649
632
  sr_detail: str = None,
650
633
  ) -> Any:
651
634
  """
652
- Retrieves a list of the rising posts across Reddit.
635
+ Retrieves a list of rising posts from across all of Reddit. Unlike subreddit-specific listing functions (e.g., `get_subreddit_hot_posts`), this operates globally. It supports optional pagination and filtering parameters, such as `limit` and `after`, to customize the API response and navigate through results.
653
636
 
654
637
  Args:
655
638
  after: Optional. The fullname of a thing (e.g., 't3_xxxxxx') to return results after.
@@ -660,7 +643,7 @@ class RedditApp(APIApplication):
660
643
  sr_detail: Optional. Expand subreddit details.
661
644
 
662
645
  Returns:
663
- Any: API response data containing a list of rising posts.
646
+ A dictionary containing a listing of rising posts.
664
647
 
665
648
  Tags:
666
649
  listings, posts, rising, read-only
@@ -692,7 +675,7 @@ class RedditApp(APIApplication):
692
675
  sr_detail: str = None,
693
676
  ) -> Any:
694
677
  """
695
- Retrieves a list of the top posts across Reddit.
678
+ Fetches top-rated posts from across all of Reddit, distinct from `get_subreddit_top_posts`, which operates on a specific subreddit. The function supports standard API pagination parameters like `limit`, `after`, and `before` to navigate results, providing a broad, site-wide view of top content.
696
679
 
697
680
  Args:
698
681
  after: Optional. The fullname of a thing (e.g., 't3_xxxxxx') to return results after.
@@ -703,7 +686,7 @@ class RedditApp(APIApplication):
703
686
  sr_detail: Optional. Expand subreddit details.
704
687
 
705
688
  Returns:
706
- Any: API response data containing a list of top posts.
689
+ A dictionary containing a listing of top posts.
707
690
 
708
691
  Tags:
709
692
  listings, posts, top, read-only
@@ -742,7 +725,7 @@ class RedditApp(APIApplication):
742
725
  type: str = None,
743
726
  ) -> Any:
744
727
  """
745
- Searches for posts, comments, and users across Reddit.
728
+ Executes a broad, keyword-based search across Reddit for various content types like posts, comments, or users. This general-purpose function offers extensive filtering options, distinguishing it from the more specialized `search_subreddits` which only finds communities.
746
729
 
747
730
  Args:
748
731
  after: Optional. The fullname of a thing (e.g., 't3_xxxxxx') to return results after.
@@ -760,7 +743,7 @@ class RedditApp(APIApplication):
760
743
  type: Optional. A comma-separated list of result types ('sr', 'link', 'user').
761
744
 
762
745
  Returns:
763
- Any: API response data containing search results.
746
+ A dictionary containing the search results.
764
747
 
765
748
  Tags:
766
749
  search, reddit, posts, comments, users, read-only
@@ -791,7 +774,7 @@ class RedditApp(APIApplication):
791
774
 
792
775
  def get_user_profile(self, username: str) -> Any:
793
776
  """
794
- Retrieves the profile information for a given Reddit user.
777
+ Retrieves public profile information for a specified Reddit user via the `/user/{username}/about` endpoint. Unlike `get_current_user_info`, which targets the authenticated user, this function fetches data like karma and account age for any user identified by their username.
795
778
 
796
779
  Args:
797
780
  username: The username of the user to look up.
@@ -9,32 +9,32 @@ This is automatically generated from OpenAPI schema for the ResendApp API.
9
9
 
10
10
  | Tool | Description |
11
11
  |------|-------------|
12
- | `send_email` | Sends an email to specified recipients using the Resend API. |
13
- | `send_batch_emails` | Sends a batch of emails using the Resend API. |
14
- | `get_email` | Retrieves a single email by its specified ID. |
15
- | `update_scheduled_email` | Updates the scheduling of an email to a new time. |
16
- | `cancel_scheduled_email` | Cancels a scheduled email using the provided email ID. |
17
- | `create_domain` | Creates a new domain with the specified name. |
18
- | `get_domain` | Retrieves a single domain by its ID. |
19
- | `verify_domain` | Verifies an existing domain using the provided domain ID. |
20
- | `update_domain` | Updates an existing domain's settings regarding open tracking, click tracking, and TLS enforcement. |
21
- | `list_domains` | Retrieves a list of all domains for the authenticated user. |
22
- | `remove_domain` | Removes an existing domain by its ID using the Resend API. |
23
- | `create_api_key` | Creates a new API key for authenticating with Resend. |
24
- | `list_api_keys` | Retrieves a list of all API keys available through the resend service. |
25
- | `remove_api_key` | Removes an existing API key using the specified key ID. |
26
- | `create_broadcast` | Creates a new broadcast to send to a specified audience. |
27
- | `get_broadcast` | Retrieves a single broadcast by its ID. |
28
- | `update_broadcast` | Updates a broadcast by modifying its HTML content and/or subject line. |
29
- | `send_broadcast` | Starts sending a broadcast via the API. |
30
- | `remove_broadcast` | Removes an existing broadcast with 'draft' status. |
31
- | `list_broadcasts` | Retrieves a list of all available broadcasts using the configured API key. |
32
- | `create_audience` | Creates a new audience (a list of contacts) with the specified name. |
33
- | `get_audience` | Retrieves a single audience object from the API using the specified audience ID. |
34
- | `remove_audience` | Removes an existing audience using the provided audience ID and returns the API response. |
35
- | `list_audiences` | Retrieves a list of all audiences. |
36
- | `create_contact` | Creates a contact within a specific audience. |
37
- | `get_contact` | Retrieves a single contact from an audience by providing either a unique contact ID or an email address, ensuring exactly one identifier is given. |
38
- | `update_contact` | Updates an existing contact, identified by ID or email, within a specified audience. |
39
- | `remove_contact` | Removes a contact from an audience, identified by ID or email. |
40
- | `list_contacts` | Lists all contacts from a specified audience. |
12
+ | `send_email` | 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. |
13
+ | `send_batch_emails` | 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. |
14
+ | `retrieve_email_by_id` | 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. |
15
+ | `reschedule_email` | 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. |
16
+ | `cancel_scheduled_email` | 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. |
17
+ | `create_domain` | 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. |
18
+ | `get_domain` | 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. |
19
+ | `verify_domain` | 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. |
20
+ | `update_domain_settings` | 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. |
21
+ | `list_domains` | 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. |
22
+ | `remove_domain` | 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. |
23
+ | `create_api_key` | 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. |
24
+ | `list_api_keys` | 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. |
25
+ | `remove_api_key` | 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. |
26
+ | `register_broadcast` | 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. |
27
+ | `get_broadcast` | 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. |
28
+ | `update_broadcast` | 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. |
29
+ | `send_or_schedule_broadcast` | 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. |
30
+ | `remove_draft_broadcast` | 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. |
31
+ | `list_broadcasts` | 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. |
32
+ | `create_audience` | 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. |
33
+ | `get_audience` | 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. |
34
+ | `remove_audience` | 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. |
35
+ | `list_audiences` | 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. |
36
+ | `create_contact` | 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. |
37
+ | `get_contact` | 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. |
38
+ | `update_contact` | 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. |
39
+ | `remove_contact` | 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. |
40
+ | `list_contacts` | 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. |