universal-mcp-applications 0.1.29__tar.gz → 0.1.30rc1__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 (295) hide show
  1. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/PKG-INFO +1 -1
  2. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/pyproject.toml +1 -1
  3. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/tests/test_applications.py +0 -1
  4. {universal_mcp_applications-0.1.29/src/universal_mcp/applications/unipile → universal_mcp_applications-0.1.30rc1/src/universal_mcp/applications/linkedin}/app.py +61 -117
  5. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/scraper/app.py +2 -2
  6. universal_mcp_applications-0.1.30rc1/src/universal_mcp/applications/scraper/scraper_testers.py +17 -0
  7. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/uv.lock +1 -1
  8. universal_mcp_applications-0.1.29/src/universal_mcp/applications/linkedin/app.py +0 -238
  9. universal_mcp_applications-0.1.29/src/universal_mcp/applications/unipile/README.md +0 -28
  10. universal_mcp_applications-0.1.29/src/universal_mcp/applications/unipile/__init__.py +0 -1
  11. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/.gitignore +0 -0
  12. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/GEMINI.md +0 -0
  13. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/LICENSE +0 -0
  14. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/README.md +0 -0
  15. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/bump_and_release.sh +0 -0
  16. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/scripts/docgen.py +0 -0
  17. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/scripts/prompts.py +0 -0
  18. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/scripts/readme.py +0 -0
  19. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/scripts/run_docgen.py +0 -0
  20. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/BEST_PRACTICES.md +0 -0
  21. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/ahrefs/README.md +0 -0
  22. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/ahrefs/__init__.py +0 -0
  23. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/ahrefs/app.py +0 -0
  24. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/airtable/README.md +0 -0
  25. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/airtable/__init__.py +0 -0
  26. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/airtable/app.py +0 -0
  27. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/apollo/README.md +0 -0
  28. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/apollo/__init__.py +0 -0
  29. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/apollo/app.py +0 -0
  30. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/asana/README.md +0 -0
  31. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/asana/__init__.py +0 -0
  32. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/asana/app.py +0 -0
  33. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/aws_s3/README.md +0 -0
  34. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/aws_s3/__init__.py +0 -0
  35. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/aws_s3/app.py +0 -0
  36. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/bill/README.md +0 -0
  37. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/bill/__init__.py +0 -0
  38. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/bill/app.py +0 -0
  39. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/box/README.md +0 -0
  40. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/box/__init__.py +0 -0
  41. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/box/app.py +0 -0
  42. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/braze/README.md +0 -0
  43. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/braze/__init__.py +0 -0
  44. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/braze/app.py +0 -0
  45. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/browser_use/README.md +0 -0
  46. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/browser_use/__init__.py +0 -0
  47. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/browser_use/app.py +0 -0
  48. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/cal_com_v2/README.md +0 -0
  49. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/cal_com_v2/__init__.py +0 -0
  50. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/cal_com_v2/app.py +0 -0
  51. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/calendly/README.md +0 -0
  52. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/calendly/__init__.py +0 -0
  53. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/calendly/app.py +0 -0
  54. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/canva/README.md +0 -0
  55. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/canva/__init__.py +0 -0
  56. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/canva/app.py +0 -0
  57. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/clickup/README.md +0 -0
  58. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/clickup/__init__.py +0 -0
  59. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/clickup/app.py +0 -0
  60. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/coda/README.md +0 -0
  61. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/coda/__init__.py +0 -0
  62. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/coda/app.py +0 -0
  63. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/confluence/README.md +0 -0
  64. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/confluence/__init__.py +0 -0
  65. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/confluence/app.py +0 -0
  66. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/contentful/README.md +0 -0
  67. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/contentful/__init__.py +0 -0
  68. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/contentful/app.py +0 -0
  69. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/crustdata/README.md +0 -0
  70. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/crustdata/__init__.py +0 -0
  71. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/crustdata/app.py +0 -0
  72. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/dialpad/README.md +0 -0
  73. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/dialpad/__init__.py +0 -0
  74. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/dialpad/app.py +0 -0
  75. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/digitalocean/README.md +0 -0
  76. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/digitalocean/__init__.py +0 -0
  77. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/digitalocean/app.py +0 -0
  78. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/domain_checker/README.md +0 -0
  79. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/domain_checker/__init__.py +0 -0
  80. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/domain_checker/app.py +0 -0
  81. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/e2b/README.md +0 -0
  82. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/e2b/__init__.py +0 -0
  83. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/e2b/app.py +0 -0
  84. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/elevenlabs/README.md +0 -0
  85. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/elevenlabs/__init__.py +0 -0
  86. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/elevenlabs/app.py +0 -0
  87. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/exa/README.md +0 -0
  88. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/exa/__init__.py +0 -0
  89. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/exa/app.py +0 -0
  90. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/falai/README.md +0 -0
  91. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/falai/__init__.py +0 -0
  92. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/falai/app.py +0 -0
  93. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/figma/README.md +0 -0
  94. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/figma/__init__.py +0 -0
  95. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/figma/app.py +0 -0
  96. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/file_system/README.md +0 -0
  97. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/file_system/__init__.py +0 -0
  98. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/file_system/app.py +0 -0
  99. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/firecrawl/README.md +0 -0
  100. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/firecrawl/__init__.py +0 -0
  101. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/firecrawl/app.py +0 -0
  102. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/fireflies/README.md +0 -0
  103. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/fireflies/__init__.py +0 -0
  104. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/fireflies/app.py +0 -0
  105. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/fpl/README.md +0 -0
  106. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/fpl/__init__.py +0 -0
  107. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/fpl/app.py +0 -0
  108. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/fpl/utils/api.py +0 -0
  109. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/fpl/utils/fixtures.py +0 -0
  110. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/fpl/utils/helper.py +0 -0
  111. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/fpl/utils/league_utils.py +0 -0
  112. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/fpl/utils/position_utils.py +0 -0
  113. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/ghost_content/README.md +0 -0
  114. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/ghost_content/__init__.py +0 -0
  115. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/ghost_content/app.py +0 -0
  116. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/github/README.md +0 -0
  117. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/github/__init__.py +0 -0
  118. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/github/app.py +0 -0
  119. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/gong/README.md +0 -0
  120. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/gong/__init__.py +0 -0
  121. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/gong/app.py +0 -0
  122. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/google_calendar/README.md +0 -0
  123. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/google_calendar/__init__.py +0 -0
  124. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/google_calendar/app.py +0 -0
  125. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/google_docs/README.md +0 -0
  126. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/google_docs/__init__.py +0 -0
  127. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/google_docs/app.py +0 -0
  128. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/google_drive/README.md +0 -0
  129. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/google_drive/__init__.py +0 -0
  130. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/google_drive/app.py +0 -0
  131. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/google_gemini/README.md +0 -0
  132. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/google_gemini/__init__.py +0 -0
  133. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/google_gemini/app.py +0 -0
  134. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/google_mail/README.md +0 -0
  135. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/google_mail/__init__.py +0 -0
  136. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/google_mail/app.py +0 -0
  137. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/google_searchconsole/README.md +0 -0
  138. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/google_searchconsole/__init__.py +0 -0
  139. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/google_searchconsole/app.py +0 -0
  140. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/google_sheet/README.md +0 -0
  141. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/google_sheet/__init__.py +0 -0
  142. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/google_sheet/app.py +0 -0
  143. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/google_sheet/helper.py +0 -0
  144. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/hashnode/README.md +0 -0
  145. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/hashnode/__init__.py +0 -0
  146. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/hashnode/app.py +0 -0
  147. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/heygen/README.md +0 -0
  148. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/heygen/__init__.py +0 -0
  149. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/heygen/app.py +0 -0
  150. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/http_tools/README.md +0 -0
  151. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/http_tools/__init__.py +0 -0
  152. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/http_tools/app.py +0 -0
  153. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/hubspot/README.md +0 -0
  154. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/hubspot/__init__.py +0 -0
  155. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/hubspot/api_segments/__init__.py +0 -0
  156. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/hubspot/api_segments/api_segment_base.py +0 -0
  157. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/hubspot/api_segments/crm_api.py +0 -0
  158. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/hubspot/api_segments/marketing_api.py +0 -0
  159. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/hubspot/app.py +0 -0
  160. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/jira/README.md +0 -0
  161. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/jira/__init__.py +0 -0
  162. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/jira/app.py +0 -0
  163. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/klaviyo/README.md +0 -0
  164. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/klaviyo/__init__.py +0 -0
  165. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/klaviyo/app.py +0 -0
  166. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/linkedin/README.md +0 -0
  167. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/linkedin/__init__.py +0 -0
  168. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/mailchimp/README.md +0 -0
  169. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/mailchimp/__init__.py +0 -0
  170. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/mailchimp/app.py +0 -0
  171. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/markitdown/README.md +0 -0
  172. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/markitdown/__init__.py +0 -0
  173. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/markitdown/app.py +0 -0
  174. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/miro/README.md +0 -0
  175. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/miro/__init__.py +0 -0
  176. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/miro/app.py +0 -0
  177. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/ms_teams/README.md +0 -0
  178. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/ms_teams/__init__.py +0 -0
  179. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/ms_teams/app.py +0 -0
  180. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/neon/README.md +0 -0
  181. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/neon/__init__.py +0 -0
  182. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/neon/app.py +0 -0
  183. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/notion/README.md +0 -0
  184. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/notion/__init__.py +0 -0
  185. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/notion/app.py +0 -0
  186. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/onedrive/README.md +0 -0
  187. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/onedrive/__init__.py +0 -0
  188. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/onedrive/app.py +0 -0
  189. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/openai/README.md +0 -0
  190. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/openai/__init__.py +0 -0
  191. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/openai/app.py +0 -0
  192. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/outlook/README.md +0 -0
  193. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/outlook/__init__.py +0 -0
  194. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/outlook/app.py +0 -0
  195. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/perplexity/README.md +0 -0
  196. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/perplexity/__init__.py +0 -0
  197. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/perplexity/app.py +0 -0
  198. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/pipedrive/README.md +0 -0
  199. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/pipedrive/__init__.py +0 -0
  200. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/pipedrive/app.py +0 -0
  201. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/posthog/README.md +0 -0
  202. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/posthog/__init__.py +0 -0
  203. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/posthog/app.py +0 -0
  204. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/reddit/README.md +0 -0
  205. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/reddit/__init__.py +0 -0
  206. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/reddit/app.py +0 -0
  207. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/resend/README.md +0 -0
  208. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/resend/__init__.py +0 -0
  209. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/resend/app.py +0 -0
  210. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/retell/README.md +0 -0
  211. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/retell/__init__.py +0 -0
  212. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/retell/app.py +0 -0
  213. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/rocketlane/README.md +0 -0
  214. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/rocketlane/__init__.py +0 -0
  215. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/rocketlane/app.py +0 -0
  216. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/scraper/README.md +0 -0
  217. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/scraper/__init__.py +0 -0
  218. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/semanticscholar/README.md +0 -0
  219. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/semanticscholar/__init__.py +0 -0
  220. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/semanticscholar/app.py +0 -0
  221. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/semrush/README.md +0 -0
  222. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/semrush/__init__.py +0 -0
  223. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/semrush/app.py +0 -0
  224. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/sendgrid/README.md +0 -0
  225. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/sendgrid/__init__.py +0 -0
  226. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/sendgrid/app.py +0 -0
  227. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/sentry/README.md +0 -0
  228. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/sentry/__init__.py +0 -0
  229. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/sentry/app.py +0 -0
  230. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/serpapi/README.md +0 -0
  231. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/serpapi/__init__.py +0 -0
  232. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/serpapi/app.py +0 -0
  233. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/sharepoint/README.md +0 -0
  234. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/sharepoint/__init__.py +0 -0
  235. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/sharepoint/app.py +0 -0
  236. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/shopify/README.md +0 -0
  237. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/shopify/__init__.py +0 -0
  238. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/shopify/app.py +0 -0
  239. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/shortcut/README.md +0 -0
  240. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/shortcut/__init__.py +0 -0
  241. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/shortcut/app.py +0 -0
  242. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/slack/README.md +0 -0
  243. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/slack/__init__.py +0 -0
  244. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/slack/app.py +0 -0
  245. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/spotify/README.md +0 -0
  246. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/spotify/__init__.py +0 -0
  247. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/spotify/app.py +0 -0
  248. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/supabase/README.md +0 -0
  249. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/supabase/__init__.py +0 -0
  250. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/supabase/app.py +0 -0
  251. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/tavily/README.md +0 -0
  252. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/tavily/__init__.py +0 -0
  253. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/tavily/app.py +0 -0
  254. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/trello/README.md +0 -0
  255. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/trello/__init__.py +0 -0
  256. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/trello/app.py +0 -0
  257. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/twilio/README.md +0 -0
  258. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/twilio/__init__.py +0 -0
  259. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/twilio/app.py +0 -0
  260. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/twitter/README.md +0 -0
  261. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/twitter/__init__.py +0 -0
  262. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/twitter/api_segments/__init__.py +0 -0
  263. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/twitter/api_segments/api_segment_base.py +0 -0
  264. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/twitter/api_segments/compliance_api.py +0 -0
  265. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/twitter/api_segments/dm_conversations_api.py +0 -0
  266. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/twitter/api_segments/dm_events_api.py +0 -0
  267. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/twitter/api_segments/likes_api.py +0 -0
  268. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/twitter/api_segments/lists_api.py +0 -0
  269. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/twitter/api_segments/openapi_json_api.py +0 -0
  270. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/twitter/api_segments/spaces_api.py +0 -0
  271. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/twitter/api_segments/trends_api.py +0 -0
  272. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/twitter/api_segments/tweets_api.py +0 -0
  273. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/twitter/api_segments/usage_api.py +0 -0
  274. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/twitter/api_segments/users_api.py +0 -0
  275. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/twitter/app.py +0 -0
  276. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/whatsapp/README.md +0 -0
  277. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/whatsapp/__init__.py +0 -0
  278. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/whatsapp/app.py +0 -0
  279. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/whatsapp/audio.py +0 -0
  280. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/whatsapp/whatsapp.py +0 -0
  281. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/whatsapp_business/README.md +0 -0
  282. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/whatsapp_business/__init__.py +0 -0
  283. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/whatsapp_business/app.py +0 -0
  284. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/wrike/README.md +0 -0
  285. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/wrike/__init__.py +0 -0
  286. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/wrike/app.py +0 -0
  287. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/yahoo_finance/README.md +0 -0
  288. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/yahoo_finance/__init__.py +0 -0
  289. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/yahoo_finance/app.py +0 -0
  290. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/youtube/README.md +0 -0
  291. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/youtube/__init__.py +0 -0
  292. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/youtube/app.py +0 -0
  293. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/zenquotes/README.md +0 -0
  294. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/zenquotes/__init__.py +0 -0
  295. {universal_mcp_applications-0.1.29 → universal_mcp_applications-0.1.30rc1}/src/universal_mcp/applications/zenquotes/app.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: universal-mcp-applications
3
- Version: 0.1.29
3
+ Version: 0.1.30rc1
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
@@ -6,7 +6,7 @@ build-backend = "hatchling.build"
6
6
 
7
7
  [project]
8
8
  name = "universal-mcp-applications"
9
- version = "0.1.29"
9
+ version = "0.1.30-rc1"
10
10
  description = "A Universal MCP Application: universal_mcp_applications"
11
11
  readme = "README.md"
12
12
  requires-python = ">=3.11"
@@ -80,7 +80,6 @@ ALL_APPS = [
80
80
  "trello",
81
81
  "twilio",
82
82
  "twitter",
83
- "unipile",
84
83
  "whatsapp",
85
84
  "whatsapp_business",
86
85
  "wrike", # not seeded
@@ -1,16 +1,15 @@
1
1
  import json
2
- from collections.abc import Callable
3
- from typing import Any, Literal
2
+ import os
3
+ from typing import Any, Callable, Literal
4
4
 
5
5
  from loguru import logger
6
6
  from universal_mcp.applications.application import APIApplication
7
7
  from universal_mcp.integrations import Integration
8
8
 
9
9
 
10
- class UnipileApp(APIApplication):
10
+ class LinkedinApp(APIApplication):
11
11
  """
12
- Application for interacting with the LinkedIn API via Unipile.
13
- Handles operations related to chats, messages, accounts, posts, and user profiles.
12
+ Base class for Universal MCP Applications.
14
13
  """
15
14
 
16
15
  def __init__(self, integration: Integration) -> None:
@@ -23,37 +22,31 @@ class UnipileApp(APIApplication):
23
22
  via headers in `integration.get_credentials()`, e.g.,
24
23
  `{"headers": {"x-api-key": "YOUR_API_KEY"}}`.
25
24
  """
26
- super().__init__(name="unipile", integration=integration)
25
+ super().__init__(name="linkedin", integration=integration)
27
26
 
28
27
  self._base_url = None
28
+ self.account_id = None
29
+ if self.integration:
30
+ credentials = self.integration.get_credentials()
31
+ if credentials:
32
+ self.account_id = credentials.get("account_id")
29
33
 
30
34
  @property
31
35
  def base_url(self) -> str:
32
- """
33
- A property that lazily constructs and caches the Unipile API base URL from 'subdomain' and 'port' credentials. Built on first access and used by all API methods, it raises a ValueError if credentials are missing. This is the default construction, unlike the setter which allows manual override.
34
- """
35
36
  if not self._base_url:
36
- credentials = self.integration.get_credentials()
37
- subdomain = credentials.get("subdomain")
38
- port = credentials.get("port")
39
- if not subdomain or not port:
37
+ unipile_dsn = os.getenv("UNIPILE_DSN")
38
+ if not unipile_dsn:
40
39
  logger.error(
41
- "UnipileApp: Missing 'subdomain' or 'port' in integration credentials."
40
+ "UnipileApp: UNIPILE_DSN environment variable is not set."
42
41
  )
43
42
  raise ValueError(
44
- "Integration credentials must include 'subdomain' and 'port'."
43
+ "UnipileApp: UNIPILE_DSN environment variable is required."
45
44
  )
46
- self._base_url = f"https://{subdomain}.unipile.com:{port}"
45
+ self._base_url = f"https://{unipile_dsn}"
47
46
  return self._base_url
48
47
 
49
48
  @base_url.setter
50
49
  def base_url(self, base_url: str) -> None:
51
- """
52
- Sets or overrides the Unipile API's base URL. This setter allows manually changing the endpoint, bypassing the default URL that is dynamically constructed from integration credentials. It is primarily intended for testing against different environments or for custom deployments.
53
-
54
- Args:
55
- base_url: The new base URL to set.
56
- """
57
50
  self._base_url = base_url
58
51
  logger.info(f"UnipileApp: Base URL set to {self._base_url}")
59
52
 
@@ -68,14 +61,7 @@ class UnipileApp(APIApplication):
68
61
  )
69
62
  return {}
70
63
 
71
- credentials = self.integration.get_credentials()
72
-
73
- api_key = (
74
- credentials.get("api_key")
75
- or credentials.get("API_KEY")
76
- or credentials.get("apiKey")
77
- )
78
-
64
+ api_key = os.getenv("UNIPILE_API_KEY")
79
65
  if not api_key:
80
66
  logger.error(
81
67
  "UnipileApp: API key not found in integration credentials for Unipile."
@@ -100,10 +86,9 @@ class UnipileApp(APIApplication):
100
86
  after: str | None = None, # ISO 8601 UTC datetime
101
87
  limit: int | None = None, # 1-250
102
88
  account_type: str | None = None,
103
- account_id: str | None = None, # Comma-separated list of ids
104
89
  ) -> dict[str, Any]:
105
90
  """
106
- Retrieves a paginated list of all chat conversations across linked accounts. Supports filtering by unread status, date range, account provider, and specific account IDs, distinguishing it from functions listing messages within a single chat.
91
+ Retrieves a paginated list of all chat conversations across linked accounts. Supports filtering by unread status, date range, and account provider, distinguishing it from functions listing messages within a single chat.
107
92
 
108
93
  Args:
109
94
  unread: Filter for unread chats only or read chats only.
@@ -112,7 +97,6 @@ class UnipileApp(APIApplication):
112
97
  after: Filter for items created after this ISO 8601 UTC datetime (exclusive).
113
98
  limit: Number of items to return (1-250).
114
99
  account_type: Filter by provider (e.g., "linkedin").
115
- account_id: Filter by specific account IDs (comma-separated).
116
100
 
117
101
  Returns:
118
102
  A dictionary containing a list of chat objects and a pagination cursor.
@@ -125,6 +109,9 @@ class UnipileApp(APIApplication):
125
109
  """
126
110
  url = f"{self.base_url}/api/v1/chats"
127
111
  params: dict[str, Any] = {}
112
+
113
+ params["account_id"] = self.account_id
114
+
128
115
  if unread is not None:
129
116
  params["unread"] = unread
130
117
  if cursor:
@@ -137,8 +124,7 @@ class UnipileApp(APIApplication):
137
124
  params["limit"] = limit
138
125
  if account_type:
139
126
  params["account_type"] = account_type
140
- if account_id:
141
- params["account_id"] = account_id
127
+
142
128
 
143
129
  response = self._get(url, params=params)
144
130
  return response.json()
@@ -216,15 +202,12 @@ class UnipileApp(APIApplication):
216
202
  response = self._post(url, data=payload)
217
203
  return response.json()
218
204
 
219
- def retrieve_chat(
220
- self, chat_id: str, account_id: str | None = None
221
- ) -> dict[str, Any]:
205
+ def retrieve_chat(self, chat_id: str) -> dict[str, Any]:
222
206
  """
223
- Retrieves a single chat's details using its Unipile or provider-specific ID. Requires an `account_id` when using a provider ID for context. This function is distinct from `list_all_chats`, which returns a collection, by targeting one specific conversation.
207
+ Retrieves a single chat's details using its Unipile or provider-specific ID. This function is distinct from `list_all_chats`, which returns a collection, by targeting one specific conversation.
224
208
 
225
209
  Args:
226
210
  chat_id: The Unipile or provider ID of the chat.
227
- account_id: Mandatory if the chat_id is a provider ID. Specifies the account context.
228
211
 
229
212
  Returns:
230
213
  A dictionary containing the chat object details.
@@ -237,8 +220,8 @@ class UnipileApp(APIApplication):
237
220
  """
238
221
  url = f"{self.base_url}/api/v1/chats/{chat_id}"
239
222
  params: dict[str, Any] = {}
240
- if account_id:
241
- params["account_id"] = account_id
223
+ if self.account_id:
224
+ params["account_id"] = self.account_id
242
225
 
243
226
  response = self._get(url, params=params)
244
227
  return response.json()
@@ -250,10 +233,9 @@ class UnipileApp(APIApplication):
250
233
  after: str | None = None, # ISO 8601 UTC datetime
251
234
  limit: int | None = None, # 1-250
252
235
  sender_id: str | None = None,
253
- account_id: str | None = None,
254
236
  ) -> dict[str, Any]:
255
237
  """
256
- Retrieves a paginated list of messages from all chats associated with the account(s). Unlike `list_chat_messages` which targets a specific conversation, this function provides a global message view, filterable by sender, account, and date range.
238
+ Retrieves a paginated list of messages from all chats associated with the account. Unlike `list_chat_messages` which targets a specific conversation, this function provides a global message view, filterable by sender and date range.
257
239
 
258
240
  Args:
259
241
  cursor: Pagination cursor.
@@ -261,7 +243,6 @@ class UnipileApp(APIApplication):
261
243
  after: Filter for items created after this ISO 8601 UTC datetime.
262
244
  limit: Number of items to return (1-250).
263
245
  sender_id: Filter messages from a specific sender.
264
- account_id: Filter messages from a specific linked account.
265
246
 
266
247
  Returns:
267
248
  A dictionary containing a list of message objects and a pagination cursor.
@@ -284,8 +265,8 @@ class UnipileApp(APIApplication):
284
265
  params["limit"] = limit
285
266
  if sender_id:
286
267
  params["sender_id"] = sender_id
287
- if account_id:
288
- params["account_id"] = account_id
268
+ if self.account_id:
269
+ params["account_id"] = self.account_id
289
270
 
290
271
  response = self._get(url, params=params)
291
272
  return response.json()
@@ -321,33 +302,26 @@ class UnipileApp(APIApplication):
321
302
  response = self._get(url, params=params)
322
303
  return response.json()
323
304
 
324
- def retrieve_linked_account(
325
- self,
326
- account_id: str,
327
- ) -> dict[str, Any]:
328
- """
329
- Retrieves details for a specific account linked to Unipile using its ID. It fetches metadata about the connection itself (e.g., a linked LinkedIn account), differentiating it from `retrieve_user_profile` which fetches a user's profile from the external platform.
330
-
331
- Args:
332
- account_id: The ID of the account to retrieve.
305
+ # def retrieve_linked_account(self) -> dict[str, Any]:
306
+ # """
307
+ # Retrieves details for the account linked to Unipile. It fetches metadata about the connection itself (e.g., a linked LinkedIn account), differentiating it from `retrieve_user_profile` which fetches a user's profile from the external platform.
333
308
 
334
- Returns:
335
- A dictionary containing the account object details.
309
+ # Returns:
310
+ # A dictionary containing the account object details.
336
311
 
337
- Raises:
338
- httpx.HTTPError: If the API request fails.
312
+ # Raises:
313
+ # httpx.HTTPError: If the API request fails.
339
314
 
340
- Tags:
341
- linkedin, account, retrieve, get, unipile, api, important
342
- """
343
- url = f"{self.base_url}/api/v1/accounts/{account_id}"
344
- response = self._get(url)
345
- return response.json()
315
+ # Tags:
316
+ # linkedin, account, retrieve, get, unipile, api, important
317
+ # """
318
+ # url = f"{self.base_url}/api/v1/accounts/{self.account_id}"
319
+ # response = self._get(url)
320
+ # return response.json()
346
321
 
347
322
  def list_profile_posts(
348
323
  self,
349
324
  identifier: str, # User or Company provider internal ID
350
- account_id: str, # Account to perform the request from (REQUIRED)
351
325
  cursor: str | None = None,
352
326
  limit: int | None = None, # 1-100 (spec says max 250)
353
327
  is_company: bool | None = None,
@@ -357,7 +331,6 @@ class UnipileApp(APIApplication):
357
331
 
358
332
  Args:
359
333
  identifier: The entity's provider internal ID (LinkedIn ID).
360
- account_id: The ID of the Unipile account to perform the request from (REQUIRED).
361
334
  cursor: Pagination cursor.
362
335
  limit: Number of items to return (1-100, as per Unipile example, though spec allows up to 250).
363
336
  is_company: Boolean indicating if the identifier is for a company.
@@ -372,7 +345,7 @@ class UnipileApp(APIApplication):
372
345
  linkedin, post, list, user_posts, company_posts, content, api, important
373
346
  """
374
347
  url = f"{self.base_url}/api/v1/users/{identifier}/posts"
375
- params: dict[str, Any] = {"account_id": account_id}
348
+ params: dict[str, Any] = {"account_id": self.account_id}
376
349
  if cursor:
377
350
  params["cursor"] = cursor
378
351
  if limit:
@@ -383,15 +356,9 @@ class UnipileApp(APIApplication):
383
356
  response = self._get(url, params=params)
384
357
  return response.json()
385
358
 
386
- def retrieve_own_profile(
387
- self,
388
- account_id: str,
389
- ) -> dict[str, Any]:
359
+ def retrieve_own_profile(self) -> dict[str, Any]:
390
360
  """
391
- Retrieves the profile details for the user associated with the specified Unipile account ID. This function targets the API's 'me' endpoint to fetch the authenticated user's profile, distinct from `retrieve_user_profile` which fetches profiles of other users by their public identifier.
392
-
393
- Args:
394
- account_id: The ID of the Unipile account to use for retrieving the profile (REQUIRED).
361
+ Retrieves the profile details for the user associated with the Unipile account. This function targets the API's 'me' endpoint to fetch the authenticated user's profile, distinct from `retrieve_user_profile` which fetches profiles of other users by their public identifier.
395
362
 
396
363
  Returns:
397
364
  A dictionary containing the user's profile details.
@@ -403,21 +370,16 @@ class UnipileApp(APIApplication):
403
370
  linkedin, user, profile, me, retrieve, get, api
404
371
  """
405
372
  url = f"{self.base_url}/api/v1/users/me"
406
- params: dict[str, Any] = {"account_id": account_id}
373
+ params: dict[str, Any] = {"account_id": self.account_id}
407
374
  response = self._get(url, params=params)
408
375
  return response.json()
409
376
 
410
- def retrieve_post(
411
- self,
412
- post_id: str,
413
- account_id: str,
414
- ) -> dict[str, Any]:
377
+ def retrieve_post(self, post_id: str) -> dict[str, Any]:
415
378
  """
416
- Fetches a specific post's details by its unique ID, requiring an `account_id` for authorization. Unlike `list_profile_posts`, which retrieves a collection of posts from a user or company profile, this function targets one specific post and returns its full object.
379
+ Fetches a specific post's details by its unique ID. Unlike `list_profile_posts`, which retrieves a collection of posts from a user or company profile, this function targets one specific post and returns its full object.
417
380
 
418
381
  Args:
419
382
  post_id: The ID of the post to retrieve.
420
- account_id: The ID of the Unipile account to perform the request from (REQUIRED).
421
383
 
422
384
  Returns:
423
385
  A dictionary containing the post details.
@@ -429,24 +391,22 @@ class UnipileApp(APIApplication):
429
391
  linkedin, post, retrieve, get, content, api, important
430
392
  """
431
393
  url = f"{self.base_url}/api/v1/posts/{post_id}"
432
- params: dict[str, Any] = {"account_id": account_id}
394
+ params: dict[str, Any] = {"account_id": self.account_id}
433
395
  response = self._get(url, params=params)
434
396
  return response.json()
435
397
 
436
398
  def list_post_comments(
437
399
  self,
438
400
  post_id: str,
439
- account_id: str,
440
401
  comment_id: str | None = None,
441
402
  cursor: str | None = None,
442
403
  limit: int | None = None,
443
404
  ) -> dict[str, Any]:
444
405
  """
445
- Fetches comments for a specific post using an `account_id` for authorization. Providing an optional `comment_id` retrieves threaded replies instead of top-level comments. This read-only operation contrasts with `create_post_comment`, which publishes new comments, and `list_content_reactions`, which retrieves 'likes'.
406
+ Fetches comments for a specific post. Providing an optional `comment_id` retrieves threaded replies instead of top-level comments. This read-only operation contrasts with `create_post_comment`, which publishes new comments, and `list_content_reactions`, which retrieves 'likes'.
446
407
 
447
408
  Args:
448
409
  post_id: The social ID of the post.
449
- account_id: The ID of the Unipile account to perform the request from (REQUIRED).
450
410
  comment_id: If provided, retrieves replies to this comment ID instead of top-level comments.
451
411
  cursor: Pagination cursor.
452
412
  limit: Number of comments to return. (OpenAPI spec shows type string, passed as string if provided).
@@ -461,7 +421,7 @@ class UnipileApp(APIApplication):
461
421
  linkedin, post, comment, list, content, api, important
462
422
  """
463
423
  url = f"{self.base_url}/api/v1/posts/{post_id}/comments"
464
- params: dict[str, Any] = {"account_id": account_id}
424
+ params: dict[str, Any] = {"account_id": self.account_id}
465
425
  if cursor:
466
426
  params["cursor"] = cursor
467
427
  if limit is not None:
@@ -474,16 +434,14 @@ class UnipileApp(APIApplication):
474
434
 
475
435
  def create_post(
476
436
  self,
477
- account_id: str,
478
437
  text: str,
479
438
  mentions: list[dict[str, Any]] | None = None,
480
439
  external_link: str | None = None,
481
440
  ) -> dict[str, Any]:
482
441
  """
483
- Publishes a new top-level post from a specified account, including text, user mentions, and an external link. This function creates original content, distinguishing it from `create_post_comment` which adds replies to existing posts.
442
+ Publishes a new top-level post from the account, including text, user mentions, and an external link. This function creates original content, distinguishing it from `create_post_comment` which adds replies to existing posts.
484
443
 
485
444
  Args:
486
- account_id: The ID of the Unipile account that will author the post (added as query parameter).
487
445
  text: The main text content of the post.
488
446
  mentions: Optional list of dictionaries, each representing a mention.
489
447
  Example: `[{"entity_urn": "urn:li:person:...", "start_index": 0, "end_index": 5}]`
@@ -501,7 +459,7 @@ class UnipileApp(APIApplication):
501
459
  url = f"{self.base_url}/api/v1/posts"
502
460
 
503
461
  params: dict[str, str] = {
504
- "account_id": account_id,
462
+ "account_id": self.account_id,
505
463
  "text": text,
506
464
  }
507
465
 
@@ -516,17 +474,15 @@ class UnipileApp(APIApplication):
516
474
  def list_content_reactions(
517
475
  self,
518
476
  post_id: str,
519
- account_id: str,
520
477
  comment_id: str | None = None,
521
478
  cursor: str | None = None,
522
479
  limit: int | None = None,
523
480
  ) -> dict[str, Any]:
524
481
  """
525
- Retrieves a paginated list of reactions for a given post or, optionally, a specific comment. This read-only operation uses the provided `account_id` for the request, distinguishing it from the `create_reaction` function which adds new reactions.
482
+ Retrieves a paginated list of reactions for a given post or, optionally, a specific comment. This read-only operation uses the account for the request, distinguishing it from the `create_reaction` function which adds new reactions.
526
483
 
527
484
  Args:
528
485
  post_id: The social ID of the post.
529
- account_id: The ID of the Unipile account to perform the request from .
530
486
  comment_id: If provided, retrieves reactions for this comment ID.
531
487
  cursor: Pagination cursor.
532
488
  limit: Number of reactions to return (1-100, spec max 250).
@@ -541,7 +497,7 @@ class UnipileApp(APIApplication):
541
497
  linkedin, post, reaction, list, like, content, api
542
498
  """
543
499
  url = f"{self.base_url}/api/v1/posts/{post_id}/reactions"
544
- params: dict[str, Any] = {"account_id": account_id}
500
+ params: dict[str, Any] = {"account_id": self.account_id}
545
501
  if cursor:
546
502
  params["cursor"] = cursor
547
503
  if limit:
@@ -555,7 +511,6 @@ class UnipileApp(APIApplication):
555
511
  def create_post_comment(
556
512
  self,
557
513
  post_social_id: str,
558
- account_id: str,
559
514
  text: str,
560
515
  comment_id: str | None = None, # If provided, replies to a specific comment
561
516
  mentions_body: list[dict[str, Any]] | None = None,
@@ -565,7 +520,6 @@ class UnipileApp(APIApplication):
565
520
 
566
521
  Args:
567
522
  post_social_id: The social ID of the post to comment on.
568
- account_id: The ID of the Unipile account performing the comment.
569
523
  text: The text content of the comment (passed as a query parameter).
570
524
  Supports Unipile's mention syntax like "Hey {{0}}".
571
525
  comment_id: Optional ID of a specific comment to reply to instead of commenting on the post.
@@ -582,7 +536,7 @@ class UnipileApp(APIApplication):
582
536
  """
583
537
  url = f"{self.base_url}/api/v1/posts/{post_social_id}/comments"
584
538
  params: dict[str, Any] = {
585
- "account_id": account_id,
539
+ "account_id": self.account_id,
586
540
  "text": text,
587
541
  }
588
542
 
@@ -608,7 +562,6 @@ class UnipileApp(APIApplication):
608
562
  reaction_type: Literal[
609
563
  "like", "celebrate", "love", "insightful", "funny", "support"
610
564
  ],
611
- account_id: str,
612
565
  comment_id: str | None = None,
613
566
  ) -> dict[str, Any]:
614
567
  """
@@ -617,7 +570,6 @@ class UnipileApp(APIApplication):
617
570
  Args:
618
571
  post_social_id: The social ID of the post or comment to react to.
619
572
  reaction_type: The type of reaction. Valid values are "like", "celebrate", "love", "insightful", "funny", or "support".
620
- account_id: Account ID of the Unipile account performing the reaction.
621
573
  comment_id: Optional ID of a specific comment to react to instead of the post.
622
574
 
623
575
  Returns:
@@ -632,7 +584,7 @@ class UnipileApp(APIApplication):
632
584
  url = f"{self.base_url}/api/v1/posts/reaction"
633
585
 
634
586
  params: dict[str, str] = {
635
- "account_id": account_id,
587
+ "account_id": self.account_id,
636
588
  "post_id": post_social_id,
637
589
  "reaction_type": reaction_type,
638
590
  }
@@ -652,7 +604,6 @@ class UnipileApp(APIApplication):
652
604
 
653
605
  def search(
654
606
  self,
655
- account_id: str,
656
607
  category: Literal["people", "companies", "posts", "jobs"],
657
608
  cursor: str | None = None,
658
609
  limit: int | None = None,
@@ -667,7 +618,6 @@ class UnipileApp(APIApplication):
667
618
  For people, companies, and jobs, it uses the classic API.
668
619
 
669
620
  Args:
670
- account_id: The ID of the Unipile account to perform the search from (REQUIRED).
671
621
  category: Type of search to perform. Valid values are "people", "companies", "posts", or "jobs".
672
622
  cursor: Pagination cursor for the next page of entries.
673
623
  limit: Number of items to return (up to 50 for Classic search).
@@ -691,7 +641,7 @@ class UnipileApp(APIApplication):
691
641
 
692
642
  url = f"{self.base_url}/api/v1/linkedin/search"
693
643
 
694
- params: dict[str, Any] = {"account_id": account_id}
644
+ params: dict[str, Any] = {"account_id": self.account_id}
695
645
  if cursor:
696
646
  params["cursor"] = cursor
697
647
  if limit is not None:
@@ -719,19 +669,13 @@ class UnipileApp(APIApplication):
719
669
  response = self._post(url, params=params, data=payload)
720
670
  return self._handle_response(response)
721
671
 
722
- def retrieve_user_profile(
723
- self,
724
- identifier: str,
725
- account_id: str,
726
- ) -> dict[str, Any]:
672
+ def retrieve_user_profile(self, identifier: str) -> dict[str, Any]:
727
673
  """
728
- Retrieves a specific LinkedIn user's profile using their public or internal ID, authorized via the provided `account_id`. Unlike `retrieve_own_profile`, which fetches the authenticated user's details, this function targets and returns data for any specified third-party user profile on the platform.
674
+ Retrieves a specific LinkedIn user's profile using their public or internal ID. Unlike `retrieve_own_profile`, which fetches the authenticated user's details, this function targets and returns data for any specified third-party user profile on the platform.
729
675
 
730
676
  Args:
731
677
  identifier: Can be the provider's internal id OR the provider's public id of the requested user.For example, for https://www.linkedin.com/in/manojbajaj95/, the identifier is "manojbajaj95".
732
678
 
733
- account_id: The ID of the Unipile account to perform the request from (REQUIRED).
734
-
735
679
  Returns:
736
680
  A dictionary containing the user's profile details.
737
681
 
@@ -742,7 +686,7 @@ class UnipileApp(APIApplication):
742
686
  linkedin, user, profile, retrieve, get, api, important
743
687
  """
744
688
  url = f"{self.base_url}/api/v1/users/{identifier}"
745
- params: dict[str, Any] = {"account_id": account_id}
689
+ params: dict[str, Any] = {"account_id": self.account_id}
746
690
  response = self._get(url, params=params)
747
691
  return self._handle_response(response)
748
692
 
@@ -754,7 +698,7 @@ class UnipileApp(APIApplication):
754
698
  self.retrieve_chat,
755
699
  self.list_all_messages,
756
700
  self.list_all_accounts,
757
- self.retrieve_linked_account,
701
+ # self.retrieve_linked_account,
758
702
  self.list_profile_posts,
759
703
  self.retrieve_own_profile,
760
704
  self.retrieve_user_profile,
@@ -8,7 +8,7 @@ from loguru import logger
8
8
  from universal_mcp.applications.application import APIApplication
9
9
  from universal_mcp.integrations import Integration
10
10
 
11
- from universal_mcp.applications.unipile import UnipileApp
11
+ from universal_mcp.applications.linkedin import LinkedinApp
12
12
 
13
13
 
14
14
  class ScraperApp(APIApplication):
@@ -22,7 +22,7 @@ class ScraperApp(APIApplication):
22
22
  if self.integration:
23
23
  credentials = self.integration.get_credentials()
24
24
  self.account_id = credentials.get("account_id")
25
- self._unipile_app = UnipileApp(integration=self.integration)
25
+ self._unipile_app = LinkedinApp(integration=self.integration)
26
26
  else:
27
27
  logger.warning("Integration not found")
28
28
  self.account_id = None
@@ -0,0 +1,17 @@
1
+ from universal_mcp.applications.scraper import ScraperApp
2
+
3
+
4
+ from universal_mcp.agentr import AgentrClient, AgentrRegistry, AgentrIntegration
5
+
6
+ client = AgentrClient(api_key="key-1f5983ba-f433-4337-b652-dc40f8712660")
7
+ registry = AgentrRegistry(client=client)
8
+
9
+ integration = AgentrIntegration(name="scraper",client=client)
10
+
11
+ scraper = ScraperApp(integration=integration)
12
+
13
+ if __name__ == "__main__":
14
+ print(scraper.linkedin_search(keywords="ai", limit=2, category="jobs"))
15
+ # print(scraper.linkedin_retrieve_profile(identifier="ACoAAAEkwwAB9KEc2TrQgOLEQ-vzRyZeCDyc6DQ"))
16
+ # print(scraper.linkedin_list_profile_posts(identifier="ACoAAAEkwwAB9KEc2TrQgOLEQ-vzRyZeCDyc6DQ", limit=2))
17
+ # print(scraper.linkedin_list_post_comments(post_id="urn:li:ugcPost:7386500271624896512"))
@@ -5126,7 +5126,7 @@ wheels = [
5126
5126
 
5127
5127
  [[package]]
5128
5128
  name = "universal-mcp-applications"
5129
- version = "0.1.28"
5129
+ version = "0.1.29"
5130
5130
  source = { editable = "." }
5131
5131
  dependencies = [
5132
5132
  { name = "boto3" },