universal-mcp 0.1.12__tar.gz → 0.1.13__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 (163) hide show
  1. {universal_mcp-0.1.12 → universal_mcp-0.1.13}/.gitignore +4 -1
  2. {universal_mcp-0.1.12 → universal_mcp-0.1.13}/PKG-INFO +17 -54
  3. {universal_mcp-0.1.12 → universal_mcp-0.1.13}/README.md +12 -21
  4. universal_mcp-0.1.13/pyproject.toml +127 -0
  5. {universal_mcp-0.1.12 → universal_mcp-0.1.13}/src/playground/__main__.py +9 -12
  6. {universal_mcp-0.1.12 → universal_mcp-0.1.13}/src/playground/agents/react.py +1 -1
  7. universal_mcp-0.1.13/src/playground/client.py +387 -0
  8. universal_mcp-0.1.13/src/playground/streamlit.py +459 -0
  9. {universal_mcp-0.1.12 → universal_mcp-0.1.13}/src/tests/test_api_generator.py +12 -80
  10. {universal_mcp-0.1.12 → universal_mcp-0.1.13}/src/tests/test_api_integration.py +2 -2
  11. {universal_mcp-0.1.12 → universal_mcp-0.1.13}/src/tests/test_applications.py +38 -8
  12. {universal_mcp-0.1.12 → universal_mcp-0.1.13}/src/tests/test_stores.py +1 -0
  13. {universal_mcp-0.1.12 → universal_mcp-0.1.13}/src/tests/test_zenquotes.py +1 -1
  14. universal_mcp-0.1.13/src/universal_mcp/applications/__init__.py +99 -0
  15. universal_mcp-0.1.13/src/universal_mcp/cli.py +278 -0
  16. {universal_mcp-0.1.12 → universal_mcp-0.1.13}/src/universal_mcp/integrations/__init__.py +1 -1
  17. {universal_mcp-0.1.12 → universal_mcp-0.1.13}/src/universal_mcp/integrations/integration.py +79 -0
  18. universal_mcp-0.1.13/src/universal_mcp/servers/README.md +79 -0
  19. {universal_mcp-0.1.12 → universal_mcp-0.1.13}/src/universal_mcp/servers/server.py +17 -31
  20. universal_mcp-0.1.13/src/universal_mcp/stores/README.md +74 -0
  21. universal_mcp-0.1.13/src/universal_mcp/templates/README.md.j2 +93 -0
  22. universal_mcp-0.1.13/src/universal_mcp/templates/api_client.py.j2 +27 -0
  23. universal_mcp-0.1.13/src/universal_mcp/tools/README.md +86 -0
  24. {universal_mcp-0.1.12 → universal_mcp-0.1.13}/src/universal_mcp/tools/tools.py +1 -3
  25. universal_mcp-0.1.13/src/universal_mcp/utils/agentr.py +95 -0
  26. universal_mcp-0.1.13/src/universal_mcp/utils/api_generator.py +140 -0
  27. {universal_mcp-0.1.12 → universal_mcp-0.1.13}/src/universal_mcp/utils/docgen.py +2 -2
  28. {universal_mcp-0.1.12 → universal_mcp-0.1.13}/src/universal_mcp/utils/installation.py +8 -8
  29. {universal_mcp-0.1.12 → universal_mcp-0.1.13}/src/universal_mcp/utils/openapi.py +353 -211
  30. universal_mcp-0.1.13/src/universal_mcp/utils/readme.py +92 -0
  31. universal_mcp-0.1.13/src/universal_mcp/utils/singleton.py +23 -0
  32. universal_mcp-0.1.12/.github/workflows/publish-pypi.yml +0 -37
  33. universal_mcp-0.1.12/.github/workflows/pull-request-checks.yml +0 -8
  34. universal_mcp-0.1.12/.github/workflows/shared.yml +0 -54
  35. universal_mcp-0.1.12/.pre-commit-config.yaml +0 -24
  36. universal_mcp-0.1.12/.python-version +0 -1
  37. universal_mcp-0.1.12/CONTRIBUTING.md +0 -78
  38. universal_mcp-0.1.12/bump_and_release.sh +0 -61
  39. universal_mcp-0.1.12/local_config.json.example +0 -11
  40. universal_mcp-0.1.12/pyproject.toml +0 -180
  41. universal_mcp-0.1.12/src/playground/__init__.py +0 -3
  42. universal_mcp-0.1.12/src/playground/client.py +0 -288
  43. universal_mcp-0.1.12/src/playground/memory/__init__.py +0 -14
  44. universal_mcp-0.1.12/src/playground/memory/sqlite.py +0 -9
  45. universal_mcp-0.1.12/src/playground/service.py +0 -234
  46. universal_mcp-0.1.12/src/playground/streamlit.py +0 -438
  47. universal_mcp-0.1.12/src/universal_mcp/applications/__init__.py +0 -31
  48. universal_mcp-0.1.12/src/universal_mcp/applications/ahrefs/README.md +0 -76
  49. universal_mcp-0.1.12/src/universal_mcp/applications/ahrefs/app.py +0 -2291
  50. universal_mcp-0.1.12/src/universal_mcp/applications/cal_com_v2/README.md +0 -175
  51. universal_mcp-0.1.12/src/universal_mcp/applications/cal_com_v2/__init__.py +0 -0
  52. universal_mcp-0.1.12/src/universal_mcp/applications/cal_com_v2/app.py +0 -5390
  53. universal_mcp-0.1.12/src/universal_mcp/applications/calendly/README.md +0 -78
  54. universal_mcp-0.1.12/src/universal_mcp/applications/calendly/__init__.py +0 -0
  55. universal_mcp-0.1.12/src/universal_mcp/applications/calendly/app.py +0 -1195
  56. universal_mcp-0.1.12/src/universal_mcp/applications/clickup/README.md +0 -160
  57. universal_mcp-0.1.12/src/universal_mcp/applications/clickup/__init__.py +0 -0
  58. universal_mcp-0.1.12/src/universal_mcp/applications/clickup/app.py +0 -5009
  59. universal_mcp-0.1.12/src/universal_mcp/applications/coda/README.md +0 -133
  60. universal_mcp-0.1.12/src/universal_mcp/applications/coda/__init__.py +0 -0
  61. universal_mcp-0.1.12/src/universal_mcp/applications/coda/app.py +0 -3671
  62. universal_mcp-0.1.12/src/universal_mcp/applications/e2b/README.md +0 -37
  63. universal_mcp-0.1.12/src/universal_mcp/applications/e2b/app.py +0 -65
  64. universal_mcp-0.1.12/src/universal_mcp/applications/elevenlabs/README.md +0 -84
  65. universal_mcp-0.1.12/src/universal_mcp/applications/elevenlabs/__init__.py +0 -0
  66. universal_mcp-0.1.12/src/universal_mcp/applications/elevenlabs/app.py +0 -1402
  67. universal_mcp-0.1.12/src/universal_mcp/applications/falai/README.md +0 -42
  68. universal_mcp-0.1.12/src/universal_mcp/applications/falai/__init__.py +0 -0
  69. universal_mcp-0.1.12/src/universal_mcp/applications/falai/app.py +0 -332
  70. universal_mcp-0.1.12/src/universal_mcp/applications/figma/README.md +0 -74
  71. universal_mcp-0.1.12/src/universal_mcp/applications/figma/__init__.py +0 -0
  72. universal_mcp-0.1.12/src/universal_mcp/applications/figma/app.py +0 -1261
  73. universal_mcp-0.1.12/src/universal_mcp/applications/firecrawl/README.md +0 -45
  74. universal_mcp-0.1.12/src/universal_mcp/applications/firecrawl/app.py +0 -268
  75. universal_mcp-0.1.12/src/universal_mcp/applications/github/README.md +0 -47
  76. universal_mcp-0.1.12/src/universal_mcp/applications/github/app.py +0 -429
  77. universal_mcp-0.1.12/src/universal_mcp/applications/gong/README.md +0 -88
  78. universal_mcp-0.1.12/src/universal_mcp/applications/gong/__init__.py +0 -0
  79. universal_mcp-0.1.12/src/universal_mcp/applications/gong/app.py +0 -2297
  80. universal_mcp-0.1.12/src/universal_mcp/applications/google_calendar/app.py +0 -442
  81. universal_mcp-0.1.12/src/universal_mcp/applications/google_docs/README.md +0 -40
  82. universal_mcp-0.1.12/src/universal_mcp/applications/google_docs/app.py +0 -88
  83. universal_mcp-0.1.12/src/universal_mcp/applications/google_drive/README.md +0 -44
  84. universal_mcp-0.1.12/src/universal_mcp/applications/google_drive/app.py +0 -286
  85. universal_mcp-0.1.12/src/universal_mcp/applications/google_mail/README.md +0 -47
  86. universal_mcp-0.1.12/src/universal_mcp/applications/google_mail/app.py +0 -664
  87. universal_mcp-0.1.12/src/universal_mcp/applications/google_sheet/README.md +0 -42
  88. universal_mcp-0.1.12/src/universal_mcp/applications/google_sheet/app.py +0 -150
  89. universal_mcp-0.1.12/src/universal_mcp/applications/hashnode/app.py +0 -81
  90. universal_mcp-0.1.12/src/universal_mcp/applications/hashnode/prompt.md +0 -23
  91. universal_mcp-0.1.12/src/universal_mcp/applications/heygen/README.md +0 -69
  92. universal_mcp-0.1.12/src/universal_mcp/applications/heygen/__init__.py +0 -0
  93. universal_mcp-0.1.12/src/universal_mcp/applications/heygen/app.py +0 -956
  94. universal_mcp-0.1.12/src/universal_mcp/applications/mailchimp/README.md +0 -306
  95. universal_mcp-0.1.12/src/universal_mcp/applications/mailchimp/__init__.py +0 -0
  96. universal_mcp-0.1.12/src/universal_mcp/applications/mailchimp/app.py +0 -10937
  97. universal_mcp-0.1.12/src/universal_mcp/applications/markitdown/app.py +0 -44
  98. universal_mcp-0.1.12/src/universal_mcp/applications/notion/README.md +0 -55
  99. universal_mcp-0.1.12/src/universal_mcp/applications/notion/__init__.py +0 -0
  100. universal_mcp-0.1.12/src/universal_mcp/applications/notion/app.py +0 -527
  101. universal_mcp-0.1.12/src/universal_mcp/applications/perplexity/README.md +0 -37
  102. universal_mcp-0.1.12/src/universal_mcp/applications/perplexity/app.py +0 -65
  103. universal_mcp-0.1.12/src/universal_mcp/applications/reddit/README.md +0 -45
  104. universal_mcp-0.1.12/src/universal_mcp/applications/reddit/app.py +0 -379
  105. universal_mcp-0.1.12/src/universal_mcp/applications/replicate/README.md +0 -65
  106. universal_mcp-0.1.12/src/universal_mcp/applications/replicate/__init__.py +0 -0
  107. universal_mcp-0.1.12/src/universal_mcp/applications/replicate/app.py +0 -980
  108. universal_mcp-0.1.12/src/universal_mcp/applications/resend/README.md +0 -38
  109. universal_mcp-0.1.12/src/universal_mcp/applications/resend/app.py +0 -37
  110. universal_mcp-0.1.12/src/universal_mcp/applications/retell_ai/README.md +0 -46
  111. universal_mcp-0.1.12/src/universal_mcp/applications/retell_ai/__init__.py +0 -0
  112. universal_mcp-0.1.12/src/universal_mcp/applications/retell_ai/app.py +0 -333
  113. universal_mcp-0.1.12/src/universal_mcp/applications/rocketlane/README.md +0 -42
  114. universal_mcp-0.1.12/src/universal_mcp/applications/rocketlane/__init__.py +0 -0
  115. universal_mcp-0.1.12/src/universal_mcp/applications/rocketlane/app.py +0 -194
  116. universal_mcp-0.1.12/src/universal_mcp/applications/serpapi/README.md +0 -37
  117. universal_mcp-0.1.12/src/universal_mcp/applications/serpapi/app.py +0 -73
  118. universal_mcp-0.1.12/src/universal_mcp/applications/spotify/README.md +0 -116
  119. universal_mcp-0.1.12/src/universal_mcp/applications/spotify/__init__.py +0 -0
  120. universal_mcp-0.1.12/src/universal_mcp/applications/spotify/app.py +0 -2526
  121. universal_mcp-0.1.12/src/universal_mcp/applications/supabase/README.md +0 -112
  122. universal_mcp-0.1.12/src/universal_mcp/applications/supabase/__init__.py +0 -0
  123. universal_mcp-0.1.12/src/universal_mcp/applications/supabase/app.py +0 -2970
  124. universal_mcp-0.1.12/src/universal_mcp/applications/tavily/README.md +0 -38
  125. universal_mcp-0.1.12/src/universal_mcp/applications/tavily/app.py +0 -51
  126. universal_mcp-0.1.12/src/universal_mcp/applications/wrike/README.md +0 -71
  127. universal_mcp-0.1.12/src/universal_mcp/applications/wrike/__init__.py +0 -0
  128. universal_mcp-0.1.12/src/universal_mcp/applications/wrike/app.py +0 -1372
  129. universal_mcp-0.1.12/src/universal_mcp/applications/youtube/README.md +0 -82
  130. universal_mcp-0.1.12/src/universal_mcp/applications/youtube/__init__.py +0 -0
  131. universal_mcp-0.1.12/src/universal_mcp/applications/youtube/app.py +0 -1428
  132. universal_mcp-0.1.12/src/universal_mcp/applications/zenquotes/README.md +0 -37
  133. universal_mcp-0.1.12/src/universal_mcp/applications/zenquotes/app.py +0 -31
  134. universal_mcp-0.1.12/src/universal_mcp/cli.py +0 -172
  135. universal_mcp-0.1.12/src/universal_mcp/integrations/agentr.py +0 -112
  136. universal_mcp-0.1.12/src/universal_mcp/utils/api_generator.py +0 -269
  137. universal_mcp-0.1.12/uv.lock +0 -3651
  138. {universal_mcp-0.1.12 → universal_mcp-0.1.13}/src/playground/README.md +0 -0
  139. {universal_mcp-0.1.12/src/tests → universal_mcp-0.1.13/src/playground}/__init__.py +0 -0
  140. {universal_mcp-0.1.12 → universal_mcp-0.1.13}/src/playground/schema.py +0 -0
  141. {universal_mcp-0.1.12 → universal_mcp-0.1.13}/src/playground/settings.py +0 -0
  142. {universal_mcp-0.1.12 → universal_mcp-0.1.13}/src/playground/utils.py +0 -0
  143. {universal_mcp-0.1.12/src/universal_mcp → universal_mcp-0.1.13/src/tests}/__init__.py +0 -0
  144. {universal_mcp-0.1.12 → universal_mcp-0.1.13}/src/tests/conftest.py +0 -0
  145. {universal_mcp-0.1.12 → universal_mcp-0.1.13}/src/tests/test_localserver.py +0 -0
  146. {universal_mcp-0.1.12 → universal_mcp-0.1.13}/src/tests/test_tool.py +0 -0
  147. {universal_mcp-0.1.12/src/universal_mcp/applications/ahrefs → universal_mcp-0.1.13/src/universal_mcp}/__init__.py +0 -0
  148. {universal_mcp-0.1.12 → universal_mcp-0.1.13}/src/universal_mcp/analytics.py +0 -0
  149. {universal_mcp-0.1.12 → universal_mcp-0.1.13}/src/universal_mcp/applications/application.py +0 -0
  150. {universal_mcp-0.1.12 → universal_mcp-0.1.13}/src/universal_mcp/config.py +0 -0
  151. {universal_mcp-0.1.12 → universal_mcp-0.1.13}/src/universal_mcp/exceptions.py +0 -0
  152. {universal_mcp-0.1.12 → universal_mcp-0.1.13}/src/universal_mcp/integrations/README.md +0 -0
  153. {universal_mcp-0.1.12 → universal_mcp-0.1.13}/src/universal_mcp/logger.py +0 -0
  154. {universal_mcp-0.1.12 → universal_mcp-0.1.13}/src/universal_mcp/py.typed +0 -0
  155. {universal_mcp-0.1.12 → universal_mcp-0.1.13}/src/universal_mcp/servers/__init__.py +0 -0
  156. {universal_mcp-0.1.12 → universal_mcp-0.1.13}/src/universal_mcp/stores/__init__.py +0 -0
  157. {universal_mcp-0.1.12 → universal_mcp-0.1.13}/src/universal_mcp/stores/store.py +0 -0
  158. {universal_mcp-0.1.12 → universal_mcp-0.1.13}/src/universal_mcp/tools/__init__.py +0 -0
  159. {universal_mcp-0.1.12 → universal_mcp-0.1.13}/src/universal_mcp/tools/adapters.py +0 -0
  160. {universal_mcp-0.1.12 → universal_mcp-0.1.13}/src/universal_mcp/tools/func_metadata.py +0 -0
  161. {universal_mcp-0.1.12 → universal_mcp-0.1.13}/src/universal_mcp/utils/__init__.py +0 -0
  162. {universal_mcp-0.1.12 → universal_mcp-0.1.13}/src/universal_mcp/utils/docstring_parser.py +0 -0
  163. {universal_mcp-0.1.12 → universal_mcp-0.1.13}/src/universal_mcp/utils/dump_app_tools.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.13
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
@@ -17,41 +18,14 @@ Requires-Dist: pydantic>=2.11.1
17
18
  Requires-Dist: pyyaml>=6.0.2
18
19
  Requires-Dist: rich>=14.0.0
19
20
  Requires-Dist: typer>=0.15.2
20
- 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
- Requires-Dist: langchain-mcp-adapters>=0.0.3; extra == 'all'
27
- Requires-Dist: langchain-openai>=0.3.12; extra == 'all'
28
- Requires-Dist: langgraph-checkpoint-sqlite>=2.0.6; extra == 'all'
29
- Requires-Dist: langgraph>=0.3.24; extra == 'all'
30
- Requires-Dist: litellm>=1.30.7; extra == 'all'
31
- Requires-Dist: markitdown[all]>=0.1.1; extra == 'all'
32
- Requires-Dist: pyright>=1.1.398; extra == 'all'
33
- Requires-Dist: pytest-asyncio>=0.26.0; extra == 'all'
34
- Requires-Dist: pytest>=8.3.5; extra == 'all'
35
- Requires-Dist: python-dotenv>=1.0.1; extra == 'all'
36
- Requires-Dist: ruff>=0.11.4; extra == 'all'
37
- Requires-Dist: streamlit>=1.44.1; extra == 'all'
38
- Requires-Dist: watchdog>=6.0.0; extra == 'all'
39
21
  Provides-Extra: dev
40
22
  Requires-Dist: litellm>=1.30.7; extra == 'dev'
23
+ Requires-Dist: pre-commit>=4.2.0; extra == 'dev'
41
24
  Requires-Dist: pyright>=1.1.398; extra == 'dev'
42
25
  Requires-Dist: pytest-asyncio>=0.26.0; extra == 'dev'
43
26
  Requires-Dist: pytest>=8.3.5; extra == 'dev'
44
27
  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
28
  Provides-Extra: playground
54
- Requires-Dist: fastapi[standard]>=0.115.12; extra == 'playground'
55
29
  Requires-Dist: langchain-mcp-adapters>=0.0.3; extra == 'playground'
56
30
  Requires-Dist: langchain-openai>=0.3.12; extra == 'playground'
57
31
  Requires-Dist: langgraph-checkpoint-sqlite>=2.0.6; extra == 'playground'
@@ -59,8 +33,6 @@ Requires-Dist: langgraph>=0.3.24; extra == 'playground'
59
33
  Requires-Dist: python-dotenv>=1.0.1; extra == 'playground'
60
34
  Requires-Dist: streamlit>=1.44.1; extra == 'playground'
61
35
  Requires-Dist: watchdog>=6.0.0; extra == 'playground'
62
- Provides-Extra: serpapi
63
- Requires-Dist: google-search-results>=2.4.2; extra == 'serpapi'
64
36
  Description-Content-Type: text/markdown
65
37
 
66
38
  # Universal MCP
@@ -73,6 +45,8 @@ Universal MCP acts as a middleware layer for your API applications, enabling sea
73
45
  - **Managed Authentication**: Built-in support for API keys and OAuth-based authentication flows
74
46
  - **Extensible Architecture**: Easily build and add new app integrations with minimal boilerplate
75
47
  - **Credential Management**: Flexible storage options for API credentials with memory and environment-based implementations
48
+ - **Tool Management**: Comprehensive tool registration, validation, and execution capabilities
49
+ - **Multiple Server Types**: Support for local, AgentR, and single-application server configurations
76
50
 
77
51
  ## 🔧 Installation
78
52
 
@@ -170,27 +144,7 @@ python src/playground
170
144
  Refer to `src/playground/README.md` for more detailed setup and usage instructions.
171
145
 
172
146
  ## 🧩 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 |
147
+ Visit [https://agentr.dev](https://agentr.dev) to check all available applications
194
148
 
195
149
  *Authentication Type notes:*
196
150
  * *OAuth (AgentR)*: Typically requires configuring the integration with `type: "agentr"` in your `ServerConfig`. Requires the `AGENTR_API_KEY`.
@@ -275,6 +229,15 @@ universal_mcp --version
275
229
  - `litellm` (optional, for `docgen` command)
276
230
  - ... and others specific to certain applications.
277
231
 
232
+ ## 📚 Documentation
233
+
234
+ For more detailed information about specific components:
235
+
236
+ - [Tools Documentation](src/universal_mcp/tools/README.md) - Learn about tool management and conversion
237
+ - [Servers Documentation](src/universal_mcp/servers/README.md) - Understand different server implementations
238
+ - [Stores Documentation](src/universal_mcp/stores/README.md) - Explore credential storage options
239
+ - [Integrations Documentation](src/universal_mcp/integrations/README.md) - Learn about authentication methods
240
+
278
241
  ## 📝 License
279
242
 
280
243
  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.
@@ -0,0 +1,127 @@
1
+ [build-system]
2
+ requires = ["hatchling"]
3
+ build-backend = "hatchling.build"
4
+
5
+ [project]
6
+ name = "universal-mcp"
7
+ version = "0.1.13"
8
+ 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."
9
+ readme = "README.md"
10
+ authors = [
11
+ { name = "Manoj Bajaj", email = "manojbajaj95@gmail.com" }
12
+ ]
13
+ requires-python = ">=3.11"
14
+ license = { text = "MIT" }
15
+ dependencies = [
16
+ "Jinja2>=3.1.3",
17
+ "cookiecutter>=2.6.0",
18
+ "gql[all]>=3.5.2",
19
+ "keyring>=25.6.0",
20
+ "litellm>=1.30.7",
21
+ "loguru>=0.7.3",
22
+ "mcp>=1.6.0",
23
+ "posthog>=3.24.0",
24
+ "pydantic>=2.11.1",
25
+ "pydantic-settings>=2.8.1",
26
+ "pyyaml>=6.0.2",
27
+ "rich>=14.0.0",
28
+ "typer>=0.15.2",
29
+ ]
30
+
31
+ [project.optional-dependencies]
32
+ dev = [
33
+ "litellm>=1.30.7",
34
+ "pre-commit>=4.2.0",
35
+ "pyright>=1.1.398",
36
+ "pytest>=8.3.5",
37
+ "pytest-asyncio>=0.26.0",
38
+ "ruff>=0.11.4",
39
+ ]
40
+ playground = [
41
+ "langchain-mcp-adapters>=0.0.3",
42
+ "langchain-openai>=0.3.12",
43
+ "langgraph>=0.3.24",
44
+ "langgraph-checkpoint-sqlite>=2.0.6",
45
+ "python-dotenv>=1.0.1",
46
+ "streamlit>=1.44.1",
47
+ "watchdog>=6.0.0",
48
+ ]
49
+
50
+ [project.scripts]
51
+ universal_mcp = "universal_mcp.cli:app"
52
+
53
+ # ------------------------------
54
+ # Hatch build configuration
55
+ # ------------------------------
56
+ [tool.hatch.build.targets.sdist]
57
+ include = [
58
+ "/src",
59
+ "/templates", # Important: Include the templates directory!
60
+ ]
61
+
62
+ [tool.hatch.build.targets.wheel]
63
+ packages = ["src/universal_mcp"]
64
+
65
+ [tool.hatch.build.targets.wheel.shared-data]
66
+ "templates" = "universal_mcp/templates"
67
+
68
+ # ------------------------------
69
+ # Tool configurations
70
+ # ------------------------------
71
+ [tool.ruff]
72
+ exclude = [
73
+ ".bzr",
74
+ ".direnv",
75
+ ".eggs",
76
+ ".git",
77
+ ".git-rewrite",
78
+ ".hg",
79
+ ".ipynb_checkpoints",
80
+ ".mypy_cache",
81
+ ".nox",
82
+ ".pants.d",
83
+ ".pyenv",
84
+ ".pytest_cache",
85
+ ".pytype",
86
+ ".ruff_cache",
87
+ ".svn",
88
+ ".tox",
89
+ ".venv",
90
+ ".vscode",
91
+ "__pypackages__",
92
+ "_build",
93
+ "buck-out",
94
+ "build",
95
+ "dist",
96
+ "node_modules",
97
+ "site-packages",
98
+ "venv",
99
+ ]
100
+ line-length = 88
101
+ indent-width = 4
102
+ target-version = "py312"
103
+
104
+ [tool.ruff.lint]
105
+ select = [
106
+ "E", # pycodestyle
107
+ "F", # Pyflakes
108
+ "UP", # pyupgrade
109
+ "B", # flake8-bugbear
110
+ "SIM", # flake8-simplify
111
+ "I", # isort
112
+ ]
113
+ ignore = ['E501', 'B008']
114
+ fixable = ["ALL"]
115
+ unfixable = []
116
+ dummy-variable-rgx = "^(_+|(_+[a-zA-Z0-9_]*[a-zA-Z0-9]+?))$"
117
+
118
+ [tool.ruff.format]
119
+ quote-style = "double"
120
+ indent-style = "space"
121
+ skip-magic-trailing-comma = false
122
+ line-ending = "auto"
123
+ docstring-code-line-length = "dynamic"
124
+
125
+ [tool.pytest.ini_options]
126
+ asyncio_mode = "strict"
127
+ asyncio_default_fixture_loop_scope = "function"
@@ -8,19 +8,16 @@ 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(
15
+ ["universal_mcp", "run", "-c", "local_config.json"]
16
+ )
17
+ processes.append(mcp_process)
18
+ time.sleep(6) # Give MCP server time to start
19
+ logger.info("MCP server started")
15
20
 
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
21
  streamlit_process = subprocess.Popen(
25
22
  ["streamlit", "run", "src/playground/streamlit.py"]
26
23
  )
@@ -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
  }