universal-mcp-applications 0.1.12__tar.gz → 0.1.36rc4__tar.gz

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.
Files changed (354) hide show
  1. universal_mcp_applications-0.1.36rc4/.gitignore +60 -0
  2. universal_mcp_applications-0.1.36rc4/GEMINI.md +125 -0
  3. {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/PKG-INFO +6 -91
  4. {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/README.md +1 -88
  5. {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/bump_and_release.sh +0 -1
  6. {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/pyproject.toml +14 -9
  7. universal_mcp_applications-0.1.36rc4/src/scripts/check_internal_calls.py +195 -0
  8. universal_mcp_applications-0.1.36rc4/src/scripts/docgen.py +489 -0
  9. universal_mcp_applications-0.1.36rc4/src/scripts/make_async.py +99 -0
  10. universal_mcp_applications-0.1.36rc4/src/scripts/prompts.py +26 -0
  11. universal_mcp_applications-0.1.36rc4/src/scripts/readme.py +112 -0
  12. universal_mcp_applications-0.1.36rc4/src/scripts/run_docgen.py +29 -0
  13. {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/tests/test_applications.py +11 -12
  14. universal_mcp_applications-0.1.36rc4/src/universal_mcp/applications/BEST_PRACTICES.md +166 -0
  15. {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/ahrefs/README.md +3 -3
  16. {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/ahrefs/app.py +52 -198
  17. {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/airtable/README.md +3 -3
  18. {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/airtable/app.py +23 -123
  19. {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/apollo/app.py +111 -465
  20. {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/asana/README.md +3 -3
  21. {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/asana/app.py +417 -1567
  22. universal_mcp_applications-0.1.36rc4/src/universal_mcp/applications/aws_s3/README.md +29 -0
  23. {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/aws_s3/app.py +63 -129
  24. universal_mcp_applications-0.1.36rc4/src/universal_mcp/applications/bill/README.md +249 -0
  25. {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/bill/app.py +546 -1957
  26. {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/box/app.py +1068 -3981
  27. {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/braze/app.py +364 -1430
  28. universal_mcp_applications-0.1.36rc4/src/universal_mcp/applications/browser_use/README.md +1 -0
  29. universal_mcp_applications-0.1.36rc4/src/universal_mcp/applications/browser_use/app.py +65 -0
  30. {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/cal_com_v2/app.py +207 -625
  31. universal_mcp_applications-0.1.36rc4/src/universal_mcp/applications/calendly/README.md +53 -0
  32. {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/calendly/app.py +119 -258
  33. universal_mcp_applications-0.1.36rc4/src/universal_mcp/applications/canva/README.md +43 -0
  34. {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/canva/app.py +109 -178
  35. {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/clickup/README.md +4 -4
  36. {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/clickup/app.py +207 -674
  37. {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/coda/app.py +146 -426
  38. {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/confluence/app.py +310 -1099
  39. {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/contentful/README.md +1 -2
  40. {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/contentful/app.py +40 -156
  41. {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/crustdata/README.md +3 -3
  42. {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/crustdata/app.py +28 -107
  43. {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/dialpad/app.py +283 -756
  44. {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/digitalocean/app.py +1766 -5777
  45. universal_mcp_applications-0.1.36rc4/src/universal_mcp/applications/domain_checker/README.md +13 -0
  46. {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/domain_checker/app.py +21 -69
  47. universal_mcp_applications-0.1.36rc4/src/universal_mcp/applications/e2b/README.md +12 -0
  48. {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/e2b/app.py +16 -67
  49. universal_mcp_applications-0.1.36rc4/src/universal_mcp/applications/elevenlabs/README.md +14 -0
  50. universal_mcp_applications-0.1.36rc4/src/universal_mcp/applications/elevenlabs/app.py +114 -0
  51. universal_mcp_applications-0.1.36rc4/src/universal_mcp/applications/exa/README.md +15 -0
  52. {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/exa/app.py +10 -16
  53. universal_mcp_applications-0.1.36rc4/src/universal_mcp/applications/falai/README.md +18 -0
  54. {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/falai/app.py +35 -110
  55. {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/figma/README.md +3 -3
  56. {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/figma/app.py +53 -137
  57. universal_mcp_applications-0.1.36rc4/src/universal_mcp/applications/file_system/README.md +13 -0
  58. {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/file_system/app.py +19 -22
  59. universal_mcp_applications-0.1.36rc4/src/universal_mcp/applications/firecrawl/README.md +20 -0
  60. {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/firecrawl/app.py +61 -163
  61. universal_mcp_applications-0.1.36rc4/src/universal_mcp/applications/fireflies/README.md +25 -0
  62. universal_mcp_applications-0.1.36rc4/src/universal_mcp/applications/fireflies/app.py +392 -0
  63. universal_mcp_applications-0.1.36rc4/src/universal_mcp/applications/fpl/README.md +23 -0
  64. {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/fpl/app.py +124 -553
  65. {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/fpl/utils/fixtures.py +15 -49
  66. {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/fpl/utils/helper.py +25 -89
  67. {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/fpl/utils/league_utils.py +20 -64
  68. {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/ghost_content/app.py +52 -162
  69. universal_mcp_applications-0.1.36rc4/src/universal_mcp/applications/github/README.md +21 -0
  70. universal_mcp_applications-0.1.36rc4/src/universal_mcp/applications/github/app.py +390 -0
  71. {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/gong/app.py +88 -248
  72. universal_mcp_applications-0.1.36rc4/src/universal_mcp/applications/google_calendar/README.md +21 -0
  73. {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/google_calendar/app.py +34 -87
  74. universal_mcp_applications-0.1.36rc4/src/universal_mcp/applications/google_docs/README.md +25 -0
  75. universal_mcp_applications-0.1.36rc4/src/universal_mcp/applications/google_docs/app.py +730 -0
  76. universal_mcp_applications-0.1.36rc4/src/universal_mcp/applications/google_drive/README.md +65 -0
  77. {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/google_drive/app.py +257 -649
  78. universal_mcp_applications-0.1.36rc4/src/universal_mcp/applications/google_gemini/README.md +14 -0
  79. universal_mcp_applications-0.1.36rc4/src/universal_mcp/applications/google_gemini/app.py +172 -0
  80. universal_mcp_applications-0.1.36rc4/src/universal_mcp/applications/google_mail/README.md +32 -0
  81. {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/google_mail/app.py +112 -195
  82. universal_mcp_applications-0.1.36rc4/src/universal_mcp/applications/google_searchconsole/README.md +21 -0
  83. {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/google_searchconsole/app.py +26 -65
  84. universal_mcp_applications-0.1.36rc4/src/universal_mcp/applications/google_sheet/README.md +36 -0
  85. {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/google_sheet/app.py +252 -736
  86. {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/google_sheet/helper.py +10 -37
  87. {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/hashnode/README.md +6 -3
  88. universal_mcp_applications-0.1.36rc4/src/universal_mcp/applications/hashnode/app.py +393 -0
  89. {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/heygen/app.py +44 -122
  90. universal_mcp_applications-0.1.36rc4/src/universal_mcp/applications/http_tools/README.md +16 -0
  91. {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/http_tools/app.py +15 -38
  92. universal_mcp_applications-0.1.36rc4/src/universal_mcp/applications/hubspot/api_segments/api_segment_base.py +54 -0
  93. universal_mcp_applications-0.1.36rc4/src/universal_mcp/applications/hubspot/api_segments/crm_api.py +6224 -0
  94. universal_mcp_applications-0.1.36rc4/src/universal_mcp/applications/hubspot/api_segments/marketing_api.py +1279 -0
  95. {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/hubspot/app.py +25 -102
  96. {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/jira/app.py +2071 -7987
  97. {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/klaviyo/README.md +0 -36
  98. {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/klaviyo/app.py +494 -1376
  99. universal_mcp_applications-0.1.36rc4/src/universal_mcp/applications/linkedin/README.md +34 -0
  100. universal_mcp_applications-0.1.36rc4/src/universal_mcp/applications/linkedin/app.py +940 -0
  101. {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/mailchimp/README.md +3 -3
  102. {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/mailchimp/app.py +450 -1605
  103. {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/markitdown/app.py +14 -21
  104. {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/miro/app.py +217 -699
  105. universal_mcp_applications-0.1.36rc4/src/universal_mcp/applications/ms_teams/README.md +42 -0
  106. {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/ms_teams/app.py +113 -235
  107. {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/neon/README.md +3 -3
  108. {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/neon/app.py +86 -192
  109. {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/notion/app.py +21 -36
  110. universal_mcp_applications-0.1.36rc4/src/universal_mcp/applications/onedrive/README.md +24 -0
  111. universal_mcp_applications-0.1.36rc4/src/universal_mcp/applications/onedrive/__init__.py +1 -0
  112. universal_mcp_applications-0.1.36rc4/src/universal_mcp/applications/onedrive/app.py +316 -0
  113. universal_mcp_applications-0.1.36rc4/src/universal_mcp/applications/openai/README.md +23 -0
  114. {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/openai/app.py +62 -185
  115. universal_mcp_applications-0.1.36rc4/src/universal_mcp/applications/outlook/README.md +20 -0
  116. universal_mcp_applications-0.1.36rc4/src/universal_mcp/applications/outlook/app.py +464 -0
  117. universal_mcp_applications-0.1.36rc4/src/universal_mcp/applications/perplexity/README.md +12 -0
  118. universal_mcp_applications-0.1.36rc4/src/universal_mcp/applications/perplexity/app.py +50 -0
  119. {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/pipedrive/app.py +832 -3142
  120. universal_mcp_applications-0.1.36rc4/src/universal_mcp/applications/posthog/README.md +133 -0
  121. {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/posthog/app.py +163 -432
  122. universal_mcp_applications-0.1.36rc4/src/universal_mcp/applications/reddit/README.md +32 -0
  123. universal_mcp_applications-0.1.36rc4/src/universal_mcp/applications/reddit/app.py +720 -0
  124. universal_mcp_applications-0.1.36rc4/src/universal_mcp/applications/resend/README.md +40 -0
  125. {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/resend/app.py +80 -144
  126. {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/retell/app.py +14 -41
  127. {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/rocketlane/app.py +221 -935
  128. universal_mcp_applications-0.1.36rc4/src/universal_mcp/applications/scraper/README.md +18 -0
  129. universal_mcp_applications-0.1.36rc4/src/universal_mcp/applications/scraper/__init__.py +1 -0
  130. universal_mcp_applications-0.1.36rc4/src/universal_mcp/applications/scraper/app.py +362 -0
  131. {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/semanticscholar/app.py +22 -64
  132. {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/semrush/README.md +3 -0
  133. {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/semrush/app.py +43 -77
  134. {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/sendgrid/app.py +512 -1262
  135. {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/sentry/app.py +271 -906
  136. universal_mcp_applications-0.1.36rc4/src/universal_mcp/applications/serpapi/README.md +14 -0
  137. {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/serpapi/app.py +45 -150
  138. universal_mcp_applications-0.1.36rc4/src/universal_mcp/applications/sharepoint/README.md +19 -0
  139. universal_mcp_applications-0.1.36rc4/src/universal_mcp/applications/sharepoint/app.py +316 -0
  140. {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/shopify/app.py +1551 -4288
  141. {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/shortcut/README.md +3 -3
  142. {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/shortcut/app.py +155 -417
  143. universal_mcp_applications-0.1.36rc4/src/universal_mcp/applications/slack/README.md +23 -0
  144. {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/slack/app.py +65 -116
  145. {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/spotify/README.md +3 -3
  146. {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/spotify/app.py +126 -325
  147. {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/supabase/README.md +3 -3
  148. {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/supabase/app.py +104 -213
  149. universal_mcp_applications-0.1.36rc4/src/universal_mcp/applications/tavily/README.md +12 -0
  150. {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/tavily/app.py +3 -3
  151. {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/trello/app.py +693 -2656
  152. universal_mcp_applications-0.1.36rc4/src/universal_mcp/applications/twilio/README.md +15 -0
  153. {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/twilio/app.py +14 -50
  154. universal_mcp_applications-0.1.36rc4/src/universal_mcp/applications/twitter/README.md +103 -0
  155. {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/twitter/api_segments/compliance_api.py +9 -24
  156. {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/twitter/api_segments/dm_conversations_api.py +18 -35
  157. {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/twitter/api_segments/dm_events_api.py +6 -9
  158. {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/twitter/api_segments/likes_api.py +8 -13
  159. {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/twitter/api_segments/lists_api.py +26 -47
  160. {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/twitter/api_segments/spaces_api.py +12 -18
  161. {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/twitter/api_segments/trends_api.py +4 -7
  162. {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/twitter/api_segments/tweets_api.py +61 -109
  163. {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/twitter/api_segments/usage_api.py +2 -7
  164. {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/twitter/api_segments/users_api.py +104 -166
  165. {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/twitter/app.py +15 -11
  166. universal_mcp_applications-0.1.36rc4/src/universal_mcp/applications/whatsapp/README.md +23 -0
  167. {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/whatsapp/app.py +65 -213
  168. {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/whatsapp/audio.py +35 -35
  169. {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/whatsapp/whatsapp.py +136 -148
  170. universal_mcp_applications-0.1.36rc4/src/universal_mcp/applications/whatsapp_business/README.md +34 -0
  171. {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/whatsapp_business/app.py +109 -322
  172. {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/wrike/app.py +45 -118
  173. universal_mcp_applications-0.1.36rc4/src/universal_mcp/applications/yahoo_finance/README.md +17 -0
  174. universal_mcp_applications-0.1.36rc4/src/universal_mcp/applications/yahoo_finance/__init__.py +1 -0
  175. universal_mcp_applications-0.1.36rc4/src/universal_mcp/applications/yahoo_finance/app.py +254 -0
  176. universal_mcp_applications-0.1.36rc4/src/universal_mcp/applications/youtube/README.md +57 -0
  177. {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/youtube/app.py +161 -334
  178. universal_mcp_applications-0.1.36rc4/src/universal_mcp/applications/zenquotes/README.md +12 -0
  179. {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/zenquotes/__init__.py +2 -0
  180. {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/zenquotes/app.py +5 -5
  181. universal_mcp_applications-0.1.36rc4/uv.lock +5773 -0
  182. universal_mcp_applications-0.1.12/.gitignore +0 -40
  183. universal_mcp_applications-0.1.12/examples/children_story_builder.py +0 -146
  184. universal_mcp_applications-0.1.12/src/universal_mcp/applications/calendly/README.md +0 -53
  185. universal_mcp_applications-0.1.12/src/universal_mcp/applications/canva/README.md +0 -43
  186. universal_mcp_applications-0.1.12/src/universal_mcp/applications/domain_checker/README.md +0 -13
  187. universal_mcp_applications-0.1.12/src/universal_mcp/applications/e2b/README.md +0 -12
  188. universal_mcp_applications-0.1.12/src/universal_mcp/applications/elevenlabs/README.md +0 -88
  189. universal_mcp_applications-0.1.12/src/universal_mcp/applications/elevenlabs/app.py +0 -145
  190. universal_mcp_applications-0.1.12/src/universal_mcp/applications/exa/README.md +0 -15
  191. universal_mcp_applications-0.1.12/src/universal_mcp/applications/falai/README.md +0 -17
  192. universal_mcp_applications-0.1.12/src/universal_mcp/applications/firecrawl/README.md +0 -20
  193. universal_mcp_applications-0.1.12/src/universal_mcp/applications/fireflies/README.md +0 -25
  194. universal_mcp_applications-0.1.12/src/universal_mcp/applications/fireflies/app.py +0 -507
  195. universal_mcp_applications-0.1.12/src/universal_mcp/applications/fpl/README.md +0 -23
  196. universal_mcp_applications-0.1.12/src/universal_mcp/applications/github/README.md +0 -1049
  197. universal_mcp_applications-0.1.12/src/universal_mcp/applications/github/app.py +0 -50601
  198. universal_mcp_applications-0.1.12/src/universal_mcp/applications/google_calendar/README.md +0 -21
  199. universal_mcp_applications-0.1.12/src/universal_mcp/applications/google_docs/README.md +0 -25
  200. universal_mcp_applications-0.1.12/src/universal_mcp/applications/google_docs/app.py +0 -760
  201. universal_mcp_applications-0.1.12/src/universal_mcp/applications/google_drive/README.md +0 -68
  202. universal_mcp_applications-0.1.12/src/universal_mcp/applications/google_gemini/README.md +0 -25
  203. universal_mcp_applications-0.1.12/src/universal_mcp/applications/google_gemini/app.py +0 -210
  204. universal_mcp_applications-0.1.12/src/universal_mcp/applications/google_mail/README.md +0 -31
  205. universal_mcp_applications-0.1.12/src/universal_mcp/applications/google_searchconsole/README.md +0 -21
  206. universal_mcp_applications-0.1.12/src/universal_mcp/applications/google_sheet/README.md +0 -36
  207. universal_mcp_applications-0.1.12/src/universal_mcp/applications/hashnode/app.py +0 -456
  208. universal_mcp_applications-0.1.12/src/universal_mcp/applications/http_tools/README.md +0 -16
  209. universal_mcp_applications-0.1.12/src/universal_mcp/applications/linkedin/README.md +0 -15
  210. universal_mcp_applications-0.1.12/src/universal_mcp/applications/linkedin/app.py +0 -243
  211. universal_mcp_applications-0.1.12/src/universal_mcp/applications/ms_teams/README.md +0 -42
  212. universal_mcp_applications-0.1.12/src/universal_mcp/applications/openai/README.md +0 -22
  213. universal_mcp_applications-0.1.12/src/universal_mcp/applications/outlook/README.md +0 -20
  214. universal_mcp_applications-0.1.12/src/universal_mcp/applications/outlook/app.py +0 -442
  215. universal_mcp_applications-0.1.12/src/universal_mcp/applications/perplexity/README.md +0 -12
  216. universal_mcp_applications-0.1.12/src/universal_mcp/applications/perplexity/app.py +0 -65
  217. universal_mcp_applications-0.1.12/src/universal_mcp/applications/posthog/README.md +0 -132
  218. universal_mcp_applications-0.1.12/src/universal_mcp/applications/reddit/README.md +0 -135
  219. universal_mcp_applications-0.1.12/src/universal_mcp/applications/reddit/app.py +0 -4664
  220. universal_mcp_applications-0.1.12/src/universal_mcp/applications/replicate/README.md +0 -18
  221. universal_mcp_applications-0.1.12/src/universal_mcp/applications/replicate/__init__.py +0 -1
  222. universal_mcp_applications-0.1.12/src/universal_mcp/applications/replicate/app.py +0 -495
  223. universal_mcp_applications-0.1.12/src/universal_mcp/applications/resend/README.md +0 -40
  224. universal_mcp_applications-0.1.12/src/universal_mcp/applications/scraper/README.md +0 -15
  225. universal_mcp_applications-0.1.12/src/universal_mcp/applications/scraper/__init__.py +0 -1
  226. universal_mcp_applications-0.1.12/src/universal_mcp/applications/scraper/app.py +0 -189
  227. universal_mcp_applications-0.1.12/src/universal_mcp/applications/serpapi/README.md +0 -14
  228. universal_mcp_applications-0.1.12/src/universal_mcp/applications/sharepoint/README.md +0 -0
  229. universal_mcp_applications-0.1.12/src/universal_mcp/applications/sharepoint/app.py +0 -216
  230. universal_mcp_applications-0.1.12/src/universal_mcp/applications/slack/README.md +0 -0
  231. universal_mcp_applications-0.1.12/src/universal_mcp/applications/tavily/README.md +0 -12
  232. universal_mcp_applications-0.1.12/src/universal_mcp/applications/twilio/README.md +0 -0
  233. universal_mcp_applications-0.1.12/src/universal_mcp/applications/twitter/README.md +0 -100
  234. universal_mcp_applications-0.1.12/src/universal_mcp/applications/unipile/README.md +0 -28
  235. universal_mcp_applications-0.1.12/src/universal_mcp/applications/unipile/__init__.py +0 -1
  236. universal_mcp_applications-0.1.12/src/universal_mcp/applications/unipile/app.py +0 -833
  237. universal_mcp_applications-0.1.12/src/universal_mcp/applications/whatsapp/README.md +0 -23
  238. universal_mcp_applications-0.1.12/src/universal_mcp/applications/whatsapp_business/README.md +0 -34
  239. universal_mcp_applications-0.1.12/src/universal_mcp/applications/youtube/README.md +0 -57
  240. universal_mcp_applications-0.1.12/src/universal_mcp/applications/zenquotes/README.md +0 -12
  241. universal_mcp_applications-0.1.12/test.py +0 -43
  242. universal_mcp_applications-0.1.12/uv.lock +0 -4902
  243. {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/LICENSE +0 -0
  244. {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/ahrefs/__init__.py +0 -0
  245. {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/airtable/__init__.py +0 -0
  246. {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/apollo/README.md +0 -0
  247. {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/apollo/__init__.py +0 -0
  248. {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/asana/__init__.py +0 -0
  249. {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/aws_s3/__init__.py +0 -0
  250. {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/bill/__init__.py +0 -0
  251. {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/box/README.md +0 -0
  252. {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/box/__init__.py +0 -0
  253. {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/braze/README.md +0 -0
  254. {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/braze/__init__.py +0 -0
  255. {universal_mcp_applications-0.1.12/src/universal_mcp/applications/twitter/api_segments → universal_mcp_applications-0.1.36rc4/src/universal_mcp/applications/browser_use}/__init__.py +0 -0
  256. {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/cal_com_v2/README.md +0 -0
  257. {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/cal_com_v2/__init__.py +0 -0
  258. {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/calendly/__init__.py +0 -0
  259. {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/canva/__init__.py +0 -0
  260. {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/clickup/__init__.py +0 -0
  261. {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/coda/README.md +0 -0
  262. {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/coda/__init__.py +0 -0
  263. {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/confluence/README.md +0 -0
  264. {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/confluence/__init__.py +0 -0
  265. {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/contentful/__init__.py +0 -0
  266. {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/crustdata/__init__.py +0 -0
  267. {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/dialpad/README.md +0 -0
  268. {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/dialpad/__init__.py +0 -0
  269. {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/digitalocean/README.md +0 -0
  270. {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/digitalocean/__init__.py +0 -0
  271. {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/domain_checker/__init__.py +0 -0
  272. {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/e2b/__init__.py +0 -0
  273. {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/elevenlabs/__init__.py +0 -0
  274. {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/exa/__init__.py +0 -0
  275. {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/falai/__init__.py +0 -0
  276. {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/figma/__init__.py +0 -0
  277. {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/file_system/__init__.py +0 -0
  278. {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/firecrawl/__init__.py +0 -0
  279. {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/fireflies/__init__.py +0 -0
  280. {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/fpl/__init__.py +0 -0
  281. {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/fpl/utils/api.py +0 -0
  282. {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/fpl/utils/position_utils.py +0 -0
  283. {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/ghost_content/README.md +0 -0
  284. {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/ghost_content/__init__.py +0 -0
  285. {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/github/__init__.py +0 -0
  286. {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/gong/README.md +0 -0
  287. {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/gong/__init__.py +0 -0
  288. {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/google_calendar/__init__.py +0 -0
  289. {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/google_docs/__init__.py +0 -0
  290. {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/google_drive/__init__.py +0 -0
  291. {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/google_gemini/__init__.py +0 -0
  292. {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/google_mail/__init__.py +0 -0
  293. {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/google_searchconsole/__init__.py +0 -0
  294. {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/google_sheet/__init__.py +0 -0
  295. {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/hashnode/__init__.py +0 -0
  296. {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/heygen/README.md +0 -0
  297. {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/heygen/__init__.py +0 -0
  298. {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/http_tools/__init__.py +0 -0
  299. {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/hubspot/README.md +0 -0
  300. {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/hubspot/__init__.py +0 -0
  301. /universal_mcp_applications-0.1.12/src/universal_mcp/applications/aws_s3/README.md → /universal_mcp_applications-0.1.36rc4/src/universal_mcp/applications/hubspot/api_segments/__init__.py +0 -0
  302. {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/jira/README.md +0 -0
  303. {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/jira/__init__.py +0 -0
  304. {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/klaviyo/__init__.py +0 -0
  305. {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/linkedin/__init__.py +0 -0
  306. {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/mailchimp/__init__.py +0 -0
  307. {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/markitdown/README.md +0 -0
  308. {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/markitdown/__init__.py +0 -0
  309. {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/miro/README.md +0 -0
  310. {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/miro/__init__.py +0 -0
  311. {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/ms_teams/__init__.py +0 -0
  312. {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/neon/__init__.py +0 -0
  313. {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/notion/README.md +0 -0
  314. {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/notion/__init__.py +0 -0
  315. {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/openai/__init__.py +0 -0
  316. {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/outlook/__init__.py +0 -0
  317. {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/perplexity/__init__.py +0 -0
  318. {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/pipedrive/README.md +0 -0
  319. {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/pipedrive/__init__.py +0 -0
  320. {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/posthog/__init__.py +0 -0
  321. {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/reddit/__init__.py +0 -0
  322. {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/resend/__init__.py +0 -0
  323. {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/retell/README.md +0 -0
  324. {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/retell/__init__.py +0 -0
  325. {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/rocketlane/README.md +0 -0
  326. {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/rocketlane/__init__.py +0 -0
  327. {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/semanticscholar/README.md +0 -0
  328. {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/semanticscholar/__init__.py +0 -0
  329. {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/semrush/__init__.py +0 -0
  330. {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/sendgrid/README.md +0 -0
  331. {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/sendgrid/__init__.py +0 -0
  332. {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/sentry/README.md +0 -0
  333. {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/sentry/__init__.py +0 -0
  334. {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/serpapi/__init__.py +0 -0
  335. {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/sharepoint/__init__.py +0 -0
  336. {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/shopify/README.md +0 -0
  337. {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/shopify/__init__.py +0 -0
  338. {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/shortcut/__init__.py +0 -0
  339. {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/slack/__init__.py +0 -0
  340. {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/spotify/__init__.py +0 -0
  341. {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/supabase/__init__.py +0 -0
  342. {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/tavily/__init__.py +0 -0
  343. {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/trello/README.md +0 -0
  344. {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/trello/__init__.py +0 -0
  345. {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/twilio/__init__.py +0 -0
  346. {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/twitter/__init__.py +0 -0
  347. /universal_mcp_applications-0.1.12/src/universal_mcp/applications/bill/README.md → /universal_mcp_applications-0.1.36rc4/src/universal_mcp/applications/twitter/api_segments/__init__.py +0 -0
  348. {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/twitter/api_segments/api_segment_base.py +0 -0
  349. {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/twitter/api_segments/openapi_json_api.py +0 -0
  350. {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/whatsapp/__init__.py +0 -0
  351. {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/whatsapp_business/__init__.py +0 -0
  352. {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/wrike/README.md +0 -0
  353. {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/wrike/__init__.py +0 -0
  354. {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/youtube/__init__.py +0 -0
@@ -0,0 +1,60 @@
1
+ # Python-generated files
2
+ __pycache__/
3
+ *.py[oc]
4
+ build/
5
+ dist/
6
+ wheels/
7
+ *.egg-info
8
+
9
+ # Virtual environments
10
+ .venv
11
+
12
+ # Environment variables
13
+ .env
14
+ .env.local
15
+
16
+
17
+ dump/
18
+
19
+
20
+ # SQLite database
21
+ *.db
22
+ *.sqlite
23
+ *.sqlite3
24
+ *.db-shm
25
+ *.db-wal
26
+
27
+
28
+ # Pyright
29
+ .pyright
30
+
31
+ # Ruff
32
+ .ruff_cache
33
+
34
+ # Pytest
35
+ .pytest_cache
36
+
37
+
38
+ # Local config
39
+ local_config.json
40
+
41
+
42
+ # Test Artifacts
43
+ test_artifacts/
44
+ src/universal_mcp/applications/complex/
45
+ src/universal_mcp/applications/test/
46
+ src/universal_mcp/applications/test_with_docs/
47
+ src/universal_mcp/applications/test_without_docs/
48
+
49
+ # Temporary files
50
+ tmp/
51
+
52
+
53
+ # Docs
54
+ site/
55
+ .cache/
56
+
57
+ # langgraph temporary files
58
+ .langgraph_api/
59
+ langgraph.json
60
+ agentr-1-6c4ebd5cc914.json
@@ -0,0 +1,125 @@
1
+ # Agent.md — Python + uv
2
+
3
+ Purpose
4
+ - This repository uses Python managed by uv for dependency resolution, virtual environments, locking, and execution. Always prefer uv subcommands (add/remove/run/sync/export) over raw pip/venv commands.
5
+
6
+ Core rules
7
+ - Use `uv add` to add or upgrade dependencies so that both `pyproject.toml` and `uv.lock` stay in sync; do not use `pip install` directly.
8
+ - Keep runtime dependencies in `[project.dependencies]` and development-only tools in the `dev` group via `uv add --dev ...`.
9
+ - Use `uv run` to execute Python, test, and tooling commands without manually activating a virtual environment.
10
+
11
+ Project bootstrap
12
+ - New project (scaffold files): `uv init`
13
+ - First install or clean install: `uv sync`
14
+ - Run the app: `uv run python -m <your_module>` or `uv run main.py`
15
+ - REPL: `uv run python`
16
+ - Scripts in pyproject: prefer `uv run <command>` to ensure the correct environment is used
17
+
18
+ Managing dependencies
19
+ - Add runtime dependency: `uv add <name>` (e.g., `uv add httpx`)
20
+ - Add dev dependencies: `uv add --dev pytest ruff`
21
+ - Pin/upgrade by constraint: `uv add "httpx>=0.27"` or adjust `pyproject.toml` and then `uv sync`
22
+ - Remove dependency: `uv remove <name>`
23
+ - Export lock for external tooling: `uv export --format requirements-txt --output-file requirements.txt`
24
+
25
+ Locking and environments
26
+ - `uv run` and `uv sync` will ensure the environment matches `pyproject.toml` and `uv.lock`
27
+ - Avoid manual `pip install` or manual `venv` activation; let uv manage the environment
28
+ - Commit `uv.lock` to version control for reproducible installs
29
+
30
+ pyproject guidance
31
+ - Dependencies live under `[project]` → `dependencies = [...]`
32
+ - Development-only tooling should go under a dev group (e.g., `uv add --dev ruff pytest`) for clean separation
33
+ - Keep `requires-python` current (e.g., `>=3.12`) to match the team’s baseline
34
+
35
+ Usage in this repo
36
+ - When adding libraries or changing versions, propose `uv add ...` changes that update both `pyproject.toml` and `uv.lock`, then run `uv run pytest -q` to validate
37
+ - Prefer minimal diffs, explain the plan, apply changes, and run tests/tooling via `uv run`
38
+ - If build/test fails, inspect error context, adjust constraints or code, and re-run via `uv run`
39
+
40
+ Common commands (copy/paste)
41
+ - Initialize: `uv init` | Install deps: `uv sync`
42
+ - Add runtime: `uv add <pkg>` | Add dev: `uv add --dev <pkg>`
43
+ - Remove: `uv remove <pkg>`
44
+ - Run app: `uv run python -m <your_module>` or `uv run main.py`
45
+ - Tests: `uv run pytest -q`
46
+ - Lint/format: `uv run ruff check .` and/or `uv run ruff format .`
47
+ - Export: `uv export --format requirements-txt --output-file requirements.txt`
48
+
49
+ Of course. Based on your request and the example `app.py` you provided, here is a new section that you can append to your `gemini.md` file. This section provides clear guidance on how to write effective tool names and descriptions, using the Perplexity `chat` function as a concrete example.
50
+
51
+ The proposed changes will make the function's purpose much clearer, especially its ability to access and cite real-time web information, which is a key feature.
52
+
53
+ ***
54
+
55
+ ### Tool Function Naming and Descriptions
56
+
57
+ To ensure the AI agent can effectively understand and use the tools available, function names and their descriptions (docstrings) must be clear, descriptive, and accurate. A good description outlines the tool's purpose, its key capabilities, and what it returns.
58
+
59
+ **Core Principles:**
60
+ - **Use Action-Oriented Names:** Function names should be verbs that clearly state what the tool *does* (e.g., `search`, `create_file`, `list_users`).
61
+ - **Be Specific in Descriptions:** The docstring is the primary source of context for the AI. It should explicitly mention the service it interacts with (e.g., "Perplexity AI") and its unique features (e.g., "performs real-time web searches," "provides citations").
62
+ - **Detail Inputs and Outputs:** Clearly describe the purpose of each argument and what the function returns, as this helps the agent formulate correct calls.
63
+
64
+ **Example: Improving the Perplexity Tool**
65
+
66
+ Let's refine the tool in `app.py` to be more descriptive and unlock its full potential. The original `chat` function is too generic. We will rename it to `search` and significantly improve its docstring.
67
+
68
+ **BEFORE:** The original function name and description are too simple.
69
+
70
+ ```python
71
+ # from app.py
72
+ def chat(
73
+ self,
74
+ query: str,
75
+ model: Literal[...] = "sonar",
76
+ temperature: float = 1,
77
+ system_prompt: str = "Be precise and concise.",
78
+ ) -> dict[str, Any] | str:
79
+ """
80
+ Initiates a chat completion request to generate AI responses using various models with customizable parameters.
81
+ ...
82
+ Tags:
83
+ chat, generate, ai, completion, important
84
+ """
85
+ ```
86
+
87
+ **AFTER:** The updated name and description are highly specific, highlighting the core web search and citation capabilities. Do not leave any empty lines between the descriptions.
88
+
89
+ ```python
90
+ # from app.py
91
+ def search(
92
+ self,
93
+ query: str,
94
+ model: Literal[
95
+ "r1-1776",
96
+ "sonar",
97
+ "sonar-pro",
98
+ "sonar-reasoning",
99
+ "sonar-reasoning-pro",
100
+ "sonar-deep-research",
101
+ ] = "sonar-pro",
102
+ temperature: float = 1,
103
+ system_prompt: str = "You are a helpful AI assistant that answers questions using real-time information from the web.",
104
+ ) -> dict[str, Any] | str:
105
+ """
106
+ Performs a real-time web search using Perplexity AI to answer a query with up-to-date information and citations.
107
+ This tool is ideal for questions about current events, facts, or any topic that requires access to the latest information from the internet. It returns a natural language answer along with the sources used.
108
+
109
+ Args:
110
+ query: The search query or question to ask. For example: "What are the latest developments in AI regulation?"
111
+ model: The Perplexity model to use. 'sonar-pro' is recommended for comprehensive, up-to-date answers.
112
+ temperature: Controls randomness in the model's output. Higher values make the output more random, lower values make it more deterministic. Defaults to 1.
113
+ system_prompt: The initial system message to guide the model's behavior.
114
+
115
+ Returns:
116
+ A dictionary containing the generated 'content' (str) and a list of 'citations' (list) from the web search.
117
+
118
+ Raises:
119
+ AuthenticationError: Raised when API authentication fails due to missing or invalid credentials.
120
+ HTTPError: Raised when the API request fails or returns an error status.
121
+
122
+ Tags:
123
+ search, web, research, citations, current events, important
124
+ """
125
+ ```
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: universal-mcp-applications
3
- Version: 0.1.12
3
+ Version: 0.1.36rc4
4
4
  Summary: A Universal MCP Application: universal_mcp_applications
5
5
  Project-URL: Homepage, https://github.com/universal-mcp/applications
6
6
  Project-URL: Repository, https://github.com/universal-mcp/applications
@@ -13,6 +13,7 @@ Classifier: Programming Language :: Python :: 3
13
13
  Classifier: Programming Language :: Python :: 3.11
14
14
  Requires-Python: >=3.11
15
15
  Requires-Dist: boto3>=1.38.32
16
+ Requires-Dist: browser-use-sdk>=2.0.4
16
17
  Requires-Dist: dnspython>=2.4.0
17
18
  Requires-Dist: e2b-code-interpreter>=1.2.1
18
19
  Requires-Dist: elevenlabs>=2.14.0
@@ -22,7 +23,7 @@ Requires-Dist: google-genai>=1.33.0
22
23
  Requires-Dist: google-search-results>=2.4.2
23
24
  Requires-Dist: gql[all]>=3.5.2
24
25
  Requires-Dist: httpx-aiohttp>=0.1.8
25
- Requires-Dist: markitdown[audio-transcription,az-doc-intel,docx,outlook,pdf,pptx,xls,xlsx]==0.1.3
26
+ Requires-Dist: markitdown[audio-transcription,az-doc-intel,docx,outlook,pdf,pptx,xls,xlsx]>=0.1.3
26
27
  Requires-Dist: office365-rest-python-client>=2.6.2
27
28
  Requires-Dist: openai>=1.75.0
28
29
  Requires-Dist: pyairtable>=3.1.1
@@ -34,7 +35,8 @@ Requires-Dist: replicate>=1.0.6
34
35
  Requires-Dist: requests>=2.31.0
35
36
  Requires-Dist: resend>=2.10.0
36
37
  Requires-Dist: twilio>=9.8.0
37
- Requires-Dist: universal-mcp>=0.1.24rc19
38
+ Requires-Dist: universal-mcp>=0.1.24rc29
39
+ Requires-Dist: yfinance>=0.2.66
38
40
  Requires-Dist: youtube-transcript-api==1.2.2
39
41
  Provides-Extra: dev
40
42
  Requires-Dist: pre-commit; extra == 'dev'
@@ -85,91 +87,4 @@ result = app.some_method(param1="value1")
85
87
 
86
88
  # Process and print the output
87
89
  process_output(result)
88
- ```
89
-
90
- ## Included Applications
91
-
92
- This package includes the following 82 applications:
93
-
94
- - `ahrefs`
95
- - `airtable`
96
- - `apollo`
97
- - `asana`
98
- - `aws-s3`
99
- - `bill`
100
- - `box`
101
- - `braze`
102
- - `cal-com-v2`
103
- - `calendly`
104
- - `canva`
105
- - `clickup`
106
- - `coda`
107
- - `confluence`
108
- - `contentful`
109
- - `crustdata`
110
- - `dialpad`
111
- - `digitalocean`
112
- - `domain-checker`
113
- - `e2b`
114
- - `elevenlabs`
115
- - `exa`
116
- - `falai`
117
- - `figma`
118
- - `firecrawl`
119
- - `fireflies`
120
- - `fpl`
121
- - `ghost-content`
122
- - `github`
123
- - `gong`
124
- - `google-ads`
125
- - `google-calendar`
126
- - `google-docs`
127
- - `google-drive`
128
- - `google-gemini`
129
- - `google-mail`
130
- - `google-searchconsole`
131
- - `google-sheet`
132
- - `hashnode`
133
- - `heygen`
134
- - `http-tools`
135
- - `hubspot`
136
- - `jira`
137
- - `klaviyo`
138
- - `linkedin`
139
- - `mailchimp`
140
- - `markitdown`
141
- - `miro`
142
- - `ms-teams`
143
- - `neon`
144
- - `notion`
145
- - `openai`
146
- - `outlook`
147
- - `perplexity`
148
- - `pipedrive`
149
- - `posthog`
150
- - `reddit`
151
- - `replicate`
152
- - `resend`
153
- - `retell`
154
- - `rocketlane`
155
- - `semanticscholar`
156
- - `semrush`
157
- - `sendgrid`
158
- - `sentry`
159
- - `serpapi`
160
- - `sharepoint`
161
- - `shopify`
162
- - `shortcut`
163
- - `slack`
164
- - `spotify`
165
- - `supabase`
166
- - `tavily`
167
- - `trello`
168
- - `twillo`
169
- - `twitter`
170
- - `unipile`
171
- - `whatsapp`
172
- - `whatsapp-business`
173
- - `wrike`
174
- - `youtube`
175
- - `zenquotes`
90
+ ```
@@ -39,91 +39,4 @@ result = app.some_method(param1="value1")
39
39
 
40
40
  # Process and print the output
41
41
  process_output(result)
42
- ```
43
-
44
- ## Included Applications
45
-
46
- This package includes the following 82 applications:
47
-
48
- - `ahrefs`
49
- - `airtable`
50
- - `apollo`
51
- - `asana`
52
- - `aws-s3`
53
- - `bill`
54
- - `box`
55
- - `braze`
56
- - `cal-com-v2`
57
- - `calendly`
58
- - `canva`
59
- - `clickup`
60
- - `coda`
61
- - `confluence`
62
- - `contentful`
63
- - `crustdata`
64
- - `dialpad`
65
- - `digitalocean`
66
- - `domain-checker`
67
- - `e2b`
68
- - `elevenlabs`
69
- - `exa`
70
- - `falai`
71
- - `figma`
72
- - `firecrawl`
73
- - `fireflies`
74
- - `fpl`
75
- - `ghost-content`
76
- - `github`
77
- - `gong`
78
- - `google-ads`
79
- - `google-calendar`
80
- - `google-docs`
81
- - `google-drive`
82
- - `google-gemini`
83
- - `google-mail`
84
- - `google-searchconsole`
85
- - `google-sheet`
86
- - `hashnode`
87
- - `heygen`
88
- - `http-tools`
89
- - `hubspot`
90
- - `jira`
91
- - `klaviyo`
92
- - `linkedin`
93
- - `mailchimp`
94
- - `markitdown`
95
- - `miro`
96
- - `ms-teams`
97
- - `neon`
98
- - `notion`
99
- - `openai`
100
- - `outlook`
101
- - `perplexity`
102
- - `pipedrive`
103
- - `posthog`
104
- - `reddit`
105
- - `replicate`
106
- - `resend`
107
- - `retell`
108
- - `rocketlane`
109
- - `semanticscholar`
110
- - `semrush`
111
- - `sendgrid`
112
- - `sentry`
113
- - `serpapi`
114
- - `sharepoint`
115
- - `shopify`
116
- - `shortcut`
117
- - `slack`
118
- - `spotify`
119
- - `supabase`
120
- - `tavily`
121
- - `trello`
122
- - `twillo`
123
- - `twitter`
124
- - `unipile`
125
- - `whatsapp`
126
- - `whatsapp-business`
127
- - `wrike`
128
- - `youtube`
129
- - `zenquotes`
42
+ ```
@@ -81,7 +81,6 @@ if [ "$1" = "release" ]; then
81
81
  rm -rf .pytest_cache
82
82
  rm -rf .ruff_cache
83
83
  rm -rf .mypy_cache
84
- rm -rf .venv
85
84
  rm -rf .cache
86
85
  rm -rf .DS_Store
87
86
  rm -rf .idea
@@ -6,7 +6,7 @@ build-backend = "hatchling.build"
6
6
 
7
7
  [project]
8
8
  name = "universal-mcp-applications"
9
- version = "0.1.12"
9
+ version = "0.1.36-rc4"
10
10
  description = "A Universal MCP Application: universal_mcp_applications"
11
11
  readme = "README.md"
12
12
  requires-python = ">=3.11"
@@ -21,6 +21,7 @@ classifiers = [
21
21
  ]
22
22
  dependencies = [
23
23
  "boto3>=1.38.32",
24
+ "browser-use-sdk>=2.0.4",
24
25
  "dnspython>=2.4.0",
25
26
  "e2b-code-interpreter>=1.2.1",
26
27
  "elevenlabs>=2.14.0",
@@ -30,7 +31,7 @@ dependencies = [
30
31
  "google-search-results>=2.4.2",
31
32
  "gql[all]>=3.5.2",
32
33
  "httpx-aiohttp>=0.1.8",
33
- "markitdown[audio-transcription,az-doc-intel,docx,outlook,pdf,pptx,xls,xlsx]==0.1.3",
34
+ "markitdown[audio-transcription,az-doc-intel,docx,outlook,pdf,pptx,xls,xlsx]>=0.1.3",
34
35
  "office365-rest-python-client>=2.6.2",
35
36
  "openai>=1.75.0",
36
37
  "pyairtable>=3.1.1",
@@ -42,7 +43,8 @@ dependencies = [
42
43
  "requests>=2.31.0",
43
44
  "resend>=2.10.0",
44
45
  "twilio>=9.8.0",
45
- "universal-mcp>=0.1.24rc19",
46
+ "universal-mcp>=0.1.24rc29",
47
+ "yfinance>=0.2.66",
46
48
  "youtube-transcript-api==1.2.2",
47
49
  ]
48
50
 
@@ -75,7 +77,6 @@ test-cov = "pytest --cov-report term-missing --cov-config=pyproject.toml --cov=s
75
77
  lint = "ruff check . && ruff format --check ."
76
78
  format = "ruff format ."
77
79
 
78
-
79
80
  [tool.hatch.build.targets.wheel]
80
81
  packages = [
81
82
  "src/universal_mcp",
@@ -83,7 +84,7 @@ packages = [
83
84
 
84
85
  [tool.coverage.run]
85
86
  source = [
86
- "src",
87
+ "src",
87
88
  ]
88
89
  branch = true
89
90
 
@@ -92,12 +93,11 @@ show_missing = true
92
93
  fail_under = 70
93
94
 
94
95
  [tool.ruff]
95
- line-length = 88
96
- select = [
96
+ line-length = 140
97
+ lint.select = [
97
98
  "E", "W", "F", "I", "UP", "PL", "T20",
98
99
  ]
99
- ignore = []
100
-
100
+ lint.ignore = []
101
101
 
102
102
  [tool.ruff.format]
103
103
  quote-style = "double"
@@ -107,3 +107,8 @@ pythonpath = [
107
107
  "src",
108
108
  ]
109
109
 
110
+ [dependency-groups]
111
+ dev = [
112
+ "litellm>=1.77.3",
113
+ "universal-mcp-agents>=0.1.13",
114
+ ]
@@ -0,0 +1,195 @@
1
+ import ast
2
+ import os
3
+
4
+ # List of applications to be checked for internal calls
5
+ APPS = [
6
+ "ahrefs",
7
+ "airtable",
8
+ "apollo",
9
+ "asana",
10
+ "aws_s3",
11
+ "bill", # not seeded
12
+ "box",
13
+ "braze",
14
+ # "cal_com_v2", # not seeded
15
+ "calendly",
16
+ "canva",
17
+ "clickup",
18
+ "coda",
19
+ "confluence", # not seeded
20
+ "contentful", # not seeded
21
+ "crustdata",
22
+ "dialpad", # not seeded
23
+ "digitalocean",
24
+ "domain_checker",
25
+ "e2b",
26
+ "elevenlabs",
27
+ "exa",
28
+ "falai",
29
+ "figma",
30
+ "file_system",
31
+ "firecrawl",
32
+ "fireflies",
33
+ "fpl",
34
+ "ghost_content",
35
+ "github",
36
+ "gong",
37
+ "google_calendar",
38
+ "google_docs",
39
+ "google_drive",
40
+ "google_gemini",
41
+ "google_mail",
42
+ "google_searchconsole",
43
+ "google_sheet",
44
+ "hashnode",
45
+ "heygen",
46
+ "http_tools",
47
+ "hubspot",
48
+ "jira",
49
+ "klaviyo",
50
+ "linkedin",
51
+ "mailchimp",
52
+ "markitdown",
53
+ "miro",
54
+ "ms_teams",
55
+ "neon",
56
+ "notion",
57
+ "onedrive",
58
+ "openai",
59
+ "outlook",
60
+ "perplexity",
61
+ "pipedrive", # not seeded
62
+ "posthog",
63
+ "reddit",
64
+ "resend",
65
+ "retell",
66
+ "rocketlane",
67
+ "scraper",
68
+ "semanticscholar",
69
+ "semrush", # not seeded
70
+ "sendgrid",
71
+ "sentry",
72
+ "serpapi",
73
+ "sharepoint",
74
+ "shopify",
75
+ "shortcut",
76
+ "slack",
77
+ "spotify", # not seeded
78
+ "supabase",
79
+ "tavily",
80
+ "trello",
81
+ "twilio",
82
+ "twitter",
83
+ "whatsapp",
84
+ "whatsapp_business",
85
+ "wrike", # not seeded
86
+ "yahoo_finance",
87
+ "youtube",
88
+ "zenquotes",
89
+ ]
90
+
91
+
92
+ class InternalCallFinder(ast.NodeVisitor):
93
+ """
94
+ An AST visitor that finds calls to tool functions from within other tool functions.
95
+ """
96
+
97
+ def __init__(self, tool_functions):
98
+ self.tool_functions = set(tool_functions)
99
+ self.current_function = None
100
+ self.internal_calls = []
101
+
102
+ def visit_FunctionDef(self, node):
103
+ if node.name in self.tool_functions:
104
+ self.current_function = node.name
105
+ self.generic_visit(node)
106
+ self.current_function = None
107
+ else:
108
+ self.generic_visit(node)
109
+
110
+ def visit_AsyncFunctionDef(self, node):
111
+ if node.name in self.tool_functions:
112
+ self.current_function = node.name
113
+ self.generic_visit(node)
114
+ self.current_function = None
115
+ else:
116
+ self.generic_visit(node)
117
+
118
+ def visit_Call(self, node):
119
+ if self.current_function:
120
+ if isinstance(node.func, ast.Attribute) and isinstance(node.func.value, ast.Name) and node.func.value.id == "self":
121
+ called_func_name = node.func.attr
122
+ if called_func_name in self.tool_functions and called_func_name != self.current_function:
123
+ self.internal_calls.append({"caller": self.current_function, "callee": called_func_name})
124
+ self.generic_visit(node)
125
+
126
+
127
+ def get_tool_function_names(tree):
128
+ """
129
+ Extracts the names of the tool functions from the 'list_tools' method in the AST.
130
+ """
131
+ tool_functions = set()
132
+ for node in ast.walk(tree):
133
+ if isinstance(node, ast.ClassDef):
134
+ for item in node.body:
135
+ if isinstance(item, ast.FunctionDef) and item.name == "list_tools":
136
+ for statement in item.body:
137
+ if isinstance(statement, ast.Return):
138
+ if isinstance(statement.value, (ast.List, ast.Tuple)):
139
+ for elt in statement.value.elts:
140
+ if isinstance(elt, ast.Attribute):
141
+ tool_functions.add(elt.attr)
142
+ return list(tool_functions)
143
+
144
+
145
+ def process_file(file_path):
146
+ """
147
+ Reads and processes a single app.py file to find internal calls.
148
+ """
149
+ with open(file_path, "r") as f:
150
+ source = f.read()
151
+ try:
152
+ tree = ast.parse(source)
153
+ except SyntaxError as e:
154
+ print(f"Error parsing {file_path}: {e}")
155
+ return []
156
+
157
+ tool_functions = get_tool_function_names(tree)
158
+ if not tool_functions:
159
+ return []
160
+
161
+ finder = InternalCallFinder(tool_functions)
162
+ finder.visit(tree)
163
+ return finder.internal_calls
164
+
165
+
166
+ def main():
167
+ """
168
+ Main function to iterate through specified applications and check for internal calls.
169
+ """
170
+ base_path = os.path.abspath(os.path.join(os.path.dirname(__file__), "..", "universal_mcp", "applications"))
171
+
172
+ apps_with_internal_calls = {}
173
+
174
+ for app in APPS:
175
+ app_path = os.path.join(base_path, app, "app.py")
176
+ if os.path.exists(app_path):
177
+ internal_calls = process_file(app_path)
178
+ if internal_calls:
179
+ apps_with_internal_calls[app] = internal_calls
180
+ else:
181
+ print(f"Could not find {app_path} for application {app}")
182
+
183
+ if apps_with_internal_calls:
184
+ print("Applications with internal tool function calls:")
185
+ for app, calls in apps_with_internal_calls.items():
186
+ print(f"- {app}:")
187
+ unique_calls = {(call["caller"], call["callee"]) for call in calls}
188
+ for caller, callee in sorted(list(unique_calls)):
189
+ print(f" - '{caller}' calls '{callee}'")
190
+ else:
191
+ print("No applications with internal tool function calls found in the specified APPS list.")
192
+
193
+
194
+ if __name__ == "__main__":
195
+ main()