universal-mcp-applications 0.1.24__tar.gz → 0.1.26__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.24 → universal_mcp_applications-0.1.26}/PKG-INFO +1 -1
  2. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/bump_and_release.sh +3 -4
  3. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/pyproject.toml +1 -1
  4. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/google_docs/app.py +152 -18
  5. universal_mcp_applications-0.1.26/src/universal_mcp/applications/outlook/app.py +524 -0
  6. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/reddit/app.py +30 -47
  7. universal_mcp_applications-0.1.26/test.py +56 -0
  8. universal_mcp_applications-0.1.26/uv.lock +5765 -0
  9. universal_mcp_applications-0.1.24/src/universal_mcp/applications/outlook/app.py +0 -442
  10. universal_mcp_applications-0.1.24/test.py +0 -71
  11. universal_mcp_applications-0.1.24/uv.lock +0 -5150
  12. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/.gitignore +0 -0
  13. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/GEMINI.md +0 -0
  14. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/LICENSE +0 -0
  15. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/README.md +0 -0
  16. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/scripts/docgen.py +0 -0
  17. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/scripts/prompts.py +0 -0
  18. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/scripts/readme.py +0 -0
  19. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/scripts/run_docgen.py +0 -0
  20. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/tests/test_applications.py +0 -0
  21. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/BEST_PRACTICES.md +0 -0
  22. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/ahrefs/README.md +0 -0
  23. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/ahrefs/__init__.py +0 -0
  24. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/ahrefs/app.py +0 -0
  25. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/airtable/README.md +0 -0
  26. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/airtable/__init__.py +0 -0
  27. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/airtable/app.py +0 -0
  28. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/apollo/README.md +0 -0
  29. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/apollo/__init__.py +0 -0
  30. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/apollo/app.py +0 -0
  31. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/asana/README.md +0 -0
  32. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/asana/__init__.py +0 -0
  33. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/asana/app.py +0 -0
  34. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/aws_s3/README.md +0 -0
  35. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/aws_s3/__init__.py +0 -0
  36. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/aws_s3/app.py +0 -0
  37. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/bill/README.md +0 -0
  38. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/bill/__init__.py +0 -0
  39. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/bill/app.py +0 -0
  40. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/box/README.md +0 -0
  41. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/box/__init__.py +0 -0
  42. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/box/app.py +0 -0
  43. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/braze/README.md +0 -0
  44. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/braze/__init__.py +0 -0
  45. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/braze/app.py +0 -0
  46. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/browser_use/README.md +0 -0
  47. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/browser_use/__init__.py +0 -0
  48. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/browser_use/app.py +0 -0
  49. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/cal_com_v2/README.md +0 -0
  50. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/cal_com_v2/__init__.py +0 -0
  51. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/cal_com_v2/app.py +0 -0
  52. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/calendly/README.md +0 -0
  53. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/calendly/__init__.py +0 -0
  54. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/calendly/app.py +0 -0
  55. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/canva/README.md +0 -0
  56. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/canva/__init__.py +0 -0
  57. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/canva/app.py +0 -0
  58. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/clickup/README.md +0 -0
  59. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/clickup/__init__.py +0 -0
  60. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/clickup/app.py +0 -0
  61. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/coda/README.md +0 -0
  62. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/coda/__init__.py +0 -0
  63. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/coda/app.py +0 -0
  64. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/confluence/README.md +0 -0
  65. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/confluence/__init__.py +0 -0
  66. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/confluence/app.py +0 -0
  67. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/contentful/README.md +0 -0
  68. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/contentful/__init__.py +0 -0
  69. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/contentful/app.py +0 -0
  70. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/crustdata/README.md +0 -0
  71. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/crustdata/__init__.py +0 -0
  72. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/crustdata/app.py +0 -0
  73. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/dialpad/README.md +0 -0
  74. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/dialpad/__init__.py +0 -0
  75. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/dialpad/app.py +0 -0
  76. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/digitalocean/README.md +0 -0
  77. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/digitalocean/__init__.py +0 -0
  78. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/digitalocean/app.py +0 -0
  79. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/domain_checker/README.md +0 -0
  80. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/domain_checker/__init__.py +0 -0
  81. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/domain_checker/app.py +0 -0
  82. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/e2b/README.md +0 -0
  83. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/e2b/__init__.py +0 -0
  84. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/e2b/app.py +0 -0
  85. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/elevenlabs/README.md +0 -0
  86. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/elevenlabs/__init__.py +0 -0
  87. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/elevenlabs/app.py +0 -0
  88. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/exa/README.md +0 -0
  89. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/exa/__init__.py +0 -0
  90. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/exa/app.py +0 -0
  91. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/falai/README.md +0 -0
  92. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/falai/__init__.py +0 -0
  93. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/falai/app.py +0 -0
  94. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/figma/README.md +0 -0
  95. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/figma/__init__.py +0 -0
  96. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/figma/app.py +0 -0
  97. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/file_system/README.md +0 -0
  98. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/file_system/__init__.py +0 -0
  99. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/file_system/app.py +0 -0
  100. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/firecrawl/README.md +0 -0
  101. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/firecrawl/__init__.py +0 -0
  102. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/firecrawl/app.py +0 -0
  103. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/fireflies/README.md +0 -0
  104. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/fireflies/__init__.py +0 -0
  105. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/fireflies/app.py +0 -0
  106. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/fpl/README.md +0 -0
  107. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/fpl/__init__.py +0 -0
  108. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/fpl/app.py +0 -0
  109. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/fpl/utils/api.py +0 -0
  110. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/fpl/utils/fixtures.py +0 -0
  111. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/fpl/utils/helper.py +0 -0
  112. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/fpl/utils/league_utils.py +0 -0
  113. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/fpl/utils/position_utils.py +0 -0
  114. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/ghost_content/README.md +0 -0
  115. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/ghost_content/__init__.py +0 -0
  116. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/ghost_content/app.py +0 -0
  117. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/github/README.md +0 -0
  118. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/github/__init__.py +0 -0
  119. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/github/app.py +0 -0
  120. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/gong/README.md +0 -0
  121. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/gong/__init__.py +0 -0
  122. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/gong/app.py +0 -0
  123. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/google_calendar/README.md +0 -0
  124. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/google_calendar/__init__.py +0 -0
  125. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/google_calendar/app.py +0 -0
  126. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/google_docs/README.md +0 -0
  127. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/google_docs/__init__.py +0 -0
  128. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/google_drive/README.md +0 -0
  129. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/google_drive/__init__.py +0 -0
  130. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/google_drive/app.py +0 -0
  131. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/google_gemini/README.md +0 -0
  132. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/google_gemini/__init__.py +0 -0
  133. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/google_gemini/app.py +0 -0
  134. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/google_mail/README.md +0 -0
  135. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/google_mail/__init__.py +0 -0
  136. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/google_mail/app.py +0 -0
  137. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/google_searchconsole/README.md +0 -0
  138. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/google_searchconsole/__init__.py +0 -0
  139. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/google_searchconsole/app.py +0 -0
  140. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/google_sheet/README.md +0 -0
  141. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/google_sheet/__init__.py +0 -0
  142. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/google_sheet/app.py +0 -0
  143. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/google_sheet/helper.py +0 -0
  144. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/hashnode/README.md +0 -0
  145. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/hashnode/__init__.py +0 -0
  146. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/hashnode/app.py +0 -0
  147. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/heygen/README.md +0 -0
  148. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/heygen/__init__.py +0 -0
  149. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/heygen/app.py +0 -0
  150. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/http_tools/README.md +0 -0
  151. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/http_tools/__init__.py +0 -0
  152. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/http_tools/app.py +0 -0
  153. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/hubspot/README.md +0 -0
  154. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/hubspot/__init__.py +0 -0
  155. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/hubspot/api_segments/__init__.py +0 -0
  156. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/hubspot/api_segments/api_segment_base.py +0 -0
  157. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/hubspot/api_segments/crm_api.py +0 -0
  158. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/hubspot/api_segments/marketing_api.py +0 -0
  159. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/hubspot/app.py +0 -0
  160. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/jira/README.md +0 -0
  161. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/jira/__init__.py +0 -0
  162. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/jira/app.py +0 -0
  163. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/klaviyo/README.md +0 -0
  164. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/klaviyo/__init__.py +0 -0
  165. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/klaviyo/app.py +0 -0
  166. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/linkedin/README.md +0 -0
  167. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/linkedin/__init__.py +0 -0
  168. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/linkedin/app.py +0 -0
  169. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/mailchimp/README.md +0 -0
  170. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/mailchimp/__init__.py +0 -0
  171. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/mailchimp/app.py +0 -0
  172. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/markitdown/README.md +0 -0
  173. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/markitdown/__init__.py +0 -0
  174. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/markitdown/app.py +0 -0
  175. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/miro/README.md +0 -0
  176. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/miro/__init__.py +0 -0
  177. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/miro/app.py +0 -0
  178. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/ms_teams/README.md +0 -0
  179. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/ms_teams/__init__.py +0 -0
  180. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/ms_teams/app.py +0 -0
  181. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/neon/README.md +0 -0
  182. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/neon/__init__.py +0 -0
  183. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/neon/app.py +0 -0
  184. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/notion/README.md +0 -0
  185. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/notion/__init__.py +0 -0
  186. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/notion/app.py +0 -0
  187. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/openai/README.md +0 -0
  188. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/openai/__init__.py +0 -0
  189. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/openai/app.py +0 -0
  190. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/outlook/README.md +0 -0
  191. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/outlook/__init__.py +0 -0
  192. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/perplexity/README.md +0 -0
  193. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/perplexity/__init__.py +0 -0
  194. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/perplexity/app.py +0 -0
  195. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/pipedrive/README.md +0 -0
  196. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/pipedrive/__init__.py +0 -0
  197. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/pipedrive/app.py +0 -0
  198. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/posthog/README.md +0 -0
  199. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/posthog/__init__.py +0 -0
  200. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/posthog/app.py +0 -0
  201. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/reddit/README.md +0 -0
  202. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/reddit/__init__.py +0 -0
  203. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/resend/README.md +0 -0
  204. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/resend/__init__.py +0 -0
  205. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/resend/app.py +0 -0
  206. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/retell/README.md +0 -0
  207. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/retell/__init__.py +0 -0
  208. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/retell/app.py +0 -0
  209. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/rocketlane/README.md +0 -0
  210. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/rocketlane/__init__.py +0 -0
  211. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/rocketlane/app.py +0 -0
  212. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/scraper/README.md +0 -0
  213. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/scraper/__init__.py +0 -0
  214. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/scraper/app.py +0 -0
  215. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/semanticscholar/README.md +0 -0
  216. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/semanticscholar/__init__.py +0 -0
  217. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/semanticscholar/app.py +0 -0
  218. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/semrush/README.md +0 -0
  219. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/semrush/__init__.py +0 -0
  220. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/semrush/app.py +0 -0
  221. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/sendgrid/README.md +0 -0
  222. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/sendgrid/__init__.py +0 -0
  223. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/sendgrid/app.py +0 -0
  224. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/sentry/README.md +0 -0
  225. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/sentry/__init__.py +0 -0
  226. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/sentry/app.py +0 -0
  227. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/serpapi/README.md +0 -0
  228. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/serpapi/__init__.py +0 -0
  229. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/serpapi/app.py +0 -0
  230. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/sharepoint/README.md +0 -0
  231. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/sharepoint/__init__.py +0 -0
  232. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/sharepoint/app.py +0 -0
  233. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/shopify/README.md +0 -0
  234. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/shopify/__init__.py +0 -0
  235. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/shopify/app.py +0 -0
  236. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/shortcut/README.md +0 -0
  237. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/shortcut/__init__.py +0 -0
  238. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/shortcut/app.py +0 -0
  239. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/slack/README.md +0 -0
  240. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/slack/__init__.py +0 -0
  241. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/slack/app.py +0 -0
  242. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/spotify/README.md +0 -0
  243. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/spotify/__init__.py +0 -0
  244. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/spotify/app.py +0 -0
  245. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/supabase/README.md +0 -0
  246. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/supabase/__init__.py +0 -0
  247. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/supabase/app.py +0 -0
  248. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/tavily/README.md +0 -0
  249. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/tavily/__init__.py +0 -0
  250. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/tavily/app.py +0 -0
  251. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/trello/README.md +0 -0
  252. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/trello/__init__.py +0 -0
  253. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/trello/app.py +0 -0
  254. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/twilio/README.md +0 -0
  255. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/twilio/__init__.py +0 -0
  256. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/twilio/app.py +0 -0
  257. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/twitter/README.md +0 -0
  258. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/twitter/__init__.py +0 -0
  259. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/twitter/api_segments/__init__.py +0 -0
  260. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/twitter/api_segments/api_segment_base.py +0 -0
  261. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/twitter/api_segments/compliance_api.py +0 -0
  262. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/twitter/api_segments/dm_conversations_api.py +0 -0
  263. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/twitter/api_segments/dm_events_api.py +0 -0
  264. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/twitter/api_segments/likes_api.py +0 -0
  265. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/twitter/api_segments/lists_api.py +0 -0
  266. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/twitter/api_segments/openapi_json_api.py +0 -0
  267. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/twitter/api_segments/spaces_api.py +0 -0
  268. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/twitter/api_segments/trends_api.py +0 -0
  269. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/twitter/api_segments/tweets_api.py +0 -0
  270. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/twitter/api_segments/usage_api.py +0 -0
  271. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/twitter/api_segments/users_api.py +0 -0
  272. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/twitter/app.py +0 -0
  273. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/unipile/README.md +0 -0
  274. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/unipile/__init__.py +0 -0
  275. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/unipile/app.py +0 -0
  276. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/whatsapp/README.md +0 -0
  277. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/whatsapp/__init__.py +0 -0
  278. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/whatsapp/app.py +0 -0
  279. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/whatsapp/audio.py +0 -0
  280. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/whatsapp/whatsapp.py +0 -0
  281. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/whatsapp_business/README.md +0 -0
  282. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/whatsapp_business/__init__.py +0 -0
  283. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/whatsapp_business/app.py +0 -0
  284. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/wrike/README.md +0 -0
  285. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/wrike/__init__.py +0 -0
  286. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/wrike/app.py +0 -0
  287. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/yahoo_finance/README.md +0 -0
  288. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/yahoo_finance/__init__.py +0 -0
  289. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/yahoo_finance/app.py +0 -0
  290. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/youtube/README.md +0 -0
  291. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/youtube/__init__.py +0 -0
  292. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/youtube/app.py +0 -0
  293. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/zenquotes/README.md +0 -0
  294. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/src/universal_mcp/applications/zenquotes/__init__.py +0 -0
  295. {universal_mcp_applications-0.1.24 → universal_mcp_applications-0.1.26}/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.24
3
+ Version: 0.1.26
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
@@ -20,9 +20,8 @@ BRANCH=$(git branch --show-current)
20
20
  CURRENT_VERSION=$(grep -E '^version = "[0-9]+\.[0-9]+\.[0-9]+.*"' pyproject.toml | cut -d'"' -f2)
21
21
 
22
22
  # Split version into major, minor, patch
23
- MAJOR=$(echo "$CURRENT_VERSION" | cut -d'.' -f1)
24
- MINOR=$(echo "$CURRENT_VERSION" | cut -d'.' -f2)
25
- PATCH=$(echo "$CURRENT_VERSION" | cut -d'.' -f3)
23
+ IFS='.' read -r MAJOR MINOR PATCH <<< "$CURRENT_VERSION"
24
+
26
25
  # Remove any rc suffix from PATCH if it exists
27
26
  PATCH_NUM=$(echo $PATCH | sed 's/-rc[0-9]*//')
28
27
 
@@ -51,7 +50,7 @@ else
51
50
  fi
52
51
 
53
52
  # Update version in pyproject.toml
54
- sed -i "s/^version = \".*\"/version = \"$NEW_VERSION\"/" pyproject.toml
53
+ sed -i '' "s/^version = ".*"/version = \"$NEW_VERSION\"/" pyproject.toml
55
54
 
56
55
  echo "Version bumped from $CURRENT_VERSION to $NEW_VERSION"
57
56
 
@@ -6,7 +6,7 @@ build-backend = "hatchling.build"
6
6
 
7
7
  [project]
8
8
  name = "universal-mcp-applications"
9
- version = "0.1.24"
9
+ version = "0.1.26"
10
10
  description = "A Universal MCP Application: universal_mcp_applications"
11
11
  readme = "README.md"
12
12
  requires-python = ">=3.11"
@@ -55,37 +55,171 @@ class GoogleDocsApp(APIApplication):
55
55
 
56
56
  def get_document_content(self, document_id: str) -> dict[str, Any]:
57
57
  """
58
- Retrieves a document's raw data via `get_document`, then parses the complex JSON to extract and concatenate all plain text from its body. This function returns a simplified dictionary containing only the title and the clean, concatenated text content, distinct from `get_document`'s full metadata response.
59
-
58
+ Retrieves and converts a Google Docs document into Markdown-formatted content.
59
+
60
+ This method calls the Google Docs API via `get_document`, then parses the document structure
61
+ to extract paragraphs, headings, lists, tables, images, equations, footnotes, and horizontal rules.
62
+ The final result is a clean Markdown string that closely mirrors the layout and content of
63
+ the original document, including support for nested lists and multi-row tables.
64
+
60
65
  Args:
61
- document_id: The unique identifier of the Google Document to retrieve.
62
-
66
+ document_id (str): The unique ID of the Google Document to retrieve.
67
+
63
68
  Returns:
64
- A dictionary containing the document's title under the key 'title' and the concatenated plain text content under the key 'content'.
65
-
66
- Raises:
67
- KeyError: If the response structure from get_document is missing expected keys such as 'body' or 'content', a KeyError may be raised during extraction.
68
- Exception: Any exception raised by the underlying get_document call, such as network errors or API issues, will propagate.
69
-
69
+ dict[str, Any]: A dictionary with the following keys:
70
+ - 'title' (str): The document's title.
71
+ - 'content' (str): The document content converted to Markdown.
72
+ Markdown Output Supports:
73
+ - Paragraphs and line breaks
74
+ - Headings (Heading 1-6)
75
+ - Bulleted and numbered lists (with nesting)
76
+ - Tables (converted to Markdown tables)
77
+ - Inline images (`![](URL)` format)
78
+ - Equations (LaTeX-style `$...$`)
79
+ - Footnotes (`[^1]` references and notes at the end)
80
+ - Horizontal rules (`---`)
81
+
70
82
  Tags:
71
- retrieve, document, text-processing, parsing, important
83
+ google-docs, markdown, document-parsing, text-extraction, conversion, structured-data
72
84
  """
85
+ import re
86
+
73
87
  response = self.get_document(document_id)
74
88
  title = response.get("title", "")
75
- text_chunks: list[str] = []
76
89
  body_content = response.get("body", {}).get("content", [])
90
+ inline_objects = response.get("inlineObjects", {})
91
+ lists = response.get("lists", {})
92
+ footnotes_data = response.get("footnotes", {})
93
+
94
+ text_chunks: list[str] = []
95
+ footnotes: dict[str, str] = {}
96
+ footnote_index: dict[str, int] = {}
97
+ current_list_counters: dict[str, int] = {}
98
+
99
+ def extract_text_from_paragraph(paragraph: dict) -> str:
100
+ """Extracts paragraph text with inline formatting."""
101
+ text = ""
102
+ for elem in paragraph.get("elements", []):
103
+ if "textRun" in elem:
104
+ content = elem["textRun"].get("content", "")
105
+ text += content
106
+ elif "inlineObjectElement" in elem:
107
+ obj_id = elem["inlineObjectElement"]["inlineObjectId"]
108
+ obj = inline_objects.get(obj_id, {})
109
+ embed = obj.get("inlineObjectProperties", {}).get("embeddedObject", {})
110
+ image_source = embed.get("imageProperties", {}).get("contentUri", "")
111
+ if image_source:
112
+ text += f"\n\n![]({image_source})\n\n"
113
+ return text
114
+
115
+ def extract_table(table: dict) -> str:
116
+ rows = []
117
+ for i, row in enumerate(table.get("tableRows", [])):
118
+ cells = []
119
+ for cell in row.get("tableCells", []):
120
+ cell_text = ""
121
+ for content in cell.get("content", []):
122
+ if "paragraph" in content:
123
+ cell_text += extract_text_from_paragraph(content["paragraph"]).strip()
124
+ cells.append(cell_text)
125
+ row_line = "| " + " | ".join(cells) + " |"
126
+ rows.append(row_line)
127
+ if i == 0:
128
+ rows.insert(1, "| " + " | ".join(["---"] * len(cells)) + " |")
129
+ return "\n".join(rows)
130
+
131
+ def extract_heading_style(paragraph: dict) -> str:
132
+ """Returns appropriate Markdown heading level."""
133
+ style = paragraph.get("paragraphStyle", {})
134
+ heading = style.get("namedStyleType", "")
135
+ match = re.match(r"HEADING_(\d)", heading)
136
+ if match:
137
+ level = int(match.group(1))
138
+ return "#" * level
139
+ return ""
140
+
141
+ def extract_list_prefix(paragraph: dict) -> str:
142
+ """Generates proper list prefix (numbered or bullet)."""
143
+ list_id = paragraph.get("bullet", {}).get("listId")
144
+ if not list_id:
145
+ return ""
146
+ glyph = paragraph["bullet"].get("glyph", None)
147
+ nesting = paragraph["bullet"].get("nestingLevel", 0)
148
+ list_info = lists.get(list_id, {})
149
+ list_type = list_info.get("listProperties", {}).get("nestingLevels", [{}])[nesting].get("glyphType")
150
+
151
+ indent = " " * nesting
152
+ if list_type and "DECIMAL" in list_type:
153
+ current_list_counters[list_id] = current_list_counters.get(list_id, 1)
154
+ prefix = f"{current_list_counters[list_id]}. "
155
+ current_list_counters[list_id] += 1
156
+ else:
157
+ prefix = "- "
158
+ return indent + prefix
159
+
160
+ def extract_equation(paragraph: dict) -> str:
161
+ return "\n\n$" + paragraph.get("equation", {}).get("equation", "") + "$\n\n"
162
+
163
+ def extract_footnote_ref(footnote_id: str) -> str:
164
+ if footnote_id not in footnote_index:
165
+ footnote_index[footnote_id] = len(footnotes) + 1
166
+ fn_content = footnotes_data.get(footnote_id, {}).get("content", [])
167
+ fn_text = ""
168
+ for item in fn_content:
169
+ if "paragraph" in item:
170
+ fn_text += extract_text_from_paragraph(item["paragraph"]).strip()
171
+ footnotes[footnote_id] = fn_text
172
+ return f"[^{footnote_index[footnote_id]}]"
173
+
77
174
  for element in body_content:
78
175
  if "paragraph" in element:
79
- for para_elem in element["paragraph"].get("elements", []):
80
- text_run = para_elem.get("textRun")
81
- if text_run and "content" in text_run:
82
- text_chunks.append(text_run["content"])
83
- content = "".join(text_chunks).strip()
176
+ para = element["paragraph"]
177
+ if "equation" in para:
178
+ text_chunks.append(extract_equation(para))
179
+ continue
180
+
181
+ heading_md = extract_heading_style(para)
182
+ list_prefix = extract_list_prefix(para)
183
+
184
+ para_text = extract_text_from_paragraph(para).strip()
185
+ if para_text:
186
+ if heading_md:
187
+ text_chunks.append(f"{heading_md} {para_text}")
188
+ elif list_prefix:
189
+ text_chunks.append(f"{list_prefix}{para_text}")
190
+ else:
191
+ text_chunks.append(para_text)
192
+
193
+ elif "table" in element:
194
+ table_md = extract_table(element["table"])
195
+ text_chunks.append(table_md)
196
+
197
+ elif "horizontalRule" in element:
198
+ text_chunks.append("\n---\n")
199
+
200
+ elif "tableOfContents" in element:
201
+ text_chunks.append("<!-- Table of Contents -->")
202
+
203
+ # Handle footnote references (inline elements)
204
+ elif "footnoteReference" in element:
205
+ footnote_id = element["footnoteReference"]["footnoteId"]
206
+ ref = extract_footnote_ref(footnote_id)
207
+ text_chunks.append(ref)
208
+
209
+ # Append footnotes at the end
210
+ if footnotes:
211
+ text_chunks.append("\n## Footnotes\n")
212
+ for fid, index in sorted(footnote_index.items(), key=lambda x: x[1]):
213
+ text_chunks.append(f"[^{index}]: {footnotes[fid]}")
214
+
215
+ content = "\n\n".join(chunk.strip() for chunk in text_chunks if chunk.strip())
216
+
84
217
  return {
85
218
  "title": title,
86
- "content": content,
219
+ "content": content
87
220
  }
88
221
 
222
+
89
223
  def insert_text(
90
224
  self, document_id: str, content: str, index: int = 1
91
225
  ) -> dict[str, Any]: