universal-mcp 0.1.13rc1__tar.gz → 0.1.13rc3__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (153) hide show
  1. {universal_mcp-0.1.13rc1 → universal_mcp-0.1.13rc3}/PKG-INFO +40 -1
  2. universal_mcp-0.1.13rc3/pyproject.toml +241 -0
  3. {universal_mcp-0.1.13rc1 → universal_mcp-0.1.13rc3}/src/playground/agents/react.py +1 -1
  4. {universal_mcp-0.1.13rc1 → universal_mcp-0.1.13rc3}/src/playground/streamlit.py +0 -1
  5. {universal_mcp-0.1.13rc1 → universal_mcp-0.1.13rc3}/src/tests/test_applications.py +3 -2
  6. {universal_mcp-0.1.13rc1 → universal_mcp-0.1.13rc3}/src/universal_mcp/utils/installation.py +8 -8
  7. universal_mcp-0.1.13rc1/pyproject.toml +0 -161
  8. universal_mcp-0.1.13rc1/src/universal_mcp/applications/ahrefs/README.md +0 -76
  9. universal_mcp-0.1.13rc1/src/universal_mcp/applications/ahrefs/__init__.py +0 -0
  10. universal_mcp-0.1.13rc1/src/universal_mcp/applications/ahrefs/app.py +0 -2291
  11. universal_mcp-0.1.13rc1/src/universal_mcp/applications/cal_com_v2/README.md +0 -175
  12. universal_mcp-0.1.13rc1/src/universal_mcp/applications/cal_com_v2/__init__.py +0 -0
  13. universal_mcp-0.1.13rc1/src/universal_mcp/applications/cal_com_v2/app.py +0 -5390
  14. universal_mcp-0.1.13rc1/src/universal_mcp/applications/calendly/README.md +0 -78
  15. universal_mcp-0.1.13rc1/src/universal_mcp/applications/calendly/__init__.py +0 -0
  16. universal_mcp-0.1.13rc1/src/universal_mcp/applications/calendly/app.py +0 -1195
  17. universal_mcp-0.1.13rc1/src/universal_mcp/applications/clickup/README.md +0 -160
  18. universal_mcp-0.1.13rc1/src/universal_mcp/applications/clickup/__init__.py +0 -0
  19. universal_mcp-0.1.13rc1/src/universal_mcp/applications/clickup/app.py +0 -5009
  20. universal_mcp-0.1.13rc1/src/universal_mcp/applications/coda/README.md +0 -133
  21. universal_mcp-0.1.13rc1/src/universal_mcp/applications/coda/__init__.py +0 -0
  22. universal_mcp-0.1.13rc1/src/universal_mcp/applications/coda/app.py +0 -3671
  23. universal_mcp-0.1.13rc1/src/universal_mcp/applications/curstdata/README.md +0 -50
  24. universal_mcp-0.1.13rc1/src/universal_mcp/applications/curstdata/__init__.py +0 -0
  25. universal_mcp-0.1.13rc1/src/universal_mcp/applications/curstdata/app.py +0 -551
  26. universal_mcp-0.1.13rc1/src/universal_mcp/applications/e2b/README.md +0 -37
  27. universal_mcp-0.1.13rc1/src/universal_mcp/applications/e2b/app.py +0 -65
  28. universal_mcp-0.1.13rc1/src/universal_mcp/applications/elevenlabs/README.md +0 -84
  29. universal_mcp-0.1.13rc1/src/universal_mcp/applications/elevenlabs/__init__.py +0 -0
  30. universal_mcp-0.1.13rc1/src/universal_mcp/applications/elevenlabs/app.py +0 -1402
  31. universal_mcp-0.1.13rc1/src/universal_mcp/applications/falai/README.md +0 -42
  32. universal_mcp-0.1.13rc1/src/universal_mcp/applications/falai/__init__.py +0 -0
  33. universal_mcp-0.1.13rc1/src/universal_mcp/applications/falai/app.py +0 -332
  34. universal_mcp-0.1.13rc1/src/universal_mcp/applications/figma/README.md +0 -74
  35. universal_mcp-0.1.13rc1/src/universal_mcp/applications/figma/__init__.py +0 -0
  36. universal_mcp-0.1.13rc1/src/universal_mcp/applications/figma/app.py +0 -1261
  37. universal_mcp-0.1.13rc1/src/universal_mcp/applications/firecrawl/README.md +0 -45
  38. universal_mcp-0.1.13rc1/src/universal_mcp/applications/firecrawl/app.py +0 -268
  39. universal_mcp-0.1.13rc1/src/universal_mcp/applications/github/README.md +0 -47
  40. universal_mcp-0.1.13rc1/src/universal_mcp/applications/github/app.py +0 -429
  41. universal_mcp-0.1.13rc1/src/universal_mcp/applications/gong/README.md +0 -88
  42. universal_mcp-0.1.13rc1/src/universal_mcp/applications/gong/__init__.py +0 -0
  43. universal_mcp-0.1.13rc1/src/universal_mcp/applications/gong/app.py +0 -2297
  44. universal_mcp-0.1.13rc1/src/universal_mcp/applications/google_calendar/app.py +0 -442
  45. universal_mcp-0.1.13rc1/src/universal_mcp/applications/google_docs/README.md +0 -40
  46. universal_mcp-0.1.13rc1/src/universal_mcp/applications/google_docs/app.py +0 -88
  47. universal_mcp-0.1.13rc1/src/universal_mcp/applications/google_drive/README.md +0 -44
  48. universal_mcp-0.1.13rc1/src/universal_mcp/applications/google_drive/app.py +0 -286
  49. universal_mcp-0.1.13rc1/src/universal_mcp/applications/google_mail/README.md +0 -47
  50. universal_mcp-0.1.13rc1/src/universal_mcp/applications/google_mail/app.py +0 -664
  51. universal_mcp-0.1.13rc1/src/universal_mcp/applications/google_sheet/README.md +0 -42
  52. universal_mcp-0.1.13rc1/src/universal_mcp/applications/google_sheet/app.py +0 -150
  53. universal_mcp-0.1.13rc1/src/universal_mcp/applications/heygen/README.md +0 -69
  54. universal_mcp-0.1.13rc1/src/universal_mcp/applications/heygen/__init__.py +0 -0
  55. universal_mcp-0.1.13rc1/src/universal_mcp/applications/heygen/app.py +0 -956
  56. universal_mcp-0.1.13rc1/src/universal_mcp/applications/mailchimp/README.md +0 -306
  57. universal_mcp-0.1.13rc1/src/universal_mcp/applications/mailchimp/__init__.py +0 -0
  58. universal_mcp-0.1.13rc1/src/universal_mcp/applications/mailchimp/app.py +0 -10937
  59. universal_mcp-0.1.13rc1/src/universal_mcp/applications/markitdown/app.py +0 -44
  60. universal_mcp-0.1.13rc1/src/universal_mcp/applications/neon/README.md +0 -99
  61. universal_mcp-0.1.13rc1/src/universal_mcp/applications/neon/__init__.py +0 -0
  62. universal_mcp-0.1.13rc1/src/universal_mcp/applications/neon/app.py +0 -1924
  63. universal_mcp-0.1.13rc1/src/universal_mcp/applications/notion/README.md +0 -55
  64. universal_mcp-0.1.13rc1/src/universal_mcp/applications/notion/__init__.py +0 -0
  65. universal_mcp-0.1.13rc1/src/universal_mcp/applications/notion/app.py +0 -527
  66. universal_mcp-0.1.13rc1/src/universal_mcp/applications/perplexity/README.md +0 -37
  67. universal_mcp-0.1.13rc1/src/universal_mcp/applications/perplexity/app.py +0 -65
  68. universal_mcp-0.1.13rc1/src/universal_mcp/applications/reddit/README.md +0 -45
  69. universal_mcp-0.1.13rc1/src/universal_mcp/applications/reddit/app.py +0 -379
  70. universal_mcp-0.1.13rc1/src/universal_mcp/applications/replicate/README.md +0 -65
  71. universal_mcp-0.1.13rc1/src/universal_mcp/applications/replicate/__init__.py +0 -0
  72. universal_mcp-0.1.13rc1/src/universal_mcp/applications/replicate/app.py +0 -980
  73. universal_mcp-0.1.13rc1/src/universal_mcp/applications/resend/README.md +0 -38
  74. universal_mcp-0.1.13rc1/src/universal_mcp/applications/resend/app.py +0 -37
  75. universal_mcp-0.1.13rc1/src/universal_mcp/applications/retell_ai/README.md +0 -46
  76. universal_mcp-0.1.13rc1/src/universal_mcp/applications/retell_ai/__init__.py +0 -0
  77. universal_mcp-0.1.13rc1/src/universal_mcp/applications/retell_ai/app.py +0 -333
  78. universal_mcp-0.1.13rc1/src/universal_mcp/applications/rocketlane/README.md +0 -42
  79. universal_mcp-0.1.13rc1/src/universal_mcp/applications/rocketlane/__init__.py +0 -0
  80. universal_mcp-0.1.13rc1/src/universal_mcp/applications/rocketlane/app.py +0 -194
  81. universal_mcp-0.1.13rc1/src/universal_mcp/applications/serpapi/README.md +0 -37
  82. universal_mcp-0.1.13rc1/src/universal_mcp/applications/serpapi/app.py +0 -73
  83. universal_mcp-0.1.13rc1/src/universal_mcp/applications/shortcut/README.md +0 -153
  84. universal_mcp-0.1.13rc1/src/universal_mcp/applications/shortcut/__init__.py +0 -0
  85. universal_mcp-0.1.13rc1/src/universal_mcp/applications/shortcut/app.py +0 -3880
  86. universal_mcp-0.1.13rc1/src/universal_mcp/applications/spotify/README.md +0 -116
  87. universal_mcp-0.1.13rc1/src/universal_mcp/applications/spotify/__init__.py +0 -0
  88. universal_mcp-0.1.13rc1/src/universal_mcp/applications/spotify/app.py +0 -2526
  89. universal_mcp-0.1.13rc1/src/universal_mcp/applications/supabase/README.md +0 -112
  90. universal_mcp-0.1.13rc1/src/universal_mcp/applications/supabase/__init__.py +0 -0
  91. universal_mcp-0.1.13rc1/src/universal_mcp/applications/supabase/app.py +0 -2970
  92. universal_mcp-0.1.13rc1/src/universal_mcp/applications/tavily/README.md +0 -38
  93. universal_mcp-0.1.13rc1/src/universal_mcp/applications/tavily/app.py +0 -51
  94. universal_mcp-0.1.13rc1/src/universal_mcp/applications/wrike/README.md +0 -71
  95. universal_mcp-0.1.13rc1/src/universal_mcp/applications/wrike/__init__.py +0 -0
  96. universal_mcp-0.1.13rc1/src/universal_mcp/applications/wrike/app.py +0 -1372
  97. universal_mcp-0.1.13rc1/src/universal_mcp/applications/youtube/README.md +0 -82
  98. universal_mcp-0.1.13rc1/src/universal_mcp/applications/youtube/__init__.py +0 -0
  99. universal_mcp-0.1.13rc1/src/universal_mcp/applications/youtube/app.py +0 -1428
  100. universal_mcp-0.1.13rc1/src/universal_mcp/applications/zenquotes/README.md +0 -37
  101. universal_mcp-0.1.13rc1/src/universal_mcp/applications/zenquotes/app.py +0 -31
  102. {universal_mcp-0.1.13rc1 → universal_mcp-0.1.13rc3}/.gitignore +0 -0
  103. {universal_mcp-0.1.13rc1 → universal_mcp-0.1.13rc3}/README.md +0 -0
  104. {universal_mcp-0.1.13rc1 → universal_mcp-0.1.13rc3}/src/playground/README.md +0 -0
  105. {universal_mcp-0.1.13rc1 → universal_mcp-0.1.13rc3}/src/playground/__init__.py +0 -0
  106. {universal_mcp-0.1.13rc1 → universal_mcp-0.1.13rc3}/src/playground/__main__.py +0 -0
  107. {universal_mcp-0.1.13rc1 → universal_mcp-0.1.13rc3}/src/playground/client.py +0 -0
  108. {universal_mcp-0.1.13rc1 → universal_mcp-0.1.13rc3}/src/playground/memory/__init__.py +0 -0
  109. {universal_mcp-0.1.13rc1 → universal_mcp-0.1.13rc3}/src/playground/memory/sqlite.py +0 -0
  110. {universal_mcp-0.1.13rc1 → universal_mcp-0.1.13rc3}/src/playground/schema.py +0 -0
  111. {universal_mcp-0.1.13rc1 → universal_mcp-0.1.13rc3}/src/playground/settings.py +0 -0
  112. {universal_mcp-0.1.13rc1 → universal_mcp-0.1.13rc3}/src/playground/utils.py +0 -0
  113. {universal_mcp-0.1.13rc1 → universal_mcp-0.1.13rc3}/src/tests/__init__.py +0 -0
  114. {universal_mcp-0.1.13rc1 → universal_mcp-0.1.13rc3}/src/tests/conftest.py +0 -0
  115. {universal_mcp-0.1.13rc1 → universal_mcp-0.1.13rc3}/src/tests/test_api_generator.py +0 -0
  116. {universal_mcp-0.1.13rc1 → universal_mcp-0.1.13rc3}/src/tests/test_api_integration.py +0 -0
  117. {universal_mcp-0.1.13rc1 → universal_mcp-0.1.13rc3}/src/tests/test_localserver.py +0 -0
  118. {universal_mcp-0.1.13rc1 → universal_mcp-0.1.13rc3}/src/tests/test_stores.py +0 -0
  119. {universal_mcp-0.1.13rc1 → universal_mcp-0.1.13rc3}/src/tests/test_tool.py +0 -0
  120. {universal_mcp-0.1.13rc1 → universal_mcp-0.1.13rc3}/src/tests/test_zenquotes.py +0 -0
  121. {universal_mcp-0.1.13rc1 → universal_mcp-0.1.13rc3}/src/universal_mcp/__init__.py +0 -0
  122. {universal_mcp-0.1.13rc1 → universal_mcp-0.1.13rc3}/src/universal_mcp/analytics.py +0 -0
  123. {universal_mcp-0.1.13rc1 → universal_mcp-0.1.13rc3}/src/universal_mcp/applications/__init__.py +0 -0
  124. {universal_mcp-0.1.13rc1 → universal_mcp-0.1.13rc3}/src/universal_mcp/applications/application.py +0 -0
  125. {universal_mcp-0.1.13rc1 → universal_mcp-0.1.13rc3}/src/universal_mcp/cli.py +0 -0
  126. {universal_mcp-0.1.13rc1 → universal_mcp-0.1.13rc3}/src/universal_mcp/config.py +0 -0
  127. {universal_mcp-0.1.13rc1 → universal_mcp-0.1.13rc3}/src/universal_mcp/exceptions.py +0 -0
  128. {universal_mcp-0.1.13rc1 → universal_mcp-0.1.13rc3}/src/universal_mcp/integrations/README.md +0 -0
  129. {universal_mcp-0.1.13rc1 → universal_mcp-0.1.13rc3}/src/universal_mcp/integrations/__init__.py +0 -0
  130. {universal_mcp-0.1.13rc1 → universal_mcp-0.1.13rc3}/src/universal_mcp/integrations/integration.py +0 -0
  131. {universal_mcp-0.1.13rc1 → universal_mcp-0.1.13rc3}/src/universal_mcp/logger.py +0 -0
  132. {universal_mcp-0.1.13rc1 → universal_mcp-0.1.13rc3}/src/universal_mcp/py.typed +0 -0
  133. {universal_mcp-0.1.13rc1 → universal_mcp-0.1.13rc3}/src/universal_mcp/servers/README.md +0 -0
  134. {universal_mcp-0.1.13rc1 → universal_mcp-0.1.13rc3}/src/universal_mcp/servers/__init__.py +0 -0
  135. {universal_mcp-0.1.13rc1 → universal_mcp-0.1.13rc3}/src/universal_mcp/servers/server.py +0 -0
  136. {universal_mcp-0.1.13rc1 → universal_mcp-0.1.13rc3}/src/universal_mcp/stores/README.md +0 -0
  137. {universal_mcp-0.1.13rc1 → universal_mcp-0.1.13rc3}/src/universal_mcp/stores/__init__.py +0 -0
  138. {universal_mcp-0.1.13rc1 → universal_mcp-0.1.13rc3}/src/universal_mcp/stores/store.py +0 -0
  139. {universal_mcp-0.1.13rc1 → universal_mcp-0.1.13rc3}/src/universal_mcp/templates/README.md.j2 +0 -0
  140. {universal_mcp-0.1.13rc1 → universal_mcp-0.1.13rc3}/src/universal_mcp/templates/api_client.py.j2 +0 -0
  141. {universal_mcp-0.1.13rc1 → universal_mcp-0.1.13rc3}/src/universal_mcp/tools/README.md +0 -0
  142. {universal_mcp-0.1.13rc1 → universal_mcp-0.1.13rc3}/src/universal_mcp/tools/__init__.py +0 -0
  143. {universal_mcp-0.1.13rc1 → universal_mcp-0.1.13rc3}/src/universal_mcp/tools/adapters.py +0 -0
  144. {universal_mcp-0.1.13rc1 → universal_mcp-0.1.13rc3}/src/universal_mcp/tools/func_metadata.py +0 -0
  145. {universal_mcp-0.1.13rc1 → universal_mcp-0.1.13rc3}/src/universal_mcp/tools/tools.py +0 -0
  146. {universal_mcp-0.1.13rc1 → universal_mcp-0.1.13rc3}/src/universal_mcp/utils/__init__.py +0 -0
  147. {universal_mcp-0.1.13rc1 → universal_mcp-0.1.13rc3}/src/universal_mcp/utils/agentr.py +0 -0
  148. {universal_mcp-0.1.13rc1 → universal_mcp-0.1.13rc3}/src/universal_mcp/utils/api_generator.py +0 -0
  149. {universal_mcp-0.1.13rc1 → universal_mcp-0.1.13rc3}/src/universal_mcp/utils/docgen.py +0 -0
  150. {universal_mcp-0.1.13rc1 → universal_mcp-0.1.13rc3}/src/universal_mcp/utils/docstring_parser.py +0 -0
  151. {universal_mcp-0.1.13rc1 → universal_mcp-0.1.13rc3}/src/universal_mcp/utils/dump_app_tools.py +0 -0
  152. {universal_mcp-0.1.13rc1 → universal_mcp-0.1.13rc3}/src/universal_mcp/utils/openapi.py +0 -0
  153. {universal_mcp-0.1.13rc1 → universal_mcp-0.1.13rc3}/src/universal_mcp/utils/singleton.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: universal-mcp
3
- Version: 0.1.13rc1
3
+ Version: 0.1.13rc3
4
4
  Summary: Universal MCP acts as a middle ware for your API applications. It can store your credentials, authorize, enable disable apps on the fly and much more.
5
5
  Author-email: Manoj Bajaj <manojbajaj95@gmail.com>
6
6
  License: MIT
@@ -31,6 +31,45 @@ Requires-Dist: python-dotenv>=1.0.1; extra == 'all'
31
31
  Requires-Dist: ruff>=0.11.4; extra == 'all'
32
32
  Requires-Dist: streamlit>=1.44.1; extra == 'all'
33
33
  Requires-Dist: watchdog>=6.0.0; extra == 'all'
34
+ Provides-Extra: applications
35
+ Requires-Dist: universal-mcp-ahrefs; extra == 'applications'
36
+ Requires-Dist: universal-mcp-cal-com-v2; extra == 'applications'
37
+ Requires-Dist: universal-mcp-calendly; extra == 'applications'
38
+ Requires-Dist: universal-mcp-clickup; extra == 'applications'
39
+ Requires-Dist: universal-mcp-coda; extra == 'applications'
40
+ Requires-Dist: universal-mcp-crustdata; extra == 'applications'
41
+ Requires-Dist: universal-mcp-e2b; extra == 'applications'
42
+ Requires-Dist: universal-mcp-elevenlabs; extra == 'applications'
43
+ Requires-Dist: universal-mcp-falai; extra == 'applications'
44
+ Requires-Dist: universal-mcp-figma; extra == 'applications'
45
+ Requires-Dist: universal-mcp-firecrawl; extra == 'applications'
46
+ Requires-Dist: universal-mcp-github; extra == 'applications'
47
+ Requires-Dist: universal-mcp-gong; extra == 'applications'
48
+ Requires-Dist: universal-mcp-google-calendar; extra == 'applications'
49
+ Requires-Dist: universal-mcp-google-docs; extra == 'applications'
50
+ Requires-Dist: universal-mcp-google-drive; extra == 'applications'
51
+ Requires-Dist: universal-mcp-google-mail; extra == 'applications'
52
+ Requires-Dist: universal-mcp-google-sheet; extra == 'applications'
53
+ Requires-Dist: universal-mcp-hashnode; extra == 'applications'
54
+ Requires-Dist: universal-mcp-heygen; extra == 'applications'
55
+ Requires-Dist: universal-mcp-mailchimp; extra == 'applications'
56
+ Requires-Dist: universal-mcp-markitdown; extra == 'applications'
57
+ Requires-Dist: universal-mcp-neon; extra == 'applications'
58
+ Requires-Dist: universal-mcp-notion; extra == 'applications'
59
+ Requires-Dist: universal-mcp-perplexity; extra == 'applications'
60
+ Requires-Dist: universal-mcp-reddit; extra == 'applications'
61
+ Requires-Dist: universal-mcp-replicate; extra == 'applications'
62
+ Requires-Dist: universal-mcp-resend; extra == 'applications'
63
+ Requires-Dist: universal-mcp-retell; extra == 'applications'
64
+ Requires-Dist: universal-mcp-rocketlane; extra == 'applications'
65
+ Requires-Dist: universal-mcp-serpapi; extra == 'applications'
66
+ Requires-Dist: universal-mcp-shortcut; extra == 'applications'
67
+ Requires-Dist: universal-mcp-spotify; extra == 'applications'
68
+ Requires-Dist: universal-mcp-supabase; extra == 'applications'
69
+ Requires-Dist: universal-mcp-tavily; extra == 'applications'
70
+ Requires-Dist: universal-mcp-wrike; extra == 'applications'
71
+ Requires-Dist: universal-mcp-youtube; extra == 'applications'
72
+ Requires-Dist: universal-mcp-zenquotes; extra == 'applications'
34
73
  Provides-Extra: dev
35
74
  Requires-Dist: litellm>=1.30.7; extra == 'dev'
36
75
  Requires-Dist: pyright>=1.1.398; extra == 'dev'
@@ -0,0 +1,241 @@
1
+ [project]
2
+ name = "universal-mcp"
3
+ version = "0.1.13-rc3"
4
+ description = "Universal MCP acts as a middle ware for your API applications. It can store your credentials, authorize, enable disable apps on the fly and much more."
5
+ readme = "README.md"
6
+ authors = [
7
+ { name = "Manoj Bajaj", email = "manojbajaj95@gmail.com" }
8
+ ]
9
+ requires-python = ">=3.11"
10
+ license = { text = "MIT" }
11
+ dependencies = [
12
+ "pydantic>=2.11.1",
13
+ "pydantic-settings>=2.8.1",
14
+ "loguru>=0.7.3",
15
+ "pyyaml>=6.0.2",
16
+ "typer>=0.15.2",
17
+ "keyring>=25.6.0",
18
+ "litellm>=1.30.7",
19
+ "rich>=14.0.0",
20
+ "posthog>=3.24.0",
21
+ "mcp>=1.6.0",
22
+ "gql[all]>=3.5.2",
23
+ "cookiecutter>=2.6.0",
24
+ "Jinja2>=3.1.3",
25
+ ]
26
+
27
+ [project.optional-dependencies]
28
+ playground = [
29
+ "langchain-mcp-adapters>=0.0.3",
30
+ "langgraph>=0.3.24",
31
+ "langgraph-checkpoint-sqlite>=2.0.6",
32
+ "streamlit>=1.44.1",
33
+ "python-dotenv>=1.0.1",
34
+ "langchain-openai>=0.3.12",
35
+ "watchdog>=6.0.0",
36
+ ]
37
+ dev = [
38
+ "ruff>=0.11.4",
39
+ "pytest>=8.3.5",
40
+ "pytest-asyncio>=0.26.0",
41
+ "pyright>=1.1.398",
42
+ "litellm>=1.30.7",
43
+ ]
44
+ all = [
45
+ # Playground dependencies
46
+ "langchain-mcp-adapters>=0.0.3",
47
+ "langgraph>=0.3.24",
48
+ "langgraph-checkpoint-sqlite>=2.0.6",
49
+ "streamlit>=1.44.1",
50
+ "python-dotenv>=1.0.1",
51
+ "langchain-openai>=0.3.12",
52
+ "watchdog>=6.0.0",
53
+ # Development dependencies
54
+ "ruff>=0.11.4",
55
+ "pytest>=8.3.5",
56
+ "pytest-asyncio>=0.26.0",
57
+ "pyright>=1.1.398",
58
+ "litellm>=1.30.7",
59
+ ]
60
+ applications = [
61
+ "universal-mcp-ahrefs",
62
+ "universal-mcp-cal-com-v2",
63
+ "universal-mcp-calendly",
64
+ "universal-mcp-clickup",
65
+ "universal-mcp-coda",
66
+ "universal-mcp-crustdata",
67
+ "universal-mcp-e2b",
68
+ "universal-mcp-elevenlabs",
69
+ "universal-mcp-falai",
70
+ "universal-mcp-figma",
71
+ "universal-mcp-firecrawl",
72
+ "universal-mcp-github",
73
+ "universal-mcp-gong",
74
+ "universal-mcp-google-calendar",
75
+ "universal-mcp-google-docs",
76
+ "universal-mcp-google-drive",
77
+ "universal-mcp-google-mail",
78
+ "universal-mcp-google-sheet",
79
+ "universal-mcp-hashnode",
80
+ "universal-mcp-heygen",
81
+ "universal-mcp-mailchimp",
82
+ "universal-mcp-markitdown",
83
+ "universal-mcp-neon",
84
+ "universal-mcp-notion",
85
+ "universal-mcp-perplexity",
86
+ "universal-mcp-reddit",
87
+ "universal-mcp-replicate",
88
+ "universal-mcp-resend",
89
+ "universal-mcp-retell",
90
+ "universal-mcp-rocketlane",
91
+ "universal-mcp-serpapi",
92
+ "universal-mcp-shortcut",
93
+ "universal-mcp-spotify",
94
+ "universal-mcp-supabase",
95
+ "universal-mcp-tavily",
96
+ "universal-mcp-wrike",
97
+ "universal-mcp-youtube",
98
+ "universal-mcp-zenquotes",
99
+ ]
100
+
101
+ [project.scripts]
102
+ universal_mcp = "universal_mcp.cli:app"
103
+
104
+ [build-system]
105
+ requires = ["hatchling"]
106
+ build-backend = "hatchling.build"
107
+
108
+ [tool.hatch.build.targets.sdist]
109
+ include = [
110
+ "/src",
111
+ "/templates", # Important: Include the templates directory!
112
+ ]
113
+ [tool.hatch.build.targets.wheel]
114
+ packages = ["src/universal_mcp"]
115
+ # Ensure templates are included in the wheel data
116
+ [tool.hatch.build.targets.wheel.shared-data]
117
+ "templates" = "universal_mcp/templates"
118
+
119
+ [tool.ruff]
120
+ # Exclude a variety of commonly ignored directories.
121
+ exclude = [
122
+ ".bzr",
123
+ ".direnv",
124
+ ".eggs",
125
+ ".git",
126
+ ".git-rewrite",
127
+ ".hg",
128
+ ".ipynb_checkpoints",
129
+ ".mypy_cache",
130
+ ".nox",
131
+ ".pants.d",
132
+ ".pyenv",
133
+ ".pytest_cache",
134
+ ".pytype",
135
+ ".ruff_cache",
136
+ ".svn",
137
+ ".tox",
138
+ ".venv",
139
+ ".vscode",
140
+ "__pypackages__",
141
+ "_build",
142
+ "buck-out",
143
+ "build",
144
+ "dist",
145
+ "node_modules",
146
+ "site-packages",
147
+ "venv",
148
+ ]
149
+
150
+ # Same as Black.
151
+ line-length = 88
152
+ indent-width = 4
153
+
154
+ # Assume Python 3.12
155
+ target-version = "py312"
156
+
157
+ [tool.ruff.lint]
158
+ # Enable Pyflakes (`F`) and a subset of the pycodestyle (`E`) codes by default.
159
+ # Unlike Flake8, Ruff doesn't enable pycodestyle warnings (`W`) or
160
+ # McCabe complexity (`C901`) by default.
161
+ select = [
162
+ # pycodestyle
163
+ "E",
164
+ # Pyflakes
165
+ "F",
166
+ # pyupgrade
167
+ "UP",
168
+ # flake8-bugbear
169
+ "B",
170
+ # flake8-simplify
171
+ "SIM",
172
+ # isort
173
+ "I",
174
+ ]
175
+ ignore = ['E501', 'B008']
176
+
177
+ # Allow fix for all enabled rules (when `--fix`) is provided.
178
+ fixable = ["ALL"]
179
+ unfixable = []
180
+
181
+ # Allow unused variables when underscore-prefixed.
182
+ dummy-variable-rgx = "^(_+|(_+[a-zA-Z0-9_]*[a-zA-Z0-9]+?))$"
183
+
184
+ [tool.ruff.format]
185
+ # Like Black, use double quotes for strings.
186
+ quote-style = "double"
187
+
188
+ # Like Black, indent with spaces, rather than tabs.
189
+ indent-style = "space"
190
+
191
+ # Like Black, respect magic trailing commas.
192
+ skip-magic-trailing-comma = false
193
+
194
+ # Like Black, automatically detect the appropriate line ending.
195
+ line-ending = "auto"
196
+
197
+ docstring-code-line-length = "dynamic"
198
+
199
+ [tool.pytest.ini_options]
200
+ asyncio_mode = "strict"
201
+ asyncio_default_fixture_loop_scope = "function"
202
+
203
+ [tool.uv.sources]
204
+ universal-mcp-ahrefs = { git = "https://github.com/universal-mcp/ahrefs" }
205
+ universal-mcp-cal-com-v2 = { git = "https://github.com/universal-mcp/cal-com-v2" }
206
+ universal-mcp-calendly = { git = "https://github.com/universal-mcp/calendly" }
207
+ universal-mcp-clickup = { git = "https://github.com/universal-mcp/clickup" }
208
+ universal-mcp-coda = { git = "https://github.com/universal-mcp/coda" }
209
+ universal-mcp-crustdata = { git = "https://github.com/universal-mcp/crustdata" }
210
+ universal-mcp-e2b = { git = "https://github.com/universal-mcp/e2b" }
211
+ universal-mcp-elevenlabs = { git = "https://github.com/universal-mcp/elevenlabs" }
212
+ universal-mcp-falai = { git = "https://github.com/universal-mcp/falai" }
213
+ universal-mcp-figma = { git = "https://github.com/universal-mcp/figma" }
214
+ universal-mcp-firecrawl = { git = "https://github.com/universal-mcp/firecrawl" }
215
+ universal-mcp-github = { git = "https://github.com/universal-mcp/github" }
216
+ universal-mcp-gong = { git = "https://github.com/universal-mcp/gong" }
217
+ universal-mcp-google-calendar = { git = "https://github.com/universal-mcp/google-calendar" }
218
+ universal-mcp-google-docs = { git = "https://github.com/universal-mcp/google-docs" }
219
+ universal-mcp-google-drive = { git = "https://github.com/universal-mcp/google-drive" }
220
+ universal-mcp-google-mail = { git = "https://github.com/universal-mcp/google-mail" }
221
+ universal-mcp-google-sheet = { git = "https://github.com/universal-mcp/google-sheet" }
222
+ universal-mcp-hashnode = { git = "https://github.com/universal-mcp/hashnode" }
223
+ universal-mcp-heygen = { git = "https://github.com/universal-mcp/heygen" }
224
+ universal-mcp-mailchimp = { git = "https://github.com/universal-mcp/mailchimp" }
225
+ universal-mcp-markitdown = { git = "https://github.com/universal-mcp/markitdown" }
226
+ universal-mcp-neon = { git = "https://github.com/universal-mcp/neon" }
227
+ universal-mcp-notion = { git = "https://github.com/universal-mcp/notion" }
228
+ universal-mcp-perplexity = { git = "https://github.com/universal-mcp/perplexity" }
229
+ universal-mcp-reddit = { git = "https://github.com/universal-mcp/reddit" }
230
+ universal-mcp-replicate = { git = "https://github.com/universal-mcp/replicate" }
231
+ universal-mcp-resend = { git = "https://github.com/universal-mcp/resend" }
232
+ universal-mcp-retell = { git = "https://github.com/universal-mcp/retell" }
233
+ universal-mcp-rocketlane = { git = "https://github.com/universal-mcp/rocketlane" }
234
+ universal-mcp-serpapi = { git = "https://github.com/universal-mcp/serpapi" }
235
+ universal-mcp-shortcut = { git = "https://github.com/universal-mcp/shortcut" }
236
+ universal-mcp-spotify = { git = "https://github.com/universal-mcp/spotify" }
237
+ universal-mcp-supabase = { git = "https://github.com/universal-mcp/supabase" }
238
+ universal-mcp-tavily = { git = "https://github.com/universal-mcp/tavily" }
239
+ universal-mcp-wrike = { git = "https://github.com/universal-mcp/wrike" }
240
+ universal-mcp-youtube = { git = "https://github.com/universal-mcp/youtube" }
241
+ universal-mcp-zenquotes = { git = "https://github.com/universal-mcp/zenquotes" }
@@ -12,7 +12,7 @@ async def load_tools():
12
12
  async with MultiServerMCPClient(
13
13
  {
14
14
  "agentr": {
15
- "url": "http://localhost:8000/sse",
15
+ "url": "http://localhost:8005/sse",
16
16
  "transport": "sse",
17
17
  },
18
18
  }
@@ -6,7 +6,6 @@ from collections.abc import AsyncGenerator
6
6
  from pathlib import Path
7
7
 
8
8
  import streamlit as st
9
- from dotenv import load_dotenv
10
9
  from pydantic import ValidationError
11
10
  from streamlit.runtime.scriptrunner import get_script_run_ctx
12
11
 
@@ -10,7 +10,7 @@ from universal_mcp.applications import app_from_slug
10
10
  "app_name",
11
11
  [
12
12
  "ahrefs",
13
- "cal_com_v2",
13
+ "cal-com-v2",
14
14
  "calendly",
15
15
  "clickup",
16
16
  "coda",
@@ -52,10 +52,11 @@ from universal_mcp.applications import app_from_slug
52
52
  def test_application(app_name):
53
53
  app = app_from_slug(app_name)(integration=None)
54
54
  assert app is not None
55
+ assert app.name == app_name
55
56
  tools = app.list_tools()
56
57
  logger.info(f"Tools for {app_name}: {tools}")
57
58
  assert len(tools) > 0
58
59
  assert isinstance(tools[0], Callable)
59
60
  for tool in tools:
60
61
  assert tool.__name__ is not None
61
- assert tool.__doc__ is not None
62
+ assert tool.__doc__ is not None
@@ -61,7 +61,7 @@ def install_claude(api_key: str) -> None:
61
61
  config["mcpServers"] = {}
62
62
  config["mcpServers"]["universal_mcp"] = {
63
63
  "command": get_uvx_path(),
64
- "args": ["universal_mcp[all]@latest", "run"],
64
+ "args": ["universal_mcp[applications]@latest", "run"],
65
65
  "env": {"AGENTR_API_KEY": api_key},
66
66
  }
67
67
  with open(config_path, "w") as f:
@@ -90,7 +90,7 @@ def install_cursor(api_key: str) -> None:
90
90
  config["mcpServers"] = {}
91
91
  config["mcpServers"]["universal_mcp"] = {
92
92
  "command": get_uvx_path(),
93
- "args": ["universal_mcp[all]@latest", "run"],
93
+ "args": ["universal_mcp[applications]@latest", "run"],
94
94
  "env": {"AGENTR_API_KEY": api_key},
95
95
  }
96
96
 
@@ -120,7 +120,7 @@ def install_cline(api_key: str) -> None:
120
120
  config["mcpServers"] = {}
121
121
  config["mcpServers"]["universal_mcp"] = {
122
122
  "command": get_uvx_path(),
123
- "args": ["universal_mcp[all]@latest", "run"],
123
+ "args": ["universal_mcp[applications]@latest", "run"],
124
124
  "env": {"AGENTR_API_KEY": api_key},
125
125
  }
126
126
 
@@ -156,7 +156,7 @@ def install_continue(api_key: str) -> None:
156
156
  config["mcpServers"] = {}
157
157
  config["mcpServers"]["universal_mcp"] = {
158
158
  "command": get_uvx_path(),
159
- "args": ["universal_mcp[all]@latest", "run"],
159
+ "args": ["universal_mcp[applications]@latest", "run"],
160
160
  "env": {"AGENTR_API_KEY": api_key},
161
161
  }
162
162
 
@@ -192,7 +192,7 @@ def install_goose(api_key: str) -> None:
192
192
  config["mcpServers"] = {}
193
193
  config["mcpServers"]["universal_mcp"] = {
194
194
  "command": get_uvx_path(),
195
- "args": ["universal_mcp[all]@latest", "run"],
195
+ "args": ["universal_mcp[applications]@latest", "run"],
196
196
  "env": {"AGENTR_API_KEY": api_key},
197
197
  }
198
198
 
@@ -228,7 +228,7 @@ def install_windsurf(api_key: str) -> None:
228
228
  config["mcpServers"] = {}
229
229
  config["mcpServers"]["universal_mcp"] = {
230
230
  "command": get_uvx_path(),
231
- "args": ["universal_mcp[all]@latest", "run"],
231
+ "args": ["universal_mcp[applications]@latest", "run"],
232
232
  "env": {"AGENTR_API_KEY": api_key},
233
233
  }
234
234
 
@@ -267,7 +267,7 @@ def install_zed(api_key: str) -> None:
267
267
  server.update(
268
268
  {
269
269
  "command": get_uvx_path(),
270
- "args": ["universal_mcp[all]@latest", "run"],
270
+ "args": ["universal_mcp[applications]@latest", "run"],
271
271
  "env": {"AGENTR_API_KEY": api_key},
272
272
  }
273
273
  )
@@ -278,7 +278,7 @@ def install_zed(api_key: str) -> None:
278
278
  {
279
279
  "name": "universal_mcp",
280
280
  "command": get_uvx_path(),
281
- "args": ["universal_mcp[all]@latest", "run"],
281
+ "args": ["universal_mcp[applications]@latest", "run"],
282
282
  "env": {"AGENTR_API_KEY": api_key},
283
283
  }
284
284
  )
@@ -1,161 +0,0 @@
1
- [project]
2
- name = "universal-mcp"
3
- version = "0.1.13-rc1"
4
- description = "Universal MCP acts as a middle ware for your API applications. It can store your credentials, authorize, enable disable apps on the fly and much more."
5
- readme = "README.md"
6
- authors = [
7
- { name = "Manoj Bajaj", email = "manojbajaj95@gmail.com" }
8
- ]
9
- requires-python = ">=3.11"
10
- license = { text = "MIT" }
11
- dependencies = [
12
- "pydantic>=2.11.1",
13
- "pydantic-settings>=2.8.1",
14
- "loguru>=0.7.3",
15
- "pyyaml>=6.0.2",
16
- "typer>=0.15.2",
17
- "keyring>=25.6.0",
18
- "litellm>=1.30.7",
19
- "rich>=14.0.0",
20
- "posthog>=3.24.0",
21
- "mcp>=1.6.0",
22
- "gql[all]>=3.5.2",
23
- "cookiecutter>=2.6.0",
24
- "Jinja2>=3.1.3",
25
- ]
26
-
27
- [project.optional-dependencies]
28
- playground = [
29
- "langchain-mcp-adapters>=0.0.3",
30
- "langgraph>=0.3.24",
31
- "langgraph-checkpoint-sqlite>=2.0.6",
32
- "streamlit>=1.44.1",
33
- "python-dotenv>=1.0.1",
34
- "langchain-openai>=0.3.12",
35
- "watchdog>=6.0.0",
36
- ]
37
- dev = [
38
- "ruff>=0.11.4",
39
- "pytest>=8.3.5",
40
- "pytest-asyncio>=0.26.0",
41
- "pyright>=1.1.398",
42
- "litellm>=1.30.7",
43
- ]
44
- all = [
45
- # Playground dependencies
46
- "langchain-mcp-adapters>=0.0.3",
47
- "langgraph>=0.3.24",
48
- "langgraph-checkpoint-sqlite>=2.0.6",
49
- "streamlit>=1.44.1",
50
- "python-dotenv>=1.0.1",
51
- "langchain-openai>=0.3.12",
52
- "watchdog>=6.0.0",
53
- # Development dependencies
54
- "ruff>=0.11.4",
55
- "pytest>=8.3.5",
56
- "pytest-asyncio>=0.26.0",
57
- "pyright>=1.1.398",
58
- "litellm>=1.30.7",
59
- ]
60
-
61
- [project.scripts]
62
- universal_mcp = "universal_mcp.cli:app"
63
-
64
- [build-system]
65
- requires = ["hatchling"]
66
- build-backend = "hatchling.build"
67
-
68
- [tool.hatch.build.targets.sdist]
69
- include = [
70
- "/src",
71
- "/templates", # Important: Include the templates directory!
72
- ]
73
- [tool.hatch.build.targets.wheel]
74
- packages = ["src/universal_mcp"]
75
- # Ensure templates are included in the wheel data
76
- [tool.hatch.build.targets.wheel.shared-data]
77
- "templates" = "universal_mcp/templates"
78
-
79
- [tool.ruff]
80
- # Exclude a variety of commonly ignored directories.
81
- exclude = [
82
- ".bzr",
83
- ".direnv",
84
- ".eggs",
85
- ".git",
86
- ".git-rewrite",
87
- ".hg",
88
- ".ipynb_checkpoints",
89
- ".mypy_cache",
90
- ".nox",
91
- ".pants.d",
92
- ".pyenv",
93
- ".pytest_cache",
94
- ".pytype",
95
- ".ruff_cache",
96
- ".svn",
97
- ".tox",
98
- ".venv",
99
- ".vscode",
100
- "__pypackages__",
101
- "_build",
102
- "buck-out",
103
- "build",
104
- "dist",
105
- "node_modules",
106
- "site-packages",
107
- "venv",
108
- ]
109
-
110
- # Same as Black.
111
- line-length = 88
112
- indent-width = 4
113
-
114
- # Assume Python 3.12
115
- target-version = "py312"
116
-
117
- [tool.ruff.lint]
118
- # Enable Pyflakes (`F`) and a subset of the pycodestyle (`E`) codes by default.
119
- # Unlike Flake8, Ruff doesn't enable pycodestyle warnings (`W`) or
120
- # McCabe complexity (`C901`) by default.
121
- select = [
122
- # pycodestyle
123
- "E",
124
- # Pyflakes
125
- "F",
126
- # pyupgrade
127
- "UP",
128
- # flake8-bugbear
129
- "B",
130
- # flake8-simplify
131
- "SIM",
132
- # isort
133
- "I",
134
- ]
135
- ignore = ['E501', 'B008']
136
-
137
- # Allow fix for all enabled rules (when `--fix`) is provided.
138
- fixable = ["ALL"]
139
- unfixable = []
140
-
141
- # Allow unused variables when underscore-prefixed.
142
- dummy-variable-rgx = "^(_+|(_+[a-zA-Z0-9_]*[a-zA-Z0-9]+?))$"
143
-
144
- [tool.ruff.format]
145
- # Like Black, use double quotes for strings.
146
- quote-style = "double"
147
-
148
- # Like Black, indent with spaces, rather than tabs.
149
- indent-style = "space"
150
-
151
- # Like Black, respect magic trailing commas.
152
- skip-magic-trailing-comma = false
153
-
154
- # Like Black, automatically detect the appropriate line ending.
155
- line-ending = "auto"
156
-
157
- docstring-code-line-length = "dynamic"
158
-
159
- [tool.pytest.ini_options]
160
- asyncio_mode = "strict"
161
- asyncio_default_fixture_loop_scope = "function"
@@ -1,76 +0,0 @@
1
-
2
- # Ahrefs MCP Server
3
-
4
- An MCP Server for the Ahrefs API.
5
-
6
- ## Supported Integrations
7
-
8
- - AgentR
9
- - API Key (Coming Soon)
10
- - OAuth (Coming Soon)
11
-
12
- ## Tools
13
-
14
- This is automatically generated from OpenAPI schema for the Ahrefs API.
15
-
16
- ## Supported Integrations
17
-
18
- This tool can be integrated with any service that supports HTTP requests.
19
-
20
- ## Tool List
21
-
22
- | Tool | Description |
23
- |------|-------------|
24
- | crawler_ips | Retrieve the list of public crawler IP addresses from the API. |
25
- | crawler_ip_ranges | Fetches the current public crawler IP ranges from the API, optionally specifying output format. |
26
- | limits_and_usage | Retrieves current API subscription limits and usage statistics from the service. |
27
- | batch_analysis | Submits a batch analysis request with specified parameters and returns the analysis results as a dictionary. |
28
- | serp_overview | Retrieves a SERP (Search Engine Results Page) overview report based on specified selection, country, and keyword criteria. |
29
- | overview | Retrieves rank tracking overview data for a specified project, date, and device. |
30
- | competitors_overview | Retrieves an overview of competitor rankings for a specified project and criteria. |
31
- | projects | Retrieves a list of site audit projects from the configured base URL, optionally specifying an output format. |
32
- | domain_rating | Fetches the domain rating and related metrics for a specified target and date. |
33
- | backlinks_stats | Retrieves backlink statistics for a specified target and date, with optional filters for protocol, mode, and output format. |
34
- | outlinks_stats | Retrieves outbound link statistics for the specified target from the site explorer API. |
35
- | metrics | Retrieves metrics data from the site explorer API endpoint. |
36
- | refdomains_history | Retrieves the historical data of reference domains from a specified site. |
37
- | domain_rating_history | Retrieves historical domain rating data for a specified target within a given date range. |
38
- | url_rating_history | Retrieves URL rating history data for a specified target within a date range. |
39
- | pages_history | Retrieves historical page data for a target using specified filters. |
40
- | metrics_history | Retrieves historical metrics based on specified parameters. |
41
- | keywords_history | Fetches the historical keyword rankings and performance data for a specified target within an optional date range and set of filters. |
42
- | metrics_by_country | Fetches site metrics grouped by country for a specified target and date. |
43
- | pages_by_traffic | Retrieves a list of top pages for a specified target domain or URL, ranked by estimated organic search traffic. |
44
- | all_backlinks | Retrieves all backlinks information for a specified target using various query parameters. |
45
- | broken_backlinks | Fetches broken backlink data for the specified target from the site explorer API endpoint. |
46
- | refdomains | Retrieves referring domains data for a specified target using the Site Explorer API endpoint. |
47
- | anchors | Fetches anchor text distribution data for a specified target using given query parameters. |
48
- | linkeddomains | Retrieves linked domains for a specified target using the site explorer API endpoint. |
49
- | linked_anchors_external | Fetch linked external anchor data for a specified target using provided selection and filtering criteria. |
50
- | linked_anchors_internal | Fetches internal linked anchor data for a specified target from the site explorer API, applying optional filtering and query parameters. |
51
- | organic_keywords | Retrieve organic keyword data for a specified target and date from the Site Explorer API endpoint. |
52
- | organic_competitors | Retrieves organic competitors data for a specified target using the Site Explorer API. |
53
- | top_pages | Retrieves top pages data for a specified target and date from the site explorer API with customizable query parameters. |
54
- | paid_pages | Fetches paid pages data from the Site Explorer API based on specified filters. |
55
- | best_by_external_links | Fetches data about the best-performing pages of a target site based on external links, with various filtering and output options. |
56
- | best_by_internal_links | Retrieves the best-performing internal links for a specified target using the site explorer API endpoint. |
57
- | total_search_volume_history | Fetches the total historical search volume data for a specified target within a given date range and optional filters. |
58
- | keyword_explorer_overview | Retrieves an overview of keyword metrics and data from the keywords explorer API endpoint based on the specified filters and parameters. |
59
- | volume_history | Fetches the historical search volume for a given keyword in a specified country. |
60
- | volume_by_country | Retrieves search volume by country for a given keyword. |
61
- | matching_terms | Retrieves matching keyword terms from the keywords explorer API based on specified filters and search parameters. |
62
- | related_terms | Retrieves related keyword terms for a given selection and country, with optional filtering and pagination. |
63
- | search_suggestions | Fetches keyword search suggestions from the keywords explorer API based on the provided filtering and query parameters. |
64
-
65
-
66
-
67
- ## Usage
68
-
69
- - Login to AgentR
70
- - Follow the quickstart guide to setup MCP Server for your client
71
- - Visit Apps Store and enable the Ahrefs app
72
- - Restart the MCP Server
73
-
74
- ### Local Development
75
-
76
- - Follow the README to test with the local MCP Server