universal-mcp 0.1.12__tar.gz → 0.1.13rc2__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 (161) hide show
  1. {universal_mcp-0.1.12 → universal_mcp-0.1.13rc2}/.gitignore +4 -1
  2. {universal_mcp-0.1.12 → universal_mcp-0.1.13rc2}/PKG-INFO +16 -41
  3. {universal_mcp-0.1.12 → universal_mcp-0.1.13rc2}/README.md +12 -21
  4. {universal_mcp-0.1.12 → universal_mcp-0.1.13rc2}/pyproject.toml +18 -37
  5. {universal_mcp-0.1.12 → universal_mcp-0.1.13rc2}/src/playground/__main__.py +7 -12
  6. universal_mcp-0.1.13rc2/src/playground/client.py +388 -0
  7. universal_mcp-0.1.13rc2/src/playground/streamlit.py +449 -0
  8. {universal_mcp-0.1.12 → universal_mcp-0.1.13rc2}/src/tests/test_api_generator.py +14 -36
  9. {universal_mcp-0.1.12 → universal_mcp-0.1.13rc2}/src/tests/test_applications.py +35 -9
  10. {universal_mcp-0.1.12 → universal_mcp-0.1.13rc2}/src/tests/test_zenquotes.py +1 -1
  11. universal_mcp-0.1.13rc2/src/universal_mcp/applications/__init__.py +75 -0
  12. {universal_mcp-0.1.12 → universal_mcp-0.1.13rc2}/src/universal_mcp/cli.py +109 -17
  13. {universal_mcp-0.1.12 → universal_mcp-0.1.13rc2}/src/universal_mcp/integrations/__init__.py +1 -1
  14. {universal_mcp-0.1.12 → universal_mcp-0.1.13rc2}/src/universal_mcp/integrations/integration.py +79 -0
  15. universal_mcp-0.1.13rc2/src/universal_mcp/servers/README.md +79 -0
  16. {universal_mcp-0.1.12 → universal_mcp-0.1.13rc2}/src/universal_mcp/servers/server.py +17 -29
  17. universal_mcp-0.1.13rc2/src/universal_mcp/stores/README.md +74 -0
  18. {universal_mcp-0.1.12 → universal_mcp-0.1.13rc2}/src/universal_mcp/stores/store.py +0 -2
  19. universal_mcp-0.1.13rc2/src/universal_mcp/templates/README.md.j2 +93 -0
  20. universal_mcp-0.1.13rc2/src/universal_mcp/templates/api_client.py.j2 +27 -0
  21. universal_mcp-0.1.13rc2/src/universal_mcp/tools/README.md +86 -0
  22. {universal_mcp-0.1.12 → universal_mcp-0.1.13rc2}/src/universal_mcp/tools/tools.py +1 -1
  23. universal_mcp-0.1.13rc2/src/universal_mcp/utils/agentr.py +90 -0
  24. universal_mcp-0.1.13rc2/src/universal_mcp/utils/api_generator.py +227 -0
  25. universal_mcp-0.1.13rc2/src/universal_mcp/utils/openapi.py +455 -0
  26. universal_mcp-0.1.13rc2/src/universal_mcp/utils/singleton.py +23 -0
  27. universal_mcp-0.1.12/.github/workflows/publish-pypi.yml +0 -37
  28. universal_mcp-0.1.12/.github/workflows/pull-request-checks.yml +0 -8
  29. universal_mcp-0.1.12/.github/workflows/shared.yml +0 -54
  30. universal_mcp-0.1.12/.pre-commit-config.yaml +0 -24
  31. universal_mcp-0.1.12/.python-version +0 -1
  32. universal_mcp-0.1.12/CONTRIBUTING.md +0 -78
  33. universal_mcp-0.1.12/bump_and_release.sh +0 -61
  34. universal_mcp-0.1.12/local_config.json.example +0 -11
  35. universal_mcp-0.1.12/src/playground/__init__.py +0 -3
  36. universal_mcp-0.1.12/src/playground/client.py +0 -288
  37. universal_mcp-0.1.12/src/playground/service.py +0 -234
  38. universal_mcp-0.1.12/src/playground/streamlit.py +0 -438
  39. universal_mcp-0.1.12/src/universal_mcp/applications/__init__.py +0 -31
  40. universal_mcp-0.1.12/src/universal_mcp/applications/ahrefs/README.md +0 -76
  41. universal_mcp-0.1.12/src/universal_mcp/applications/ahrefs/app.py +0 -2291
  42. universal_mcp-0.1.12/src/universal_mcp/applications/cal_com_v2/README.md +0 -175
  43. universal_mcp-0.1.12/src/universal_mcp/applications/cal_com_v2/__init__.py +0 -0
  44. universal_mcp-0.1.12/src/universal_mcp/applications/cal_com_v2/app.py +0 -5390
  45. universal_mcp-0.1.12/src/universal_mcp/applications/calendly/README.md +0 -78
  46. universal_mcp-0.1.12/src/universal_mcp/applications/calendly/__init__.py +0 -0
  47. universal_mcp-0.1.12/src/universal_mcp/applications/calendly/app.py +0 -1195
  48. universal_mcp-0.1.12/src/universal_mcp/applications/clickup/README.md +0 -160
  49. universal_mcp-0.1.12/src/universal_mcp/applications/clickup/__init__.py +0 -0
  50. universal_mcp-0.1.12/src/universal_mcp/applications/clickup/app.py +0 -5009
  51. universal_mcp-0.1.12/src/universal_mcp/applications/coda/README.md +0 -133
  52. universal_mcp-0.1.12/src/universal_mcp/applications/coda/__init__.py +0 -0
  53. universal_mcp-0.1.12/src/universal_mcp/applications/coda/app.py +0 -3671
  54. universal_mcp-0.1.12/src/universal_mcp/applications/e2b/README.md +0 -37
  55. universal_mcp-0.1.12/src/universal_mcp/applications/e2b/app.py +0 -65
  56. universal_mcp-0.1.12/src/universal_mcp/applications/elevenlabs/README.md +0 -84
  57. universal_mcp-0.1.12/src/universal_mcp/applications/elevenlabs/__init__.py +0 -0
  58. universal_mcp-0.1.12/src/universal_mcp/applications/elevenlabs/app.py +0 -1402
  59. universal_mcp-0.1.12/src/universal_mcp/applications/falai/README.md +0 -42
  60. universal_mcp-0.1.12/src/universal_mcp/applications/falai/__init__.py +0 -0
  61. universal_mcp-0.1.12/src/universal_mcp/applications/falai/app.py +0 -332
  62. universal_mcp-0.1.12/src/universal_mcp/applications/figma/README.md +0 -74
  63. universal_mcp-0.1.12/src/universal_mcp/applications/figma/__init__.py +0 -0
  64. universal_mcp-0.1.12/src/universal_mcp/applications/figma/app.py +0 -1261
  65. universal_mcp-0.1.12/src/universal_mcp/applications/firecrawl/README.md +0 -45
  66. universal_mcp-0.1.12/src/universal_mcp/applications/firecrawl/app.py +0 -268
  67. universal_mcp-0.1.12/src/universal_mcp/applications/github/README.md +0 -47
  68. universal_mcp-0.1.12/src/universal_mcp/applications/github/app.py +0 -429
  69. universal_mcp-0.1.12/src/universal_mcp/applications/gong/README.md +0 -88
  70. universal_mcp-0.1.12/src/universal_mcp/applications/gong/__init__.py +0 -0
  71. universal_mcp-0.1.12/src/universal_mcp/applications/gong/app.py +0 -2297
  72. universal_mcp-0.1.12/src/universal_mcp/applications/google_calendar/app.py +0 -442
  73. universal_mcp-0.1.12/src/universal_mcp/applications/google_docs/README.md +0 -40
  74. universal_mcp-0.1.12/src/universal_mcp/applications/google_docs/app.py +0 -88
  75. universal_mcp-0.1.12/src/universal_mcp/applications/google_drive/README.md +0 -44
  76. universal_mcp-0.1.12/src/universal_mcp/applications/google_drive/app.py +0 -286
  77. universal_mcp-0.1.12/src/universal_mcp/applications/google_mail/README.md +0 -47
  78. universal_mcp-0.1.12/src/universal_mcp/applications/google_mail/app.py +0 -664
  79. universal_mcp-0.1.12/src/universal_mcp/applications/google_sheet/README.md +0 -42
  80. universal_mcp-0.1.12/src/universal_mcp/applications/google_sheet/app.py +0 -150
  81. universal_mcp-0.1.12/src/universal_mcp/applications/hashnode/app.py +0 -81
  82. universal_mcp-0.1.12/src/universal_mcp/applications/hashnode/prompt.md +0 -23
  83. universal_mcp-0.1.12/src/universal_mcp/applications/heygen/README.md +0 -69
  84. universal_mcp-0.1.12/src/universal_mcp/applications/heygen/__init__.py +0 -0
  85. universal_mcp-0.1.12/src/universal_mcp/applications/heygen/app.py +0 -956
  86. universal_mcp-0.1.12/src/universal_mcp/applications/mailchimp/README.md +0 -306
  87. universal_mcp-0.1.12/src/universal_mcp/applications/mailchimp/__init__.py +0 -0
  88. universal_mcp-0.1.12/src/universal_mcp/applications/mailchimp/app.py +0 -10937
  89. universal_mcp-0.1.12/src/universal_mcp/applications/markitdown/app.py +0 -44
  90. universal_mcp-0.1.12/src/universal_mcp/applications/notion/README.md +0 -55
  91. universal_mcp-0.1.12/src/universal_mcp/applications/notion/__init__.py +0 -0
  92. universal_mcp-0.1.12/src/universal_mcp/applications/notion/app.py +0 -527
  93. universal_mcp-0.1.12/src/universal_mcp/applications/perplexity/README.md +0 -37
  94. universal_mcp-0.1.12/src/universal_mcp/applications/perplexity/app.py +0 -65
  95. universal_mcp-0.1.12/src/universal_mcp/applications/reddit/README.md +0 -45
  96. universal_mcp-0.1.12/src/universal_mcp/applications/reddit/app.py +0 -379
  97. universal_mcp-0.1.12/src/universal_mcp/applications/replicate/README.md +0 -65
  98. universal_mcp-0.1.12/src/universal_mcp/applications/replicate/__init__.py +0 -0
  99. universal_mcp-0.1.12/src/universal_mcp/applications/replicate/app.py +0 -980
  100. universal_mcp-0.1.12/src/universal_mcp/applications/resend/README.md +0 -38
  101. universal_mcp-0.1.12/src/universal_mcp/applications/resend/app.py +0 -37
  102. universal_mcp-0.1.12/src/universal_mcp/applications/retell_ai/README.md +0 -46
  103. universal_mcp-0.1.12/src/universal_mcp/applications/retell_ai/__init__.py +0 -0
  104. universal_mcp-0.1.12/src/universal_mcp/applications/retell_ai/app.py +0 -333
  105. universal_mcp-0.1.12/src/universal_mcp/applications/rocketlane/README.md +0 -42
  106. universal_mcp-0.1.12/src/universal_mcp/applications/rocketlane/__init__.py +0 -0
  107. universal_mcp-0.1.12/src/universal_mcp/applications/rocketlane/app.py +0 -194
  108. universal_mcp-0.1.12/src/universal_mcp/applications/serpapi/README.md +0 -37
  109. universal_mcp-0.1.12/src/universal_mcp/applications/serpapi/app.py +0 -73
  110. universal_mcp-0.1.12/src/universal_mcp/applications/spotify/README.md +0 -116
  111. universal_mcp-0.1.12/src/universal_mcp/applications/spotify/__init__.py +0 -0
  112. universal_mcp-0.1.12/src/universal_mcp/applications/spotify/app.py +0 -2526
  113. universal_mcp-0.1.12/src/universal_mcp/applications/supabase/README.md +0 -112
  114. universal_mcp-0.1.12/src/universal_mcp/applications/supabase/__init__.py +0 -0
  115. universal_mcp-0.1.12/src/universal_mcp/applications/supabase/app.py +0 -2970
  116. universal_mcp-0.1.12/src/universal_mcp/applications/tavily/README.md +0 -38
  117. universal_mcp-0.1.12/src/universal_mcp/applications/tavily/app.py +0 -51
  118. universal_mcp-0.1.12/src/universal_mcp/applications/wrike/README.md +0 -71
  119. universal_mcp-0.1.12/src/universal_mcp/applications/wrike/__init__.py +0 -0
  120. universal_mcp-0.1.12/src/universal_mcp/applications/wrike/app.py +0 -1372
  121. universal_mcp-0.1.12/src/universal_mcp/applications/youtube/README.md +0 -82
  122. universal_mcp-0.1.12/src/universal_mcp/applications/youtube/__init__.py +0 -0
  123. universal_mcp-0.1.12/src/universal_mcp/applications/youtube/app.py +0 -1428
  124. universal_mcp-0.1.12/src/universal_mcp/applications/zenquotes/README.md +0 -37
  125. universal_mcp-0.1.12/src/universal_mcp/applications/zenquotes/app.py +0 -31
  126. universal_mcp-0.1.12/src/universal_mcp/integrations/agentr.py +0 -112
  127. universal_mcp-0.1.12/src/universal_mcp/utils/api_generator.py +0 -269
  128. universal_mcp-0.1.12/src/universal_mcp/utils/openapi.py +0 -555
  129. universal_mcp-0.1.12/uv.lock +0 -3651
  130. {universal_mcp-0.1.12 → universal_mcp-0.1.13rc2}/src/playground/README.md +0 -0
  131. {universal_mcp-0.1.12/src/tests → universal_mcp-0.1.13rc2/src/playground}/__init__.py +0 -0
  132. {universal_mcp-0.1.12 → universal_mcp-0.1.13rc2}/src/playground/agents/react.py +0 -0
  133. {universal_mcp-0.1.12 → universal_mcp-0.1.13rc2}/src/playground/memory/__init__.py +0 -0
  134. {universal_mcp-0.1.12 → universal_mcp-0.1.13rc2}/src/playground/memory/sqlite.py +0 -0
  135. {universal_mcp-0.1.12 → universal_mcp-0.1.13rc2}/src/playground/schema.py +0 -0
  136. {universal_mcp-0.1.12 → universal_mcp-0.1.13rc2}/src/playground/settings.py +0 -0
  137. {universal_mcp-0.1.12 → universal_mcp-0.1.13rc2}/src/playground/utils.py +0 -0
  138. {universal_mcp-0.1.12/src/universal_mcp → universal_mcp-0.1.13rc2/src/tests}/__init__.py +0 -0
  139. {universal_mcp-0.1.12 → universal_mcp-0.1.13rc2}/src/tests/conftest.py +0 -0
  140. {universal_mcp-0.1.12 → universal_mcp-0.1.13rc2}/src/tests/test_api_integration.py +0 -0
  141. {universal_mcp-0.1.12 → universal_mcp-0.1.13rc2}/src/tests/test_localserver.py +0 -0
  142. {universal_mcp-0.1.12 → universal_mcp-0.1.13rc2}/src/tests/test_stores.py +0 -0
  143. {universal_mcp-0.1.12 → universal_mcp-0.1.13rc2}/src/tests/test_tool.py +0 -0
  144. {universal_mcp-0.1.12/src/universal_mcp/applications/ahrefs → universal_mcp-0.1.13rc2/src/universal_mcp}/__init__.py +0 -0
  145. {universal_mcp-0.1.12 → universal_mcp-0.1.13rc2}/src/universal_mcp/analytics.py +0 -0
  146. {universal_mcp-0.1.12 → universal_mcp-0.1.13rc2}/src/universal_mcp/applications/application.py +0 -0
  147. {universal_mcp-0.1.12 → universal_mcp-0.1.13rc2}/src/universal_mcp/config.py +0 -0
  148. {universal_mcp-0.1.12 → universal_mcp-0.1.13rc2}/src/universal_mcp/exceptions.py +0 -0
  149. {universal_mcp-0.1.12 → universal_mcp-0.1.13rc2}/src/universal_mcp/integrations/README.md +0 -0
  150. {universal_mcp-0.1.12 → universal_mcp-0.1.13rc2}/src/universal_mcp/logger.py +0 -0
  151. {universal_mcp-0.1.12 → universal_mcp-0.1.13rc2}/src/universal_mcp/py.typed +0 -0
  152. {universal_mcp-0.1.12 → universal_mcp-0.1.13rc2}/src/universal_mcp/servers/__init__.py +0 -0
  153. {universal_mcp-0.1.12 → universal_mcp-0.1.13rc2}/src/universal_mcp/stores/__init__.py +0 -0
  154. {universal_mcp-0.1.12 → universal_mcp-0.1.13rc2}/src/universal_mcp/tools/__init__.py +0 -0
  155. {universal_mcp-0.1.12 → universal_mcp-0.1.13rc2}/src/universal_mcp/tools/adapters.py +0 -0
  156. {universal_mcp-0.1.12 → universal_mcp-0.1.13rc2}/src/universal_mcp/tools/func_metadata.py +0 -0
  157. {universal_mcp-0.1.12 → universal_mcp-0.1.13rc2}/src/universal_mcp/utils/__init__.py +0 -0
  158. {universal_mcp-0.1.12 → universal_mcp-0.1.13rc2}/src/universal_mcp/utils/docgen.py +0 -0
  159. {universal_mcp-0.1.12 → universal_mcp-0.1.13rc2}/src/universal_mcp/utils/docstring_parser.py +0 -0
  160. {universal_mcp-0.1.12 → universal_mcp-0.1.13rc2}/src/universal_mcp/utils/dump_app_tools.py +0 -0
  161. {universal_mcp-0.1.12 → universal_mcp-0.1.13rc2}/src/universal_mcp/utils/installation.py +0 -0
@@ -44,4 +44,7 @@ test_artifacts/
44
44
  src/universal_mcp/applications/complex/
45
45
  src/universal_mcp/applications/test/
46
46
  src/universal_mcp/applications/test_with_docs/
47
- src/universal_mcp/applications/test_without_docs/
47
+ src/universal_mcp/applications/test_without_docs/
48
+
49
+ # Temporary files
50
+ tmp/
@@ -1,13 +1,14 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: universal-mcp
3
- Version: 0.1.12
3
+ Version: 0.1.13rc2
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
+ License: MIT
6
7
  Requires-Python: >=3.11
8
+ Requires-Dist: cookiecutter>=2.6.0
7
9
  Requires-Dist: gql[all]>=3.5.2
10
+ Requires-Dist: jinja2>=3.1.3
8
11
  Requires-Dist: keyring>=25.6.0
9
- Requires-Dist: langchain-cerebras>=0.5.0
10
- Requires-Dist: langchain-google-genai>=2.1.3
11
12
  Requires-Dist: litellm>=1.30.7
12
13
  Requires-Dist: loguru>=0.7.3
13
14
  Requires-Dist: mcp>=1.6.0
@@ -18,17 +19,11 @@ Requires-Dist: pyyaml>=6.0.2
18
19
  Requires-Dist: rich>=14.0.0
19
20
  Requires-Dist: typer>=0.15.2
20
21
  Provides-Extra: all
21
- Requires-Dist: e2b-code-interpreter>=1.2.0; extra == 'all'
22
- Requires-Dist: fal-client>=0.5.9; extra == 'all'
23
- Requires-Dist: fastapi[standard]>=0.115.12; extra == 'all'
24
- Requires-Dist: firecrawl-py>=1.15.0; extra == 'all'
25
- Requires-Dist: google-search-results>=2.4.2; extra == 'all'
26
22
  Requires-Dist: langchain-mcp-adapters>=0.0.3; extra == 'all'
27
23
  Requires-Dist: langchain-openai>=0.3.12; extra == 'all'
28
24
  Requires-Dist: langgraph-checkpoint-sqlite>=2.0.6; extra == 'all'
29
25
  Requires-Dist: langgraph>=0.3.24; extra == 'all'
30
26
  Requires-Dist: litellm>=1.30.7; extra == 'all'
31
- Requires-Dist: markitdown[all]>=0.1.1; extra == 'all'
32
27
  Requires-Dist: pyright>=1.1.398; extra == 'all'
33
28
  Requires-Dist: pytest-asyncio>=0.26.0; extra == 'all'
34
29
  Requires-Dist: pytest>=8.3.5; extra == 'all'
@@ -42,16 +37,7 @@ Requires-Dist: pyright>=1.1.398; extra == 'dev'
42
37
  Requires-Dist: pytest-asyncio>=0.26.0; extra == 'dev'
43
38
  Requires-Dist: pytest>=8.3.5; extra == 'dev'
44
39
  Requires-Dist: ruff>=0.11.4; extra == 'dev'
45
- Provides-Extra: e2b
46
- Requires-Dist: e2b-code-interpreter>=1.2.0; extra == 'e2b'
47
- Provides-Extra: fal-ai
48
- Requires-Dist: fal-client>=0.5.9; extra == 'fal-ai'
49
- Provides-Extra: firecrawl
50
- Requires-Dist: firecrawl-py>=1.15.0; extra == 'firecrawl'
51
- Provides-Extra: markitdown
52
- Requires-Dist: markitdown[all]>=0.1.1; extra == 'markitdown'
53
40
  Provides-Extra: playground
54
- Requires-Dist: fastapi[standard]>=0.115.12; extra == 'playground'
55
41
  Requires-Dist: langchain-mcp-adapters>=0.0.3; extra == 'playground'
56
42
  Requires-Dist: langchain-openai>=0.3.12; extra == 'playground'
57
43
  Requires-Dist: langgraph-checkpoint-sqlite>=2.0.6; extra == 'playground'
@@ -59,8 +45,6 @@ Requires-Dist: langgraph>=0.3.24; extra == 'playground'
59
45
  Requires-Dist: python-dotenv>=1.0.1; extra == 'playground'
60
46
  Requires-Dist: streamlit>=1.44.1; extra == 'playground'
61
47
  Requires-Dist: watchdog>=6.0.0; extra == 'playground'
62
- Provides-Extra: serpapi
63
- Requires-Dist: google-search-results>=2.4.2; extra == 'serpapi'
64
48
  Description-Content-Type: text/markdown
65
49
 
66
50
  # Universal MCP
@@ -73,6 +57,8 @@ Universal MCP acts as a middleware layer for your API applications, enabling sea
73
57
  - **Managed Authentication**: Built-in support for API keys and OAuth-based authentication flows
74
58
  - **Extensible Architecture**: Easily build and add new app integrations with minimal boilerplate
75
59
  - **Credential Management**: Flexible storage options for API credentials with memory and environment-based implementations
60
+ - **Tool Management**: Comprehensive tool registration, validation, and execution capabilities
61
+ - **Multiple Server Types**: Support for local, AgentR, and single-application server configurations
76
62
 
77
63
  ## 🔧 Installation
78
64
 
@@ -170,27 +156,7 @@ python src/playground
170
156
  Refer to `src/playground/README.md` for more detailed setup and usage instructions.
171
157
 
172
158
  ## 🧩 Available Applications
173
-
174
- Universal MCP comes with several pre-built applications:
175
-
176
- | Application Slug | Description | Authentication Type |
177
- | :--------------- | :--------------------------------------- | :---------------------------------------- |
178
- | `e2b` | Execute Python code in secure sandboxes | API Key (via Integration) |
179
- | `firecrawl` | Scrape/crawl web pages, search | API Key (via Integration) |
180
- | `github` | Interact with GitHub repos, issues, PRs | OAuth (AgentR) |
181
- | `google-calendar`| Manage Google Calendar events | OAuth (AgentR) |
182
- | `google-docs` | Create and manage Google Docs documents | OAuth (AgentR) |
183
- | `google-drive` | Manage Google Drive files and folders | OAuth (AgentR) |
184
- | `google-mail` | Read and send Gmail emails | OAuth (AgentR) |
185
- | `google-sheet` | Manage Google Sheets spreadsheets | OAuth (AgentR) |
186
- | `markitdown` | Convert web pages/files to Markdown | None |
187
- | `notion` | Interact with Notion pages/databases | OAuth (AgentR) |
188
- | `perplexity` | Interact with Perplexity AI models | API Key (via Integration) |
189
- | `reddit` | Interact with Reddit posts/comments | OAuth (AgentR) |
190
- | `resend` | Send emails via Resend API | API Key (via Integration) |
191
- | `serpapi` | Perform web searches via SerpApi | API Key (via Integration) |
192
- | `tavily` | Advanced web search & research API | API Key (via Integration) |
193
- | `zenquotes` | Get inspirational quotes | None |
159
+ Visit [https://agentr.dev](https://agentr.dev) to check all available applications
194
160
 
195
161
  *Authentication Type notes:*
196
162
  * *OAuth (AgentR)*: Typically requires configuring the integration with `type: "agentr"` in your `ServerConfig`. Requires the `AGENTR_API_KEY`.
@@ -275,6 +241,15 @@ universal_mcp --version
275
241
  - `litellm` (optional, for `docgen` command)
276
242
  - ... and others specific to certain applications.
277
243
 
244
+ ## 📚 Documentation
245
+
246
+ For more detailed information about specific components:
247
+
248
+ - [Tools Documentation](src/universal_mcp/tools/README.md) - Learn about tool management and conversion
249
+ - [Servers Documentation](src/universal_mcp/servers/README.md) - Understand different server implementations
250
+ - [Stores Documentation](src/universal_mcp/stores/README.md) - Explore credential storage options
251
+ - [Integrations Documentation](src/universal_mcp/integrations/README.md) - Learn about authentication methods
252
+
278
253
  ## 📝 License
279
254
 
280
255
  This project is licensed under the MIT License.
@@ -8,6 +8,8 @@ Universal MCP acts as a middleware layer for your API applications, enabling sea
8
8
  - **Managed Authentication**: Built-in support for API keys and OAuth-based authentication flows
9
9
  - **Extensible Architecture**: Easily build and add new app integrations with minimal boilerplate
10
10
  - **Credential Management**: Flexible storage options for API credentials with memory and environment-based implementations
11
+ - **Tool Management**: Comprehensive tool registration, validation, and execution capabilities
12
+ - **Multiple Server Types**: Support for local, AgentR, and single-application server configurations
11
13
 
12
14
  ## 🔧 Installation
13
15
 
@@ -105,27 +107,7 @@ python src/playground
105
107
  Refer to `src/playground/README.md` for more detailed setup and usage instructions.
106
108
 
107
109
  ## 🧩 Available Applications
108
-
109
- Universal MCP comes with several pre-built applications:
110
-
111
- | Application Slug | Description | Authentication Type |
112
- | :--------------- | :--------------------------------------- | :---------------------------------------- |
113
- | `e2b` | Execute Python code in secure sandboxes | API Key (via Integration) |
114
- | `firecrawl` | Scrape/crawl web pages, search | API Key (via Integration) |
115
- | `github` | Interact with GitHub repos, issues, PRs | OAuth (AgentR) |
116
- | `google-calendar`| Manage Google Calendar events | OAuth (AgentR) |
117
- | `google-docs` | Create and manage Google Docs documents | OAuth (AgentR) |
118
- | `google-drive` | Manage Google Drive files and folders | OAuth (AgentR) |
119
- | `google-mail` | Read and send Gmail emails | OAuth (AgentR) |
120
- | `google-sheet` | Manage Google Sheets spreadsheets | OAuth (AgentR) |
121
- | `markitdown` | Convert web pages/files to Markdown | None |
122
- | `notion` | Interact with Notion pages/databases | OAuth (AgentR) |
123
- | `perplexity` | Interact with Perplexity AI models | API Key (via Integration) |
124
- | `reddit` | Interact with Reddit posts/comments | OAuth (AgentR) |
125
- | `resend` | Send emails via Resend API | API Key (via Integration) |
126
- | `serpapi` | Perform web searches via SerpApi | API Key (via Integration) |
127
- | `tavily` | Advanced web search & research API | API Key (via Integration) |
128
- | `zenquotes` | Get inspirational quotes | None |
110
+ Visit [https://agentr.dev](https://agentr.dev) to check all available applications
129
111
 
130
112
  *Authentication Type notes:*
131
113
  * *OAuth (AgentR)*: Typically requires configuring the integration with `type: "agentr"` in your `ServerConfig`. Requires the `AGENTR_API_KEY`.
@@ -210,6 +192,15 @@ universal_mcp --version
210
192
  - `litellm` (optional, for `docgen` command)
211
193
  - ... and others specific to certain applications.
212
194
 
195
+ ## 📚 Documentation
196
+
197
+ For more detailed information about specific components:
198
+
199
+ - [Tools Documentation](src/universal_mcp/tools/README.md) - Learn about tool management and conversion
200
+ - [Servers Documentation](src/universal_mcp/servers/README.md) - Understand different server implementations
201
+ - [Stores Documentation](src/universal_mcp/stores/README.md) - Explore credential storage options
202
+ - [Integrations Documentation](src/universal_mcp/integrations/README.md) - Learn about authentication methods
203
+
213
204
  ## 📝 License
214
205
 
215
206
  This project is licensed under the MIT License.
@@ -1,12 +1,13 @@
1
1
  [project]
2
2
  name = "universal-mcp"
3
- version = "0.1.12"
3
+ version = "0.1.13-rc2"
4
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
5
  readme = "README.md"
6
6
  authors = [
7
7
  { name = "Manoj Bajaj", email = "manojbajaj95@gmail.com" }
8
8
  ]
9
9
  requires-python = ">=3.11"
10
+ license = { text = "MIT" }
10
11
  dependencies = [
11
12
  "pydantic>=2.11.1",
12
13
  "pydantic-settings>=2.8.1",
@@ -19,13 +20,12 @@ dependencies = [
19
20
  "posthog>=3.24.0",
20
21
  "mcp>=1.6.0",
21
22
  "gql[all]>=3.5.2",
22
- "langchain-cerebras>=0.5.0",
23
- "langchain-google-genai>=2.1.3",
23
+ "cookiecutter>=2.6.0",
24
+ "Jinja2>=3.1.3",
24
25
  ]
25
26
 
26
27
  [project.optional-dependencies]
27
28
  playground = [
28
- "fastapi[standard]>=0.115.12",
29
29
  "langchain-mcp-adapters>=0.0.3",
30
30
  "langgraph>=0.3.24",
31
31
  "langgraph-checkpoint-sqlite>=2.0.6",
@@ -41,23 +41,8 @@ dev = [
41
41
  "pyright>=1.1.398",
42
42
  "litellm>=1.30.7",
43
43
  ]
44
- e2b = [
45
- "e2b-code-interpreter>=1.2.0",
46
- ]
47
- firecrawl=[
48
- "firecrawl-py>=1.15.0",
49
- ]
50
- serpapi = [
51
- "google-search-results>=2.4.2",
52
- ]
53
- markitdown = [
54
- "markitdown[all]>=0.1.1",
55
- ]
56
- fal-ai = [
57
- "fal-client>=0.5.9",
58
- ]
59
44
  all = [
60
- "fastapi[standard]>=0.115.12",
45
+ # Playground dependencies
61
46
  "langchain-mcp-adapters>=0.0.3",
62
47
  "langgraph>=0.3.24",
63
48
  "langgraph-checkpoint-sqlite>=2.0.6",
@@ -65,17 +50,14 @@ all = [
65
50
  "python-dotenv>=1.0.1",
66
51
  "langchain-openai>=0.3.12",
67
52
  "watchdog>=6.0.0",
53
+ # Development dependencies
68
54
  "ruff>=0.11.4",
69
55
  "pytest>=8.3.5",
70
56
  "pytest-asyncio>=0.26.0",
71
57
  "pyright>=1.1.398",
72
58
  "litellm>=1.30.7",
73
- "e2b-code-interpreter>=1.2.0",
74
- "firecrawl-py>=1.15.0",
75
- "google-search-results>=2.4.2",
76
- "markitdown[all]>=0.1.1",
77
- "fal-client>=0.5.9",
78
59
  ]
60
+
79
61
  [project.scripts]
80
62
  universal_mcp = "universal_mcp.cli:app"
81
63
 
@@ -83,6 +65,17 @@ universal_mcp = "universal_mcp.cli:app"
83
65
  requires = ["hatchling"]
84
66
  build-backend = "hatchling.build"
85
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
+
86
79
  [tool.ruff]
87
80
  # Exclude a variety of commonly ignored directories.
88
81
  exclude = [
@@ -161,18 +154,6 @@ skip-magic-trailing-comma = false
161
154
  # Like Black, automatically detect the appropriate line ending.
162
155
  line-ending = "auto"
163
156
 
164
- # Enable auto-formatting of code examples in docstrings. Markdown,
165
- # reStructuredText code/literal blocks and doctests are all supported.
166
- #
167
- # This is currently disabled by default, but it is planned for this
168
- # to be opt-out in the future.
169
- docstring-code-format = false
170
-
171
- # Set the line length limit used when formatting code snippets in
172
- # docstrings.
173
- #
174
- # This only has an effect when the `docstring-code-format` setting is
175
- # enabled.
176
157
  docstring-code-line-length = "dynamic"
177
158
 
178
159
  [tool.pytest.ini_options]
@@ -8,19 +8,14 @@ def main():
8
8
  processes = []
9
9
 
10
10
  # Start MCP server first
11
- mcp_process = subprocess.Popen(["universal_mcp", "run", "-c", "local_config.json"])
12
- processes.append(mcp_process)
13
- time.sleep(6) # Give MCP server time to start
14
- logger.info("MCP server started")
11
+ # Ask the user if they want to run the MCP server
12
+ run_mcp_server = input("Do you want to run the MCP server? (y/n): ")
13
+ if run_mcp_server == "y":
14
+ mcp_process = subprocess.Popen(["universal_mcp", "run", "-c", "local_config.json"])
15
+ processes.append(mcp_process)
16
+ time.sleep(6) # Give MCP server time to start
17
+ logger.info("MCP server started")
15
18
 
16
- # Start FastAPI app second
17
- fastapi_process = subprocess.Popen(
18
- ["fastapi", "run", "src/playground", "--port", "8003"]
19
- )
20
- processes.append(fastapi_process)
21
- time.sleep(3) # Give FastAPI time to start
22
- logger.info("FastAPI app started")
23
- # Start Streamlit app last
24
19
  streamlit_process = subprocess.Popen(
25
20
  ["streamlit", "run", "src/playground/streamlit.py"]
26
21
  )