universal-mcp-applications 0.1.30rc1__tar.gz → 0.1.33__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.30rc1 → universal_mcp_applications-0.1.33}/PKG-INFO +1 -1
  2. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/pyproject.toml +1 -1
  3. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/scripts/run_docgen.py +1 -1
  4. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/google_docs/app.py +6 -2
  5. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/google_sheet/app.py +6 -2
  6. universal_mcp_applications-0.1.33/src/universal_mcp/applications/linkedin/README.md +29 -0
  7. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/linkedin/app.py +224 -97
  8. universal_mcp_applications-0.1.33/src/universal_mcp/applications/scraper/README.md +18 -0
  9. universal_mcp_applications-0.1.33/src/universal_mcp/applications/scraper/app.py +427 -0
  10. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/slack/app.py +31 -0
  11. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/uv.lock +9 -1
  12. universal_mcp_applications-0.1.30rc1/src/universal_mcp/applications/linkedin/README.md +0 -15
  13. universal_mcp_applications-0.1.30rc1/src/universal_mcp/applications/scraper/README.md +0 -15
  14. universal_mcp_applications-0.1.30rc1/src/universal_mcp/applications/scraper/app.py +0 -175
  15. universal_mcp_applications-0.1.30rc1/src/universal_mcp/applications/scraper/scraper_testers.py +0 -17
  16. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/.gitignore +0 -0
  17. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/GEMINI.md +0 -0
  18. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/LICENSE +0 -0
  19. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/README.md +0 -0
  20. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/bump_and_release.sh +0 -0
  21. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/scripts/docgen.py +0 -0
  22. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/scripts/prompts.py +0 -0
  23. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/scripts/readme.py +0 -0
  24. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/tests/test_applications.py +0 -0
  25. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/BEST_PRACTICES.md +0 -0
  26. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/ahrefs/README.md +0 -0
  27. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/ahrefs/__init__.py +0 -0
  28. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/ahrefs/app.py +0 -0
  29. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/airtable/README.md +0 -0
  30. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/airtable/__init__.py +0 -0
  31. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/airtable/app.py +0 -0
  32. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/apollo/README.md +0 -0
  33. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/apollo/__init__.py +0 -0
  34. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/apollo/app.py +0 -0
  35. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/asana/README.md +0 -0
  36. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/asana/__init__.py +0 -0
  37. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/asana/app.py +0 -0
  38. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/aws_s3/README.md +0 -0
  39. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/aws_s3/__init__.py +0 -0
  40. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/aws_s3/app.py +0 -0
  41. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/bill/README.md +0 -0
  42. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/bill/__init__.py +0 -0
  43. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/bill/app.py +0 -0
  44. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/box/README.md +0 -0
  45. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/box/__init__.py +0 -0
  46. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/box/app.py +0 -0
  47. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/braze/README.md +0 -0
  48. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/braze/__init__.py +0 -0
  49. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/braze/app.py +0 -0
  50. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/browser_use/README.md +0 -0
  51. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/browser_use/__init__.py +0 -0
  52. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/browser_use/app.py +0 -0
  53. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/cal_com_v2/README.md +0 -0
  54. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/cal_com_v2/__init__.py +0 -0
  55. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/cal_com_v2/app.py +0 -0
  56. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/calendly/README.md +0 -0
  57. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/calendly/__init__.py +0 -0
  58. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/calendly/app.py +0 -0
  59. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/canva/README.md +0 -0
  60. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/canva/__init__.py +0 -0
  61. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/canva/app.py +0 -0
  62. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/clickup/README.md +0 -0
  63. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/clickup/__init__.py +0 -0
  64. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/clickup/app.py +0 -0
  65. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/coda/README.md +0 -0
  66. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/coda/__init__.py +0 -0
  67. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/coda/app.py +0 -0
  68. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/confluence/README.md +0 -0
  69. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/confluence/__init__.py +0 -0
  70. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/confluence/app.py +0 -0
  71. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/contentful/README.md +0 -0
  72. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/contentful/__init__.py +0 -0
  73. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/contentful/app.py +0 -0
  74. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/crustdata/README.md +0 -0
  75. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/crustdata/__init__.py +0 -0
  76. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/crustdata/app.py +0 -0
  77. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/dialpad/README.md +0 -0
  78. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/dialpad/__init__.py +0 -0
  79. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/dialpad/app.py +0 -0
  80. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/digitalocean/README.md +0 -0
  81. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/digitalocean/__init__.py +0 -0
  82. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/digitalocean/app.py +0 -0
  83. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/domain_checker/README.md +0 -0
  84. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/domain_checker/__init__.py +0 -0
  85. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/domain_checker/app.py +0 -0
  86. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/e2b/README.md +0 -0
  87. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/e2b/__init__.py +0 -0
  88. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/e2b/app.py +0 -0
  89. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/elevenlabs/README.md +0 -0
  90. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/elevenlabs/__init__.py +0 -0
  91. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/elevenlabs/app.py +0 -0
  92. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/exa/README.md +0 -0
  93. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/exa/__init__.py +0 -0
  94. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/exa/app.py +0 -0
  95. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/falai/README.md +0 -0
  96. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/falai/__init__.py +0 -0
  97. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/falai/app.py +0 -0
  98. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/figma/README.md +0 -0
  99. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/figma/__init__.py +0 -0
  100. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/figma/app.py +0 -0
  101. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/file_system/README.md +0 -0
  102. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/file_system/__init__.py +0 -0
  103. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/file_system/app.py +0 -0
  104. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/firecrawl/README.md +0 -0
  105. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/firecrawl/__init__.py +0 -0
  106. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/firecrawl/app.py +0 -0
  107. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/fireflies/README.md +0 -0
  108. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/fireflies/__init__.py +0 -0
  109. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/fireflies/app.py +0 -0
  110. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/fpl/README.md +0 -0
  111. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/fpl/__init__.py +0 -0
  112. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/fpl/app.py +0 -0
  113. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/fpl/utils/api.py +0 -0
  114. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/fpl/utils/fixtures.py +0 -0
  115. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/fpl/utils/helper.py +0 -0
  116. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/fpl/utils/league_utils.py +0 -0
  117. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/fpl/utils/position_utils.py +0 -0
  118. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/ghost_content/README.md +0 -0
  119. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/ghost_content/__init__.py +0 -0
  120. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/ghost_content/app.py +0 -0
  121. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/github/README.md +0 -0
  122. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/github/__init__.py +0 -0
  123. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/github/app.py +0 -0
  124. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/gong/README.md +0 -0
  125. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/gong/__init__.py +0 -0
  126. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/gong/app.py +0 -0
  127. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/google_calendar/README.md +0 -0
  128. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/google_calendar/__init__.py +0 -0
  129. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/google_calendar/app.py +0 -0
  130. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/google_docs/README.md +0 -0
  131. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/google_docs/__init__.py +0 -0
  132. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/google_drive/README.md +0 -0
  133. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/google_drive/__init__.py +0 -0
  134. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/google_drive/app.py +0 -0
  135. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/google_gemini/README.md +0 -0
  136. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/google_gemini/__init__.py +0 -0
  137. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/google_gemini/app.py +0 -0
  138. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/google_mail/README.md +0 -0
  139. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/google_mail/__init__.py +0 -0
  140. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/google_mail/app.py +0 -0
  141. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/google_searchconsole/README.md +0 -0
  142. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/google_searchconsole/__init__.py +0 -0
  143. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/google_searchconsole/app.py +0 -0
  144. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/google_sheet/README.md +0 -0
  145. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/google_sheet/__init__.py +0 -0
  146. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/google_sheet/helper.py +0 -0
  147. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/hashnode/README.md +0 -0
  148. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/hashnode/__init__.py +0 -0
  149. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/hashnode/app.py +0 -0
  150. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/heygen/README.md +0 -0
  151. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/heygen/__init__.py +0 -0
  152. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/heygen/app.py +0 -0
  153. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/http_tools/README.md +0 -0
  154. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/http_tools/__init__.py +0 -0
  155. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/http_tools/app.py +0 -0
  156. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/hubspot/README.md +0 -0
  157. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/hubspot/__init__.py +0 -0
  158. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/hubspot/api_segments/__init__.py +0 -0
  159. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/hubspot/api_segments/api_segment_base.py +0 -0
  160. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/hubspot/api_segments/crm_api.py +0 -0
  161. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/hubspot/api_segments/marketing_api.py +0 -0
  162. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/hubspot/app.py +0 -0
  163. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/jira/README.md +0 -0
  164. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/jira/__init__.py +0 -0
  165. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/jira/app.py +0 -0
  166. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/klaviyo/README.md +0 -0
  167. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/klaviyo/__init__.py +0 -0
  168. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/klaviyo/app.py +0 -0
  169. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/linkedin/__init__.py +0 -0
  170. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/mailchimp/README.md +0 -0
  171. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/mailchimp/__init__.py +0 -0
  172. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/mailchimp/app.py +0 -0
  173. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/markitdown/README.md +0 -0
  174. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/markitdown/__init__.py +0 -0
  175. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/markitdown/app.py +0 -0
  176. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/miro/README.md +0 -0
  177. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/miro/__init__.py +0 -0
  178. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/miro/app.py +0 -0
  179. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/ms_teams/README.md +0 -0
  180. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/ms_teams/__init__.py +0 -0
  181. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/ms_teams/app.py +0 -0
  182. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/neon/README.md +0 -0
  183. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/neon/__init__.py +0 -0
  184. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/neon/app.py +0 -0
  185. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/notion/README.md +0 -0
  186. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/notion/__init__.py +0 -0
  187. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/notion/app.py +0 -0
  188. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/onedrive/README.md +0 -0
  189. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/onedrive/__init__.py +0 -0
  190. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/onedrive/app.py +0 -0
  191. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/openai/README.md +0 -0
  192. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/openai/__init__.py +0 -0
  193. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/openai/app.py +0 -0
  194. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/outlook/README.md +0 -0
  195. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/outlook/__init__.py +0 -0
  196. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/outlook/app.py +0 -0
  197. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/perplexity/README.md +0 -0
  198. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/perplexity/__init__.py +0 -0
  199. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/perplexity/app.py +0 -0
  200. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/pipedrive/README.md +0 -0
  201. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/pipedrive/__init__.py +0 -0
  202. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/pipedrive/app.py +0 -0
  203. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/posthog/README.md +0 -0
  204. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/posthog/__init__.py +0 -0
  205. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/posthog/app.py +0 -0
  206. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/reddit/README.md +0 -0
  207. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/reddit/__init__.py +0 -0
  208. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/reddit/app.py +0 -0
  209. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/resend/README.md +0 -0
  210. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/resend/__init__.py +0 -0
  211. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/resend/app.py +0 -0
  212. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/retell/README.md +0 -0
  213. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/retell/__init__.py +0 -0
  214. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/retell/app.py +0 -0
  215. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/rocketlane/README.md +0 -0
  216. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/rocketlane/__init__.py +0 -0
  217. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/rocketlane/app.py +0 -0
  218. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/scraper/__init__.py +0 -0
  219. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/semanticscholar/README.md +0 -0
  220. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/semanticscholar/__init__.py +0 -0
  221. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/semanticscholar/app.py +0 -0
  222. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/semrush/README.md +0 -0
  223. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/semrush/__init__.py +0 -0
  224. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/semrush/app.py +0 -0
  225. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/sendgrid/README.md +0 -0
  226. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/sendgrid/__init__.py +0 -0
  227. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/sendgrid/app.py +0 -0
  228. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/sentry/README.md +0 -0
  229. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/sentry/__init__.py +0 -0
  230. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/sentry/app.py +0 -0
  231. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/serpapi/README.md +0 -0
  232. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/serpapi/__init__.py +0 -0
  233. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/serpapi/app.py +0 -0
  234. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/sharepoint/README.md +0 -0
  235. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/sharepoint/__init__.py +0 -0
  236. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/sharepoint/app.py +0 -0
  237. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/shopify/README.md +0 -0
  238. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/shopify/__init__.py +0 -0
  239. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/shopify/app.py +0 -0
  240. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/shortcut/README.md +0 -0
  241. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/shortcut/__init__.py +0 -0
  242. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/shortcut/app.py +0 -0
  243. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/slack/README.md +0 -0
  244. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/slack/__init__.py +0 -0
  245. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/spotify/README.md +0 -0
  246. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/spotify/__init__.py +0 -0
  247. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/spotify/app.py +0 -0
  248. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/supabase/README.md +0 -0
  249. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/supabase/__init__.py +0 -0
  250. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/supabase/app.py +0 -0
  251. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/tavily/README.md +0 -0
  252. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/tavily/__init__.py +0 -0
  253. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/tavily/app.py +0 -0
  254. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/trello/README.md +0 -0
  255. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/trello/__init__.py +0 -0
  256. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/trello/app.py +0 -0
  257. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/twilio/README.md +0 -0
  258. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/twilio/__init__.py +0 -0
  259. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/twilio/app.py +0 -0
  260. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/twitter/README.md +0 -0
  261. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/twitter/__init__.py +0 -0
  262. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/twitter/api_segments/__init__.py +0 -0
  263. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/twitter/api_segments/api_segment_base.py +0 -0
  264. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/twitter/api_segments/compliance_api.py +0 -0
  265. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/twitter/api_segments/dm_conversations_api.py +0 -0
  266. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/twitter/api_segments/dm_events_api.py +0 -0
  267. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/twitter/api_segments/likes_api.py +0 -0
  268. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/twitter/api_segments/lists_api.py +0 -0
  269. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/twitter/api_segments/openapi_json_api.py +0 -0
  270. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/twitter/api_segments/spaces_api.py +0 -0
  271. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/twitter/api_segments/trends_api.py +0 -0
  272. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/twitter/api_segments/tweets_api.py +0 -0
  273. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/twitter/api_segments/usage_api.py +0 -0
  274. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/twitter/api_segments/users_api.py +0 -0
  275. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/twitter/app.py +0 -0
  276. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/whatsapp/README.md +0 -0
  277. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/whatsapp/__init__.py +0 -0
  278. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/whatsapp/app.py +0 -0
  279. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/whatsapp/audio.py +0 -0
  280. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/whatsapp/whatsapp.py +0 -0
  281. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/whatsapp_business/README.md +0 -0
  282. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/whatsapp_business/__init__.py +0 -0
  283. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/whatsapp_business/app.py +0 -0
  284. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/wrike/README.md +0 -0
  285. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/wrike/__init__.py +0 -0
  286. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/wrike/app.py +0 -0
  287. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/yahoo_finance/README.md +0 -0
  288. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/yahoo_finance/__init__.py +0 -0
  289. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/yahoo_finance/app.py +0 -0
  290. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/youtube/README.md +0 -0
  291. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/youtube/__init__.py +0 -0
  292. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/youtube/app.py +0 -0
  293. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/zenquotes/README.md +0 -0
  294. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/src/universal_mcp/applications/zenquotes/__init__.py +0 -0
  295. {universal_mcp_applications-0.1.30rc1 → universal_mcp_applications-0.1.33}/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.30rc1
3
+ Version: 0.1.33
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.30-rc1"
9
+ version = "0.1.33"
10
10
  description = "A Universal MCP Application: universal_mcp_applications"
11
11
  readme = "README.md"
12
12
  requires-python = ">=3.11"
@@ -2,7 +2,7 @@ import os
2
2
  import subprocess
3
3
 
4
4
  APPS = [
5
- "scraper",
5
+ "linkedin",
6
6
  ]
7
7
 
8
8
 
@@ -11,7 +11,7 @@ class GoogleDocsApp(APIApplication):
11
11
 
12
12
  def create_document(self, title: str) -> dict[str, Any]:
13
13
  """
14
- Creates a blank Google Document with a specified title by sending a POST request to the Google Docs API. The function returns a dictionary containing the new document's metadata, including the unique document ID required by other functions for subsequent modifications or retrieval.
14
+ Creates a blank Google Document with a specified title by sending a POST request to the Google Docs API. The function returns a dictionary containing the new document's metadata, including the unique document ID required by other functions for subsequent modifications or retrieval. Note that you need to call other google_docs functions (e.g. `google_docs__insert_text`) to actually add content after creating the document.
15
15
 
16
16
  Args:
17
17
  title: The title for the new Google Document to be created.
@@ -30,7 +30,11 @@ class GoogleDocsApp(APIApplication):
30
30
  document_data = {"title": title}
31
31
  response = self._post(url, data=document_data)
32
32
  response.raise_for_status()
33
- return response.json()
33
+ payload = response.json()
34
+ payload["Note"] = (
35
+ "You must load and call other google docs content functions (like google_docs__insert_text)"
36
+ )
37
+ return payload
34
38
 
35
39
  def get_document(self, document_id: str) -> dict[str, Any]:
36
40
  """
@@ -21,7 +21,7 @@ class GoogleSheetApp(APIApplication):
21
21
 
22
22
  def create_spreadsheet(self, title: str) -> dict[str, Any]:
23
23
  """
24
- Creates a new, blank Google Spreadsheet file with a specified title. This function generates a completely new document, unlike `add_sheet` which adds a worksheet (tab) to an existing spreadsheet. It returns the API response containing the new spreadsheet's metadata.
24
+ Creates a new, blank Google Spreadsheet file with a specified title. This function generates a completely new document, unlike `add_sheet` which adds a worksheet (tab) to an existing spreadsheet. It returns the API response containing the new spreadsheet's metadata. Note that you need to call other google_sheet functions (e.g. `google_sheet__write_values_to_sheet`) to actually add content after creating the spreadsheet.
25
25
 
26
26
  Args:
27
27
  title: String representing the desired title for the new spreadsheet
@@ -39,7 +39,11 @@ class GoogleSheetApp(APIApplication):
39
39
  url = self.base_url
40
40
  spreadsheet_data = {"properties": {"title": title}}
41
41
  response = self._post(url, data=spreadsheet_data)
42
- return self._handle_response(response)
42
+ payload = self._handle_response(response)
43
+ payload["Note"] = (
44
+ "You must load and call other google_sheet content functions (like `google_sheet__write_values_to_sheet`)"
45
+ )
46
+ return payload
43
47
 
44
48
  def get_spreadsheet_metadata(self, spreadsheetId: str) -> dict[str, Any]:
45
49
  """
@@ -0,0 +1,29 @@
1
+ # LinkedinApp MCP Server
2
+
3
+ An MCP Server for the LinkedinApp API.
4
+
5
+ ## 🛠️ Tool List
6
+
7
+ This is automatically generated from OpenAPI schema for the LinkedinApp API.
8
+
9
+
10
+ | Tool | Description |
11
+ |------|-------------|
12
+ | `list_all_chats` | 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. |
13
+ | `list_chat_messages` | Retrieves messages from a specific chat identified by `chat_id`. Supports pagination and filtering by date or sender. Unlike `list_all_messages`, which fetches from all chats, this function targets the contents of a single conversation. |
14
+ | `send_chat_message` | Sends a text message to a specific chat conversation using its `chat_id`. This function creates a new message via a POST request, distinguishing it from read-only functions like `list_chat_messages`. It returns the API's response, which typically confirms the successful creation of the message. |
15
+ | `retrieve_chat` | 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. |
16
+ | `list_all_messages` | 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. |
17
+ | `list_profile_posts` | Retrieves a paginated list of posts from a specific user or company profile using their provider ID. An authorizing `account_id` is required, and the `is_company` flag must specify the entity type, distinguishing this from `retrieve_post` which fetches a single post by its own ID. |
18
+ | `retrieve_own_profile` | 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. |
19
+ | `retrieve_user_profile` | 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. |
20
+ | `retrieve_post` | 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. |
21
+ | `list_post_comments` | 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'. |
22
+ | `create_post` | 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. |
23
+ | `list_content_reactions` | 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. |
24
+ | `create_post_comment` | Publishes a comment on a specified post. By providing an optional `comment_id`, it creates a threaded reply to an existing comment instead of a new top-level one. This function's dual capability distinguishes it from `list_post_comments`, which only retrieves comments and their replies. |
25
+ | `create_reaction` | Adds a specified reaction (e.g., 'like', 'love') to a LinkedIn post or, optionally, to a specific comment. This function performs a POST request to create the reaction, differentiating it from `list_content_reactions` which only retrieves existing ones. |
26
+ | `search_companies` | Performs a paginated search for companies on LinkedIn using keywords, with optional location and industry filters. Its specific 'companies' search category distinguishes it from other methods like `search_people` or `search_posts`, ensuring that only company profiles are returned. |
27
+ | `search_jobs` | Performs a LinkedIn search for jobs, filtering results by keywords, region, industry, and minimum salary. Unlike other search functions (`search_people`, `search_companies`), this method is specifically configured to query the 'jobs' category, providing a paginated list of relevant employment opportunities. |
28
+ | `search_people` | Searches for LinkedIn user profiles using keywords, with optional filters for location, industry, and company. This function specifically targets the 'people' category, distinguishing it from other search methods like `search_companies` or `search_jobs` that query different entity types through the same API endpoint. |
29
+ | `search_posts` | Performs a keyword-based search for LinkedIn posts, allowing filters for date and sorting by relevance. This function executes a general, platform-wide content search, distinguishing it from other search functions that target people, companies, or jobs, and from `list_profile_posts` which retrieves from a specific profile. |
@@ -78,6 +78,38 @@ class LinkedinApp(APIApplication):
78
78
  "Cache-Control": "no-cache", # Often good practice for APIs
79
79
  }
80
80
 
81
+ def _get_search_parameter_id(self, param_type: str, keywords: str) -> str:
82
+ """
83
+ Retrieves the ID for a given LinkedIn search parameter by its name.
84
+
85
+ Args:
86
+ param_type: The type of parameter to search for (e.g., "LOCATION", "COMPANY").
87
+ keywords: The name of the parameter to find (e.g., "United States").
88
+
89
+ Returns:
90
+ The corresponding ID for the search parameter.
91
+
92
+ Raises:
93
+ ValueError: If no exact match for the keywords is found.
94
+ httpx.HTTPError: If the API request fails.
95
+ """
96
+ url = f"{self.base_url}/api/v1/linkedin/search/parameters"
97
+ params = {
98
+ "account_id": self.account_id,
99
+ "keywords": keywords,
100
+ "type": param_type,
101
+ }
102
+
103
+ response = self._get(url, params=params)
104
+ results = self._handle_response(response)
105
+
106
+ items = results.get("items", [])
107
+ if items:
108
+ # Return the ID of the first result, assuming it's the most relevant
109
+ return items[0]["id"]
110
+
111
+ raise ValueError(f'Could not find a matching ID for {param_type}: "{keywords}"')
112
+
81
113
  def list_all_chats(
82
114
  self,
83
115
  unread: bool | None = None,
@@ -271,54 +303,6 @@ class LinkedinApp(APIApplication):
271
303
  response = self._get(url, params=params)
272
304
  return response.json()
273
305
 
274
- def list_all_accounts(
275
- self,
276
- cursor: str | None = None,
277
- limit: int | None = None, # 1-259 according to spec
278
- ) -> dict[str, Any]:
279
- """
280
- Retrieves a paginated list of all social media accounts linked to the Unipile service. This is crucial for obtaining the `account_id` required by other methods to specify which user account should perform an action, like sending a message or retrieving user-specific posts.
281
-
282
- Args:
283
- cursor: Pagination cursor.
284
- limit: Number of items to return (1-259).
285
-
286
- Returns:
287
- A dictionary containing a list of account objects and a pagination cursor.
288
-
289
- Raises:
290
- httpx.HTTPError: If the API request fails.
291
-
292
- Tags:
293
- linkedin, account, list, unipile, api, important
294
- """
295
- url = f"{self.base_url}/api/v1/accounts"
296
- params: dict[str, Any] = {}
297
- if cursor:
298
- params["cursor"] = cursor
299
- if limit:
300
- params["limit"] = limit
301
-
302
- response = self._get(url, params=params)
303
- return response.json()
304
-
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.
308
-
309
- # Returns:
310
- # A dictionary containing the account object details.
311
-
312
- # Raises:
313
- # httpx.HTTPError: If the API request fails.
314
-
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()
321
-
322
306
  def list_profile_posts(
323
307
  self,
324
308
  identifier: str, # User or Company provider internal ID
@@ -602,43 +586,53 @@ class LinkedinApp(APIApplication):
602
586
  "message": "Reaction action processed.",
603
587
  }
604
588
 
605
- def search(
589
+ def retrieve_user_profile(self, identifier: str) -> dict[str, Any]:
590
+ """
591
+ 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.
592
+
593
+ Args:
594
+ 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".
595
+
596
+ Returns:
597
+ A dictionary containing the user's profile details.
598
+
599
+ Raises:
600
+ httpx.HTTPError: If the API request fails.
601
+
602
+ Tags:
603
+ linkedin, user, profile, retrieve, get, api, important
604
+ """
605
+ url = f"{self.base_url}/api/v1/users/{identifier}"
606
+ params: dict[str, Any] = {"account_id": self.account_id}
607
+ response = self._get(url, params=params)
608
+ return self._handle_response(response)
609
+
610
+ def search_people(
606
611
  self,
607
- category: Literal["people", "companies", "posts", "jobs"],
608
612
  cursor: str | None = None,
609
613
  limit: int | None = None,
610
614
  keywords: str | None = None,
611
- date_posted: Literal["past_day", "past_week", "past_month"] | None = None,
612
- sort_by: Literal["relevance", "date"] = "relevance",
613
- minimum_salary_value: int = 40,
615
+ location: str | None = None,
616
+ industry: str | None = None,
617
+ company: str | None = None,
614
618
  ) -> dict[str, Any]:
615
619
  """
616
- Performs a comprehensive LinkedIn search for people, companies, posts, or jobs using keywords.
617
- Supports pagination and targets either the classic or Sales Navigator API for posts.
618
- For people, companies, and jobs, it uses the classic API.
619
-
620
+ Searches for LinkedIn user profiles using keywords, with optional filters for location, industry, and company. This function specifically targets the 'people' category, distinguishing it from other search methods like `search_companies` or `search_jobs` that query different entity types through the same API endpoint.
621
+
620
622
  Args:
621
- category: Type of search to perform. Valid values are "people", "companies", "posts", or "jobs".
622
623
  cursor: Pagination cursor for the next page of entries.
623
624
  limit: Number of items to return (up to 50 for Classic search).
624
625
  keywords: Keywords to search for.
625
- date_posted: Filter by when the post was posted (posts only). Valid values are "past_day", "past_week", or "past_month".
626
- sort_by: How to sort the results (for posts and jobs). Valid values are "relevance" or "date".
627
- minimum_salary_value: The minimum salary to filter for (jobs only).
628
-
626
+ location: The geographical location to filter people by (e.g., "United States").
627
+ industry: The industry to filter people by.(eg., "Information Technology and Services").
628
+ company: The company to filter people by.(e.g., "Google").
629
+
629
630
  Returns:
630
631
  A dictionary containing search results and pagination details.
631
-
632
+
632
633
  Raises:
633
634
  httpx.HTTPError: If the API request fails.
634
- ValueError: If the category is empty.
635
-
636
- Tags:
637
- linkedin, search, people, companies, posts, jobs, api, important
638
635
  """
639
- if not category:
640
- raise ValueError("Category cannot be empty.")
641
-
642
636
  url = f"{self.base_url}/api/v1/linkedin/search"
643
637
 
644
638
  params: dict[str, Any] = {"account_id": self.account_id}
@@ -647,47 +641,179 @@ class LinkedinApp(APIApplication):
647
641
  if limit is not None:
648
642
  params["limit"] = limit
649
643
 
650
- payload: dict[str, Any] = {"api": "classic", "category": category}
644
+ payload: dict[str, Any] = {"api": "classic", "category": "people"}
651
645
 
652
646
  if keywords:
653
647
  payload["keywords"] = keywords
648
+
649
+ if location:
650
+ location_id = self._get_search_parameter_id("LOCATION", location)
651
+ payload["location"] = [location_id]
654
652
 
655
- if category == "posts":
656
- if date_posted:
657
- payload["date_posted"] = date_posted
658
- if sort_by:
659
- payload["sort_by"] = sort_by
653
+ if industry:
654
+ industry_id = self._get_search_parameter_id("INDUSTRY", industry)
655
+ payload["industry"] = [industry_id]
656
+
657
+ if company:
658
+ company_id = self._get_search_parameter_id("COMPANY", company)
659
+ payload["company"] = [company_id]
660
+
661
+ response = self._post(url, params=params, data=payload)
662
+ return self._handle_response(response)
660
663
 
661
- elif category == "jobs":
662
- payload["minimum_salary"] = {
663
- "currency": "USD",
664
- "value": minimum_salary_value,
665
- }
666
- if sort_by:
667
- payload["sort_by"] = sort_by
664
+ def search_companies(
665
+ self,
666
+ cursor: str | None = None,
667
+ limit: int | None = None,
668
+ keywords: str | None = None,
669
+ location: str | None = None,
670
+ industry: str | None = None,
671
+ ) -> dict[str, Any]:
672
+ """
673
+ Performs a paginated search for companies on LinkedIn using keywords, with optional location and industry filters. Its specific 'companies' search category distinguishes it from other methods like `search_people` or `search_posts`, ensuring that only company profiles are returned.
674
+
675
+ Args:
676
+ cursor: Pagination cursor for the next page of entries.
677
+ limit: Number of items to return (up to 50 for Classic search).
678
+ keywords: Keywords to search for.
679
+ location: The geographical location to filter companies by (e.g., "United States").
680
+ industry: The industry to filter companies by.(e.g., "Information Technology and Services").
681
+
682
+ Returns:
683
+ A dictionary containing search results and pagination details.
684
+
685
+ Raises:
686
+ httpx.HTTPError: If the API request fails.
687
+ """
688
+ url = f"{self.base_url}/api/v1/linkedin/search"
689
+
690
+ params: dict[str, Any] = {"account_id": self.account_id}
691
+ if cursor:
692
+ params["cursor"] = cursor
693
+ if limit is not None:
694
+ params["limit"] = limit
695
+
696
+ payload: dict[str, Any] = {"api": "classic", "category": "companies"}
697
+
698
+ if keywords:
699
+ payload["keywords"] = keywords
700
+
701
+ if location:
702
+ location_id = self._get_search_parameter_id("LOCATION", location)
703
+ payload["location"] = [location_id]
704
+
705
+ if industry:
706
+ industry_id = self._get_search_parameter_id("INDUSTRY", industry)
707
+ payload["industry"] = [industry_id]
668
708
 
669
709
  response = self._post(url, params=params, data=payload)
670
710
  return self._handle_response(response)
671
711
 
672
- def retrieve_user_profile(self, identifier: str) -> dict[str, Any]:
712
+ def search_posts(
713
+ self,
714
+ cursor: str | None = None,
715
+ limit: int | None = None,
716
+ keywords: str | None = None,
717
+ date_posted: Literal["past_day", "past_week", "past_month"] | None = None,
718
+ sort_by: Literal["relevance", "date"] = "relevance",
719
+ ) -> dict[str, Any]:
673
720
  """
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.
675
-
721
+ Performs a keyword-based search for LinkedIn posts, allowing filters for date and sorting by relevance. This function executes a general, platform-wide content search, distinguishing it from other search functions that target people, companies, or jobs, and from `list_profile_posts` which retrieves from a specific profile.
722
+
676
723
  Args:
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".
678
-
724
+ cursor: Pagination cursor for the next page of entries.
725
+ limit: Number of items to return (up to 50 for Classic search).
726
+ keywords: Keywords to search for.
727
+ date_posted: Filter by when the post was posted.
728
+ sort_by: How to sort the results.
729
+
679
730
  Returns:
680
- A dictionary containing the user's profile details.
681
-
731
+ A dictionary containing search results and pagination details.
732
+
682
733
  Raises:
683
734
  httpx.HTTPError: If the API request fails.
735
+ """
736
+ url = f"{self.base_url}/api/v1/linkedin/search"
684
737
 
685
- Tags:
686
- linkedin, user, profile, retrieve, get, api, important
738
+ params: dict[str, Any] = {"account_id": self.account_id}
739
+ if cursor:
740
+ params["cursor"] = cursor
741
+ if limit is not None:
742
+ params["limit"] = limit
743
+
744
+ payload: dict[str, Any] = {"api": "classic", "category": "posts"}
745
+
746
+ if keywords:
747
+ payload["keywords"] = keywords
748
+ if date_posted:
749
+ payload["date_posted"] = date_posted
750
+ if sort_by:
751
+ payload["sort_by"] = sort_by
752
+
753
+ response = self._post(url, params=params, data=payload)
754
+ return self._handle_response(response)
755
+
756
+ def search_jobs(
757
+ self,
758
+ cursor: str | None = None,
759
+ limit: int | None = None,
760
+ keywords: str | None = None,
761
+ region: str | None = None,
762
+ sort_by: Literal["relevance", "date"] = "relevance",
763
+ minimum_salary_value: int = 40,
764
+ industry: str | None = None,
765
+ ) -> dict[str, Any]:
687
766
  """
688
- url = f"{self.base_url}/api/v1/users/{identifier}"
767
+ Performs a LinkedIn search for jobs, filtering results by keywords, region, industry, and minimum salary. Unlike other search functions (`search_people`, `search_companies`), this method is specifically configured to query the 'jobs' category, providing a paginated list of relevant employment opportunities.
768
+
769
+ Args:
770
+ cursor: Pagination cursor for the next page of entries.
771
+ limit: Number of items to return (up to 50 for Classic search).
772
+ keywords: Keywords to search for.
773
+ region: The geographical region to filter jobs by (e.g., "United States").
774
+ sort_by: How to sort the results.(e.g., "relevance" or "date".)
775
+ minimum_salary_value: The minimum salary to filter for.
776
+ industry: The industry to filter jobs by.(e.g., "Software Development").
777
+
778
+ Returns:
779
+ A dictionary containing search results and pagination details.
780
+
781
+ Raises:
782
+ httpx.HTTPError: If the API request fails.
783
+ ValueError: If the specified location is not found.
784
+ """
785
+ url = f"{self.base_url}/api/v1/linkedin/search"
786
+
689
787
  params: dict[str, Any] = {"account_id": self.account_id}
690
- response = self._get(url, params=params)
788
+ if cursor:
789
+ params["cursor"] = cursor
790
+ if limit is not None:
791
+ params["limit"] = limit
792
+
793
+ payload: dict[str, Any] = {
794
+ "api": "classic",
795
+ "category": "jobs",
796
+ "minimum_salary": {
797
+ "currency": "USD",
798
+ "value": minimum_salary_value,
799
+ },
800
+ }
801
+
802
+ if keywords:
803
+ payload["keywords"] = keywords
804
+ if sort_by:
805
+ payload["sort_by"] = sort_by
806
+
807
+ # If location is provided, get its ID and add it to the payload
808
+ if region:
809
+ location_id = self._get_search_parameter_id("LOCATION", region)
810
+ payload["region"] = location_id
811
+
812
+ if industry:
813
+ industry_id = self._get_search_parameter_id("INDUSTRY", industry)
814
+ payload["industry"] = [industry_id]
815
+
816
+ response = self._post(url, params=params, data=payload)
691
817
  return self._handle_response(response)
692
818
 
693
819
  def list_tools(self) -> list[Callable]:
@@ -697,8 +823,6 @@ class LinkedinApp(APIApplication):
697
823
  self.send_chat_message,
698
824
  self.retrieve_chat,
699
825
  self.list_all_messages,
700
- self.list_all_accounts,
701
- # self.retrieve_linked_account,
702
826
  self.list_profile_posts,
703
827
  self.retrieve_own_profile,
704
828
  self.retrieve_user_profile,
@@ -708,5 +832,8 @@ class LinkedinApp(APIApplication):
708
832
  self.list_content_reactions,
709
833
  self.create_post_comment,
710
834
  self.create_reaction,
711
- self.search,
835
+ self.search_companies,
836
+ self.search_jobs,
837
+ self.search_people,
838
+ self.search_posts,
712
839
  ]
@@ -0,0 +1,18 @@
1
+ # ScraperApp MCP Server
2
+
3
+ An MCP Server for the ScraperApp API.
4
+
5
+ ## 🛠️ Tool List
6
+
7
+ This is automatically generated from OpenAPI schema for the ScraperApp API.
8
+
9
+
10
+ | Tool | Description |
11
+ |------|-------------|
12
+ | `linkedin_list_profile_posts` | Fetches a paginated list of posts from a specific user or company profile using its provider ID. The `is_company` flag must specify the entity type. Unlike `linkedin_search_posts`, this function directly retrieves content from a known profile's feed instead of performing a global keyword search. |
13
+ | `linkedin_retrieve_profile` | Fetches a specific LinkedIn user's profile using their public or internal ID. Unlike `linkedin_search_people`, which discovers multiple users via keywords, this function targets and retrieves detailed data for a single, known individual based on a direct identifier. |
14
+ | `linkedin_list_post_comments` | Fetches a paginated list of comments for a specified LinkedIn post. It can retrieve either top-level comments or threaded replies if an optional `comment_id` is provided. This is a read-only operation, distinct from functions that search for posts or list user-specific content. |
15
+ | `linkedin_search_people` | Performs a paginated search for people on LinkedIn, distinct from searches for companies or jobs. It filters results using keywords, location, industry, and company, internally converting filter names like 'United States' into their required API IDs before making the request. |
16
+ | `linkedin_search_companies` | Executes a paginated LinkedIn search for companies, filtering by optional keywords, location, and industry. Unlike `linkedin_search_people` or `linkedin_search_jobs`, this function specifically sets the API search category to 'companies' to ensure that only company profiles are returned in the search results. |
17
+ | `linkedin_search_posts` | Performs a keyword-based search for LinkedIn posts, allowing results to be filtered by date and sorted by relevance. This function specifically queries the 'posts' category, distinguishing it from other search methods in the class that target people, companies, or jobs, and returns relevant content. |
18
+ | `linkedin_search_jobs` | Executes a LinkedIn search specifically for job listings using keywords and filters like region, industry, and minimum salary. Unlike other search functions targeting people or companies, this is specialized for job listings and converts friendly filter names (e.g., "United States") into their required API IDs. |