universal-mcp-applications 0.1.33__tar.gz → 0.1.36rc3__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.

Potentially problematic release.


This version of universal-mcp-applications might be problematic. Click here for more details.

Files changed (293) hide show
  1. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/PKG-INFO +2 -2
  2. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/pyproject.toml +2 -2
  3. universal_mcp_applications-0.1.36rc3/src/scripts/check_internal_calls.py +195 -0
  4. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/scripts/docgen.py +17 -54
  5. universal_mcp_applications-0.1.36rc3/src/scripts/make_async.py +99 -0
  6. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/scripts/readme.py +2 -6
  7. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/ahrefs/app.py +52 -198
  8. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/airtable/app.py +23 -122
  9. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/apollo/app.py +111 -464
  10. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/asana/app.py +417 -1567
  11. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/aws_s3/app.py +36 -103
  12. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/bill/app.py +546 -1957
  13. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/box/app.py +1068 -3981
  14. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/braze/app.py +364 -1430
  15. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/browser_use/app.py +2 -8
  16. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/cal_com_v2/app.py +207 -625
  17. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/calendly/app.py +61 -200
  18. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/canva/app.py +45 -110
  19. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/clickup/app.py +207 -674
  20. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/coda/app.py +146 -426
  21. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/confluence/app.py +310 -1098
  22. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/contentful/app.py +36 -151
  23. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/crustdata/app.py +28 -107
  24. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/dialpad/app.py +283 -756
  25. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/digitalocean/app.py +1766 -5777
  26. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/domain_checker/app.py +3 -54
  27. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/e2b/app.py +14 -64
  28. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/elevenlabs/app.py +9 -47
  29. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/exa/app.py +6 -17
  30. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/falai/app.py +24 -101
  31. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/figma/app.py +53 -137
  32. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/file_system/app.py +2 -13
  33. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/firecrawl/app.py +51 -152
  34. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/fireflies/app.py +59 -281
  35. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/fpl/app.py +91 -528
  36. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/fpl/utils/fixtures.py +15 -49
  37. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/fpl/utils/helper.py +25 -89
  38. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/fpl/utils/league_utils.py +20 -64
  39. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/ghost_content/app.py +52 -161
  40. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/github/app.py +19 -56
  41. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/gong/app.py +88 -248
  42. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/google_calendar/app.py +16 -68
  43. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/google_docs/app.py +85 -189
  44. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/google_drive/app.py +141 -463
  45. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/google_gemini/app.py +12 -64
  46. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/google_mail/README.md +1 -0
  47. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/google_mail/app.py +38 -168
  48. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/google_searchconsole/app.py +15 -48
  49. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/google_sheet/app.py +100 -581
  50. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/google_sheet/helper.py +10 -37
  51. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/hashnode/app.py +57 -269
  52. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/heygen/app.py +44 -122
  53. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/http_tools/app.py +10 -32
  54. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/hubspot/api_segments/crm_api.py +460 -1573
  55. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/hubspot/api_segments/marketing_api.py +74 -262
  56. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/hubspot/app.py +23 -87
  57. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/jira/app.py +2071 -7986
  58. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/klaviyo/app.py +494 -1376
  59. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/linkedin/README.md +5 -0
  60. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/linkedin/app.py +232 -179
  61. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/mailchimp/app.py +450 -1605
  62. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/markitdown/app.py +8 -20
  63. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/miro/app.py +217 -699
  64. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/ms_teams/app.py +64 -186
  65. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/neon/app.py +86 -192
  66. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/notion/app.py +21 -36
  67. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/onedrive/app.py +16 -38
  68. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/openai/app.py +42 -165
  69. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/outlook/app.py +24 -84
  70. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/perplexity/app.py +4 -19
  71. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/pipedrive/app.py +832 -3142
  72. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/posthog/app.py +163 -432
  73. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/reddit/app.py +40 -139
  74. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/resend/app.py +41 -107
  75. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/retell/app.py +14 -41
  76. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/rocketlane/app.py +221 -934
  77. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/scraper/app.py +42 -107
  78. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/semanticscholar/app.py +22 -64
  79. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/semrush/app.py +43 -77
  80. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/sendgrid/app.py +512 -1262
  81. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/sentry/app.py +271 -906
  82. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/serpapi/app.py +40 -143
  83. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/sharepoint/app.py +17 -39
  84. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/shopify/app.py +1551 -4287
  85. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/shortcut/app.py +155 -417
  86. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/slack/app.py +33 -115
  87. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/spotify/app.py +126 -325
  88. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/supabase/app.py +104 -213
  89. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/tavily/app.py +1 -1
  90. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/trello/app.py +693 -2656
  91. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/twilio/app.py +14 -50
  92. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/twitter/api_segments/compliance_api.py +4 -14
  93. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/twitter/api_segments/dm_conversations_api.py +6 -18
  94. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/twitter/api_segments/likes_api.py +1 -3
  95. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/twitter/api_segments/lists_api.py +5 -15
  96. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/twitter/api_segments/trends_api.py +1 -3
  97. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/twitter/api_segments/tweets_api.py +9 -31
  98. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/twitter/api_segments/usage_api.py +1 -5
  99. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/twitter/api_segments/users_api.py +14 -42
  100. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/whatsapp/app.py +35 -186
  101. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/whatsapp/audio.py +2 -6
  102. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/whatsapp/whatsapp.py +17 -51
  103. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/whatsapp_business/app.py +70 -283
  104. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/wrike/app.py +45 -118
  105. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/yahoo_finance/app.py +19 -65
  106. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/youtube/app.py +75 -261
  107. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/zenquotes/app.py +2 -2
  108. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/uv.lock +5 -5
  109. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/.gitignore +0 -0
  110. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/GEMINI.md +0 -0
  111. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/LICENSE +0 -0
  112. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/README.md +0 -0
  113. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/bump_and_release.sh +0 -0
  114. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/scripts/prompts.py +0 -0
  115. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/scripts/run_docgen.py +0 -0
  116. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/tests/test_applications.py +0 -0
  117. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/BEST_PRACTICES.md +0 -0
  118. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/ahrefs/README.md +0 -0
  119. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/ahrefs/__init__.py +0 -0
  120. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/airtable/README.md +0 -0
  121. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/airtable/__init__.py +0 -0
  122. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/apollo/README.md +0 -0
  123. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/apollo/__init__.py +0 -0
  124. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/asana/README.md +0 -0
  125. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/asana/__init__.py +0 -0
  126. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/aws_s3/README.md +0 -0
  127. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/aws_s3/__init__.py +0 -0
  128. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/bill/README.md +0 -0
  129. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/bill/__init__.py +0 -0
  130. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/box/README.md +0 -0
  131. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/box/__init__.py +0 -0
  132. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/braze/README.md +0 -0
  133. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/braze/__init__.py +0 -0
  134. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/browser_use/README.md +0 -0
  135. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/browser_use/__init__.py +0 -0
  136. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/cal_com_v2/README.md +0 -0
  137. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/cal_com_v2/__init__.py +0 -0
  138. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/calendly/README.md +0 -0
  139. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/calendly/__init__.py +0 -0
  140. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/canva/README.md +0 -0
  141. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/canva/__init__.py +0 -0
  142. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/clickup/README.md +0 -0
  143. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/clickup/__init__.py +0 -0
  144. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/coda/README.md +0 -0
  145. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/coda/__init__.py +0 -0
  146. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/confluence/README.md +0 -0
  147. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/confluence/__init__.py +0 -0
  148. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/contentful/README.md +0 -0
  149. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/contentful/__init__.py +0 -0
  150. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/crustdata/README.md +0 -0
  151. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/crustdata/__init__.py +0 -0
  152. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/dialpad/README.md +0 -0
  153. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/dialpad/__init__.py +0 -0
  154. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/digitalocean/README.md +0 -0
  155. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/digitalocean/__init__.py +0 -0
  156. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/domain_checker/README.md +0 -0
  157. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/domain_checker/__init__.py +0 -0
  158. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/e2b/README.md +0 -0
  159. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/e2b/__init__.py +0 -0
  160. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/elevenlabs/README.md +0 -0
  161. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/elevenlabs/__init__.py +0 -0
  162. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/exa/README.md +0 -0
  163. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/exa/__init__.py +0 -0
  164. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/falai/README.md +0 -0
  165. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/falai/__init__.py +0 -0
  166. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/figma/README.md +0 -0
  167. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/figma/__init__.py +0 -0
  168. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/file_system/README.md +0 -0
  169. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/file_system/__init__.py +0 -0
  170. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/firecrawl/README.md +0 -0
  171. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/firecrawl/__init__.py +0 -0
  172. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/fireflies/README.md +0 -0
  173. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/fireflies/__init__.py +0 -0
  174. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/fpl/README.md +0 -0
  175. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/fpl/__init__.py +0 -0
  176. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/fpl/utils/api.py +0 -0
  177. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/fpl/utils/position_utils.py +0 -0
  178. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/ghost_content/README.md +0 -0
  179. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/ghost_content/__init__.py +0 -0
  180. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/github/README.md +0 -0
  181. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/github/__init__.py +0 -0
  182. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/gong/README.md +0 -0
  183. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/gong/__init__.py +0 -0
  184. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/google_calendar/README.md +0 -0
  185. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/google_calendar/__init__.py +0 -0
  186. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/google_docs/README.md +0 -0
  187. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/google_docs/__init__.py +0 -0
  188. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/google_drive/README.md +0 -0
  189. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/google_drive/__init__.py +0 -0
  190. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/google_gemini/README.md +0 -0
  191. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/google_gemini/__init__.py +0 -0
  192. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/google_mail/__init__.py +0 -0
  193. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/google_searchconsole/README.md +0 -0
  194. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/google_searchconsole/__init__.py +0 -0
  195. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/google_sheet/README.md +0 -0
  196. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/google_sheet/__init__.py +0 -0
  197. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/hashnode/README.md +0 -0
  198. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/hashnode/__init__.py +0 -0
  199. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/heygen/README.md +0 -0
  200. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/heygen/__init__.py +0 -0
  201. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/http_tools/README.md +0 -0
  202. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/http_tools/__init__.py +0 -0
  203. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/hubspot/README.md +0 -0
  204. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/hubspot/__init__.py +0 -0
  205. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/hubspot/api_segments/__init__.py +0 -0
  206. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/hubspot/api_segments/api_segment_base.py +0 -0
  207. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/jira/README.md +0 -0
  208. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/jira/__init__.py +0 -0
  209. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/klaviyo/README.md +0 -0
  210. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/klaviyo/__init__.py +0 -0
  211. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/linkedin/__init__.py +0 -0
  212. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/mailchimp/README.md +0 -0
  213. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/mailchimp/__init__.py +0 -0
  214. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/markitdown/README.md +0 -0
  215. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/markitdown/__init__.py +0 -0
  216. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/miro/README.md +0 -0
  217. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/miro/__init__.py +0 -0
  218. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/ms_teams/README.md +0 -0
  219. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/ms_teams/__init__.py +0 -0
  220. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/neon/README.md +0 -0
  221. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/neon/__init__.py +0 -0
  222. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/notion/README.md +0 -0
  223. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/notion/__init__.py +0 -0
  224. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/onedrive/README.md +0 -0
  225. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/onedrive/__init__.py +0 -0
  226. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/openai/README.md +0 -0
  227. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/openai/__init__.py +0 -0
  228. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/outlook/README.md +0 -0
  229. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/outlook/__init__.py +0 -0
  230. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/perplexity/README.md +0 -0
  231. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/perplexity/__init__.py +0 -0
  232. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/pipedrive/README.md +0 -0
  233. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/pipedrive/__init__.py +0 -0
  234. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/posthog/README.md +0 -0
  235. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/posthog/__init__.py +0 -0
  236. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/reddit/README.md +0 -0
  237. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/reddit/__init__.py +0 -0
  238. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/resend/README.md +0 -0
  239. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/resend/__init__.py +0 -0
  240. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/retell/README.md +0 -0
  241. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/retell/__init__.py +0 -0
  242. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/rocketlane/README.md +0 -0
  243. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/rocketlane/__init__.py +0 -0
  244. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/scraper/README.md +0 -0
  245. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/scraper/__init__.py +0 -0
  246. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/semanticscholar/README.md +0 -0
  247. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/semanticscholar/__init__.py +0 -0
  248. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/semrush/README.md +0 -0
  249. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/semrush/__init__.py +0 -0
  250. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/sendgrid/README.md +0 -0
  251. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/sendgrid/__init__.py +0 -0
  252. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/sentry/README.md +0 -0
  253. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/sentry/__init__.py +0 -0
  254. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/serpapi/README.md +0 -0
  255. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/serpapi/__init__.py +0 -0
  256. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/sharepoint/README.md +0 -0
  257. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/sharepoint/__init__.py +0 -0
  258. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/shopify/README.md +0 -0
  259. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/shopify/__init__.py +0 -0
  260. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/shortcut/README.md +0 -0
  261. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/shortcut/__init__.py +0 -0
  262. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/slack/README.md +0 -0
  263. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/slack/__init__.py +0 -0
  264. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/spotify/README.md +0 -0
  265. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/spotify/__init__.py +0 -0
  266. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/supabase/README.md +0 -0
  267. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/supabase/__init__.py +0 -0
  268. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/tavily/README.md +0 -0
  269. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/tavily/__init__.py +0 -0
  270. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/trello/README.md +0 -0
  271. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/trello/__init__.py +0 -0
  272. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/twilio/README.md +0 -0
  273. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/twilio/__init__.py +0 -0
  274. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/twitter/README.md +0 -0
  275. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/twitter/__init__.py +0 -0
  276. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/twitter/api_segments/__init__.py +0 -0
  277. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/twitter/api_segments/api_segment_base.py +0 -0
  278. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/twitter/api_segments/dm_events_api.py +0 -0
  279. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/twitter/api_segments/openapi_json_api.py +0 -0
  280. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/twitter/api_segments/spaces_api.py +0 -0
  281. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/twitter/app.py +0 -0
  282. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/whatsapp/README.md +0 -0
  283. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/whatsapp/__init__.py +0 -0
  284. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/whatsapp_business/README.md +0 -0
  285. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/whatsapp_business/__init__.py +0 -0
  286. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/wrike/README.md +0 -0
  287. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/wrike/__init__.py +0 -0
  288. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/yahoo_finance/README.md +0 -0
  289. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/yahoo_finance/__init__.py +0 -0
  290. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/youtube/README.md +0 -0
  291. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/youtube/__init__.py +0 -0
  292. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/zenquotes/README.md +0 -0
  293. {universal_mcp_applications-0.1.33 → universal_mcp_applications-0.1.36rc3}/src/universal_mcp/applications/zenquotes/__init__.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: universal-mcp-applications
3
- Version: 0.1.33
3
+ Version: 0.1.36rc3
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
@@ -35,7 +35,7 @@ Requires-Dist: replicate>=1.0.6
35
35
  Requires-Dist: requests>=2.31.0
36
36
  Requires-Dist: resend>=2.10.0
37
37
  Requires-Dist: twilio>=9.8.0
38
- Requires-Dist: universal-mcp>=0.1.24rc26
38
+ Requires-Dist: universal-mcp>=0.1.24rc29
39
39
  Requires-Dist: yfinance>=0.2.66
40
40
  Requires-Dist: youtube-transcript-api==1.2.2
41
41
  Provides-Extra: dev
@@ -6,7 +6,7 @@ build-backend = "hatchling.build"
6
6
 
7
7
  [project]
8
8
  name = "universal-mcp-applications"
9
- version = "0.1.33"
9
+ version = "0.1.36-rc3"
10
10
  description = "A Universal MCP Application: universal_mcp_applications"
11
11
  readme = "README.md"
12
12
  requires-python = ">=3.11"
@@ -43,7 +43,7 @@ dependencies = [
43
43
  "requests>=2.31.0",
44
44
  "resend>=2.10.0",
45
45
  "twilio>=9.8.0",
46
- "universal-mcp>=0.1.24rc26",
46
+ "universal-mcp>=0.1.24rc29",
47
47
  "yfinance>=0.2.66",
48
48
  "youtube-transcript-api==1.2.2",
49
49
  ]
@@ -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()
@@ -28,9 +28,7 @@ from src.scripts.prompts import SYSTEM_PROMPT_TEMPLATE, USER_PROMPT_TEMPLATE
28
28
  class DescriptionOutput(BaseModel):
29
29
  """Structure for the generated description output."""
30
30
 
31
- description: str = Field(
32
- description="A clear, detailed description of what the function does"
33
- )
31
+ description: str = Field(description="A clear, detailed description of what the function does")
34
32
  # suggested_name: Optional[str] = Field(None, description="A better name for the function, if applicable")
35
33
 
36
34
 
@@ -42,9 +40,7 @@ class FunctionExtractor(ast.NodeVisitor):
42
40
 
43
41
  def __init__(self, source_code: str):
44
42
  self.source_lines = source_code.splitlines(keepends=True)
45
- self.functions: list[
46
- tuple[str, str]
47
- ] = [] # Store tuples of (function_name, function_source)
43
+ self.functions: list[tuple[str, str]] = [] # Store tuples of (function_name, function_source)
48
44
 
49
45
  def _get_source_segment(self, node: ast.AST) -> str | None:
50
46
  """Safely extracts the source segment for a node using ast.get_source_segment."""
@@ -181,11 +177,7 @@ def parse_existing_docstring(docstring: str | None) -> tuple[str, str]:
181
177
 
182
178
  for i, line in enumerate(lines):
183
179
  stripped_line = line.strip()
184
- if (
185
- not summary_done
186
- and stripped_line
187
- and not stripped_line.startswith(section_markers)
188
- ):
180
+ if not summary_done and stripped_line and not stripped_line.startswith(section_markers):
189
181
  summary_lines.append(line.strip())
190
182
  elif not summary_done and not stripped_line and summary_lines:
191
183
  # This blank line marks the end of the summary
@@ -208,9 +200,7 @@ def parse_existing_docstring(docstring: str | None) -> tuple[str, str]:
208
200
  return summary, rest_of_docstring
209
201
 
210
202
 
211
- def generate_description(
212
- function_code: str, file_content: str, model: str = "perplexity/sonar"
213
- ) -> DescriptionOutput:
203
+ def generate_description(function_code: str, file_content: str, model: str = "perplexity/sonar") -> DescriptionOutput:
214
204
  """
215
205
  Generate a high-quality description and suggest a name for a Python function.
216
206
 
@@ -242,9 +232,7 @@ def generate_description(
242
232
  try:
243
233
  parsed_data = extract_json_from_text(response_text)
244
234
  return DescriptionOutput(
245
- description=parsed_data.get(
246
- "description", "No description available."
247
- ),
235
+ description=parsed_data.get("description", "No description available."),
248
236
  # suggested_name=parsed_data.get("suggested_name"),
249
237
  )
250
238
  except ValueError:
@@ -255,16 +243,12 @@ def generate_description(
255
243
  delay = base_delay * (2**attempt)
256
244
  time.sleep(delay)
257
245
  else:
258
- return DescriptionOutput(
259
- description=f"Error generating description after {max_retries} retries: {e}"
260
- )
246
+ return DescriptionOutput(description=f"Error generating description after {max_retries} retries: {e}")
261
247
 
262
248
  except Exception as e:
263
249
  return DescriptionOutput(description=f"An unexpected error occurred: {e}")
264
250
 
265
- return DescriptionOutput(
266
- description="Failed to generate description after all retries."
267
- )
251
+ return DescriptionOutput(description="Failed to generate description after all retries.")
268
252
 
269
253
 
270
254
  def insert_docstring_into_function(function_code: str, docstring: str) -> str:
@@ -281,9 +265,7 @@ def insert_docstring_into_function(function_code: str, docstring: str) -> str:
281
265
  try:
282
266
  lines = function_code.splitlines(keepends=True)
283
267
  tree = ast.parse(function_code)
284
- if not tree.body or not isinstance(
285
- tree.body[0], (ast.FunctionDef, ast.AsyncFunctionDef)
286
- ):
268
+ if not tree.body or not isinstance(tree.body[0], (ast.FunctionDef, ast.AsyncFunctionDef)):
287
269
  return function_code
288
270
 
289
271
  func_node = tree.body[0]
@@ -293,9 +275,7 @@ def insert_docstring_into_function(function_code: str, docstring: str) -> str:
293
275
  if func_node.body:
294
276
  # Use the indentation of the first statement in the body (e.g., the old docstring).
295
277
  first_body_line_str = lines[func_node.body[0].lineno - 1]
296
- body_indent = first_body_line_str[
297
- : len(first_body_line_str) - len(first_body_line_str.lstrip())
298
- ]
278
+ body_indent = first_body_line_str[: len(first_body_line_str) - len(first_body_line_str.lstrip())]
299
279
  else:
300
280
  # Fallback for empty functions: calculate from the 'def' line.
301
281
  def_line = lines[func_node.lineno - 1]
@@ -305,9 +285,7 @@ def insert_docstring_into_function(function_code: str, docstring: str) -> str:
305
285
 
306
286
  # Format the new docstring with the determined indentation
307
287
  new_docstring_lines_formatted = [f'{body_indent}"""\n']
308
- new_docstring_lines_formatted.extend(
309
- [f"{body_indent}{line}\n" for line in docstring.splitlines()]
310
- )
288
+ new_docstring_lines_formatted.extend([f"{body_indent}{line}\n" for line in docstring.splitlines()])
311
289
  new_docstring_lines_formatted.append(f'{body_indent}"""\n')
312
290
 
313
291
  # Check if the first statement is an existing docstring
@@ -321,9 +299,7 @@ def insert_docstring_into_function(function_code: str, docstring: str) -> str:
321
299
  existing_docstring_node = func_node.body[0]
322
300
 
323
301
  # Splice the code
324
- insert_idx = (
325
- func_node.body[0].lineno - 1 if func_node.body else func_node.lineno
326
- )
302
+ insert_idx = func_node.body[0].lineno - 1 if func_node.body else func_node.lineno
327
303
  pre_insertion_lines = lines[:insert_idx]
328
304
 
329
305
  if existing_docstring_node:
@@ -331,9 +307,7 @@ def insert_docstring_into_function(function_code: str, docstring: str) -> str:
331
307
  else:
332
308
  post_insertion_lines = lines[insert_idx:]
333
309
 
334
- output_lines = (
335
- pre_insertion_lines + new_docstring_lines_formatted + post_insertion_lines
336
- )
310
+ output_lines = pre_insertion_lines + new_docstring_lines_formatted + post_insertion_lines
337
311
 
338
312
  final_code = "".join(output_lines)
339
313
  ast.parse(final_code) # Validate syntax
@@ -360,9 +334,7 @@ def rename_function_in_code(function_code: str, old_name: str, new_name: str) ->
360
334
  pattern = r"(async\s+def|def)\s+" + re.escape(old_name) + r"(\s*\()"
361
335
  replacement = r"\1 " + new_name + r"\2"
362
336
 
363
- new_function_code, num_replacements = re.subn(
364
- pattern, replacement, function_code, 1
365
- )
337
+ new_function_code, num_replacements = re.subn(pattern, replacement, function_code, 1)
366
338
 
367
339
  if num_replacements == 0:
368
340
  return function_code
@@ -392,9 +364,7 @@ def update_list_tools_method(content: str, old_name: str, new_name: str) -> str:
392
364
  replacement = r"\1" + new_name
393
365
 
394
366
  # First, find the list_tools method definition to narrow the search area
395
- list_tools_match = re.search(
396
- r"def\s+list_tools\s*\([^)]*\):\s*return\s*\[[^\]]*\]", content, re.DOTALL
397
- )
367
+ list_tools_match = re.search(r"def\s+list_tools\s*\([^)]*\):\s*return\s*\[[^\]]*\]", content, re.DOTALL)
398
368
 
399
369
  if not list_tools_match:
400
370
  return content
@@ -402,9 +372,7 @@ def update_list_tools_method(content: str, old_name: str, new_name: str) -> str:
402
372
  list_tools_code = list_tools_match.group(0)
403
373
 
404
374
  # Perform the replacement only within the found method block
405
- updated_list_tools_code, num_replacements = re.subn(
406
- pattern, replacement, list_tools_code
407
- )
375
+ updated_list_tools_code, num_replacements = re.subn(pattern, replacement, list_tools_code)
408
376
 
409
377
  if num_replacements > 0:
410
378
  return content.replace(list_tools_code, updated_list_tools_code)
@@ -437,7 +405,6 @@ def process_file(file_path: str, model: str = "perplexity/sonar") -> int:
437
405
  count = 0
438
406
 
439
407
  for function_name, function_code in functions:
440
-
441
408
  try:
442
409
  func_tree = ast.parse(function_code)
443
410
  func_node = func_tree.body[0]
@@ -467,15 +434,11 @@ def process_file(file_path: str, model: str = "perplexity/sonar") -> int:
467
434
  # is_renamed = True
468
435
 
469
436
  # 4. Insert the new docstring back into the (potentially renamed) function code
470
- updated_function_block = insert_docstring_into_function(
471
- code_to_update, reconstructed_docstring
472
- )
437
+ updated_function_block = insert_docstring_into_function(code_to_update, reconstructed_docstring)
473
438
 
474
439
  # 5. If any changes were made, update the main content
475
440
  if updated_function_block != function_code:
476
- updated_content = updated_content.replace(
477
- function_code, updated_function_block
478
- )
441
+ updated_content = updated_content.replace(function_code, updated_function_block)
479
442
  count += 1
480
443
 
481
444
  # 6. If the function was renamed, also update the list_tools method
@@ -0,0 +1,99 @@
1
+ import ast
2
+ import os
3
+
4
+ # List of applications to be converted to async
5
+ APPS = [
6
+ "whatsapp",
7
+ "whatsapp_business",
8
+ "wrike", # not seeded
9
+ "yahoo_finance",
10
+ "youtube",
11
+ "zenquotes",
12
+ ]
13
+
14
+
15
+ class AsyncConverter(ast.NodeTransformer):
16
+ """
17
+ An AST transformer that converts specified synchronous functions to asynchronous ones.
18
+ """
19
+
20
+ def __init__(self, tool_functions):
21
+ self.tool_functions = tool_functions
22
+
23
+ def visit_FunctionDef(self, node):
24
+ """
25
+ Transforms a synchronous function definition to an asynchronous one
26
+ if its name is in the list of tool functions.
27
+ """
28
+ if node.name in self.tool_functions:
29
+ # Convert the function to an async function
30
+ return ast.AsyncFunctionDef(
31
+ name=node.name,
32
+ args=node.args,
33
+ body=node.body,
34
+ decorator_list=node.decorator_list,
35
+ returns=node.returns,
36
+ type_comment=getattr(node, "type_comment", None),
37
+ )
38
+ return node
39
+
40
+
41
+ def get_tool_function_names(tree):
42
+ """
43
+ Extracts the names of the tool functions from the 'list_tools' method in the AST.
44
+ """
45
+ tool_functions = set()
46
+ for node in ast.walk(tree):
47
+ if isinstance(node, ast.ClassDef):
48
+ for item in node.body:
49
+ if isinstance(item, ast.FunctionDef) and item.name == "list_tools":
50
+ for statement in item.body:
51
+ if isinstance(statement, ast.Return):
52
+ for elt in statement.value.elts:
53
+ if isinstance(elt, ast.Attribute):
54
+ tool_functions.add(elt.attr)
55
+ return list(tool_functions)
56
+
57
+
58
+ def process_file(file_path):
59
+ """
60
+ Reads, transforms, and writes back the Python source file to make functions async.
61
+ """
62
+ with open(file_path, "r") as f:
63
+ source = f.read()
64
+
65
+ tree = ast.parse(source)
66
+ tool_functions = get_tool_function_names(tree)
67
+
68
+ if not tool_functions:
69
+ print(f"No tool functions found in {file_path}")
70
+ return
71
+
72
+ converter = AsyncConverter(tool_functions)
73
+ new_tree = converter.visit(tree)
74
+ ast.fix_missing_locations(new_tree)
75
+
76
+ new_source = ast.unparse(new_tree)
77
+
78
+ with open(file_path, "w") as f:
79
+ f.write(new_source)
80
+ print(f"Successfully converted functions in {file_path} to async.")
81
+
82
+
83
+ def main():
84
+ """
85
+ Main function to process the applications listed in APPS.
86
+ """
87
+ base_path = os.path.abspath(os.path.join(os.path.dirname(__file__), "..", "universal_mcp", "applications"))
88
+
89
+ for app in APPS:
90
+ app_path = os.path.join(base_path, app, "app.py")
91
+ # app_path = "/Users/ankitranjan/Work/applications/src/universal_mcp/applications/hubspot/api_segments/marketing_api.py"
92
+ if os.path.exists(app_path):
93
+ process_file(app_path)
94
+ else:
95
+ print(f"Could not find {app_path}")
96
+
97
+
98
+ if __name__ == "__main__":
99
+ main()
@@ -92,9 +92,7 @@ def main():
92
92
  """
93
93
  Runs the readme generation for a predefined list of applications.
94
94
  """
95
- base_path = os.path.abspath(
96
- os.path.join(os.path.dirname(__file__), "..", "universal_mcp", "applications")
97
- )
95
+ base_path = os.path.abspath(os.path.join(os.path.dirname(__file__), "..", "universal_mcp", "applications"))
98
96
 
99
97
  for app in APPS:
100
98
  app_path = os.path.join(base_path, app, "app.py")
@@ -102,9 +100,7 @@ def main():
102
100
 
103
101
  try:
104
102
  # Using 'uv run' to ensure the command is executed in the correct environment
105
- subprocess.run(
106
- ["uv", "run"] + command, check=True, capture_output=True, text=True
107
- )
103
+ subprocess.run(["uv", "run"] + command, check=True, capture_output=True, text=True)
108
104
  # print(result.stdout) # Optional: print stdout for more details
109
105
  except subprocess.CalledProcessError:
110
106
  pass