universal-mcp 0.1.24rc23__tar.gz → 0.1.24rc25__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.
- {universal_mcp-0.1.24rc23 → universal_mcp-0.1.24rc25}/PKG-INFO +1 -1
- {universal_mcp-0.1.24rc23 → universal_mcp-0.1.24rc25}/pyproject.toml +1 -1
- {universal_mcp-0.1.24rc23 → universal_mcp-0.1.24rc25}/src/universal_mcp/agentr/registry.py +15 -3
- {universal_mcp-0.1.24rc23 → universal_mcp-0.1.24rc25}/src/universal_mcp/tools/adapters.py +3 -1
- {universal_mcp-0.1.24rc23 → universal_mcp-0.1.24rc25}/src/universal_mcp/tools/registry.py +4 -1
- {universal_mcp-0.1.24rc23 → universal_mcp-0.1.24rc25}/.gitignore +0 -0
- {universal_mcp-0.1.24rc23 → universal_mcp-0.1.24rc25}/LICENSE +0 -0
- {universal_mcp-0.1.24rc23 → universal_mcp-0.1.24rc25}/README.md +0 -0
- {universal_mcp-0.1.24rc23 → universal_mcp-0.1.24rc25}/src/tests/__init__.py +0 -0
- {universal_mcp-0.1.24rc23 → universal_mcp-0.1.24rc25}/src/tests/conftest.py +0 -0
- {universal_mcp-0.1.24rc23 → universal_mcp-0.1.24rc25}/src/tests/test_api_generator.py +0 -0
- {universal_mcp-0.1.24rc23 → universal_mcp-0.1.24rc25}/src/tests/test_apps.py +0 -0
- {universal_mcp-0.1.24rc23 → universal_mcp-0.1.24rc25}/src/tests/test_local_registry.py +0 -0
- {universal_mcp-0.1.24rc23 → universal_mcp-0.1.24rc25}/src/tests/test_localserver.py +0 -0
- {universal_mcp-0.1.24rc23 → universal_mcp-0.1.24rc25}/src/tests/test_stores.py +0 -0
- {universal_mcp-0.1.24rc23 → universal_mcp-0.1.24rc25}/src/tests/test_tool.py +0 -0
- {universal_mcp-0.1.24rc23 → universal_mcp-0.1.24rc25}/src/tests/test_tool_manager.py +0 -0
- {universal_mcp-0.1.24rc23 → universal_mcp-0.1.24rc25}/src/universal_mcp/agentr/README.md +0 -0
- {universal_mcp-0.1.24rc23 → universal_mcp-0.1.24rc25}/src/universal_mcp/agentr/__init__.py +0 -0
- {universal_mcp-0.1.24rc23 → universal_mcp-0.1.24rc25}/src/universal_mcp/agentr/client.py +0 -0
- {universal_mcp-0.1.24rc23 → universal_mcp-0.1.24rc25}/src/universal_mcp/agentr/integration.py +0 -0
- {universal_mcp-0.1.24rc23 → universal_mcp-0.1.24rc25}/src/universal_mcp/agentr/server.py +0 -0
- {universal_mcp-0.1.24rc23 → universal_mcp-0.1.24rc25}/src/universal_mcp/applications/application.py +0 -0
- {universal_mcp-0.1.24rc23 → universal_mcp-0.1.24rc25}/src/universal_mcp/applications/sample/app.py +0 -0
- {universal_mcp-0.1.24rc23 → universal_mcp-0.1.24rc25}/src/universal_mcp/applications/utils.py +0 -0
- {universal_mcp-0.1.24rc23 → universal_mcp-0.1.24rc25}/src/universal_mcp/cli.py +1 -1
- {universal_mcp-0.1.24rc23 → universal_mcp-0.1.24rc25}/src/universal_mcp/client/oauth.py +0 -0
- {universal_mcp-0.1.24rc23 → universal_mcp-0.1.24rc25}/src/universal_mcp/client/token_store.py +0 -0
- {universal_mcp-0.1.24rc23 → universal_mcp-0.1.24rc25}/src/universal_mcp/client/transport.py +0 -0
- {universal_mcp-0.1.24rc23 → universal_mcp-0.1.24rc25}/src/universal_mcp/config.py +0 -0
- {universal_mcp-0.1.24rc23 → universal_mcp-0.1.24rc25}/src/universal_mcp/exceptions.py +0 -0
- {universal_mcp-0.1.24rc23 → universal_mcp-0.1.24rc25}/src/universal_mcp/integrations/__init__.py +0 -0
- {universal_mcp-0.1.24rc23 → universal_mcp-0.1.24rc25}/src/universal_mcp/integrations/integration.py +0 -0
- {universal_mcp-0.1.24rc23 → universal_mcp-0.1.24rc25}/src/universal_mcp/logger.py +0 -0
- {universal_mcp-0.1.24rc23 → universal_mcp-0.1.24rc25}/src/universal_mcp/py.typed +0 -0
- {universal_mcp-0.1.24rc23 → universal_mcp-0.1.24rc25}/src/universal_mcp/servers/__init__.py +0 -0
- {universal_mcp-0.1.24rc23 → universal_mcp-0.1.24rc25}/src/universal_mcp/servers/server.py +0 -0
- {universal_mcp-0.1.24rc23 → universal_mcp-0.1.24rc25}/src/universal_mcp/stores/__init__.py +0 -0
- {universal_mcp-0.1.24rc23 → universal_mcp-0.1.24rc25}/src/universal_mcp/stores/store.py +0 -0
- {universal_mcp-0.1.24rc23 → universal_mcp-0.1.24rc25}/src/universal_mcp/tools/__init__.py +0 -0
- {universal_mcp-0.1.24rc23 → universal_mcp-0.1.24rc25}/src/universal_mcp/tools/docstring_parser.py +0 -0
- {universal_mcp-0.1.24rc23 → universal_mcp-0.1.24rc25}/src/universal_mcp/tools/func_metadata.py +0 -0
- {universal_mcp-0.1.24rc23 → universal_mcp-0.1.24rc25}/src/universal_mcp/tools/local_registry.py +0 -0
- {universal_mcp-0.1.24rc23 → universal_mcp-0.1.24rc25}/src/universal_mcp/tools/manager.py +0 -0
- {universal_mcp-0.1.24rc23 → universal_mcp-0.1.24rc25}/src/universal_mcp/tools/tools.py +0 -0
- {universal_mcp-0.1.24rc23 → universal_mcp-0.1.24rc25}/src/universal_mcp/types.py +0 -0
- {universal_mcp-0.1.24rc23 → universal_mcp-0.1.24rc25}/src/universal_mcp/utils/__init__.py +0 -0
- {universal_mcp-0.1.24rc23 → universal_mcp-0.1.24rc25}/src/universal_mcp/utils/installation.py +0 -0
- {universal_mcp-0.1.24rc23 → universal_mcp-0.1.24rc25}/src/universal_mcp/utils/openapi/__inti__.py +0 -0
- {universal_mcp-0.1.24rc23 → universal_mcp-0.1.24rc25}/src/universal_mcp/utils/openapi/api_generator.py +0 -0
- {universal_mcp-0.1.24rc23 → universal_mcp-0.1.24rc25}/src/universal_mcp/utils/openapi/api_splitter.py +0 -0
- {universal_mcp-0.1.24rc23 → universal_mcp-0.1.24rc25}/src/universal_mcp/utils/openapi/cli.py +0 -0
- {universal_mcp-0.1.24rc23 → universal_mcp-0.1.24rc25}/src/universal_mcp/utils/openapi/docgen.py +0 -0
- {universal_mcp-0.1.24rc23 → universal_mcp-0.1.24rc25}/src/universal_mcp/utils/openapi/filters.py +0 -0
- {universal_mcp-0.1.24rc23 → universal_mcp-0.1.24rc25}/src/universal_mcp/utils/openapi/openapi.py +0 -0
- {universal_mcp-0.1.24rc23 → universal_mcp-0.1.24rc25}/src/universal_mcp/utils/openapi/postprocessor.py +0 -0
- {universal_mcp-0.1.24rc23 → universal_mcp-0.1.24rc25}/src/universal_mcp/utils/openapi/preprocessor.py +0 -0
- {universal_mcp-0.1.24rc23 → universal_mcp-0.1.24rc25}/src/universal_mcp/utils/openapi/readme.py +0 -0
- {universal_mcp-0.1.24rc23 → universal_mcp-0.1.24rc25}/src/universal_mcp/utils/openapi/test_generator.py +0 -0
- {universal_mcp-0.1.24rc23 → universal_mcp-0.1.24rc25}/src/universal_mcp/utils/prompts.py +0 -0
- {universal_mcp-0.1.24rc23 → universal_mcp-0.1.24rc25}/src/universal_mcp/utils/singleton.py +0 -0
- {universal_mcp-0.1.24rc23 → universal_mcp-0.1.24rc25}/src/universal_mcp/utils/templates/README.md.j2 +0 -0
- {universal_mcp-0.1.24rc23 → universal_mcp-0.1.24rc25}/src/universal_mcp/utils/templates/api_client.py.j2 +0 -0
- {universal_mcp-0.1.24rc23 → universal_mcp-0.1.24rc25}/src/universal_mcp/utils/testing.py +0 -0
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: universal-mcp
|
3
|
-
Version: 0.1.
|
3
|
+
Version: 0.1.24rc25
|
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
|
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
|
|
4
4
|
|
5
5
|
[project]
|
6
6
|
name = "universal-mcp"
|
7
|
-
version = "0.1.24-
|
7
|
+
version = "0.1.24-rc25"
|
8
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
9
|
readme = "README.md"
|
10
10
|
authors = [
|
@@ -1,3 +1,4 @@
|
|
1
|
+
import inspect
|
1
2
|
import base64
|
2
3
|
from typing import Any
|
3
4
|
|
@@ -161,8 +162,6 @@ class AgentrRegistry(ToolRegistry):
|
|
161
162
|
from langchain_core.tools import StructuredTool
|
162
163
|
|
163
164
|
try:
|
164
|
-
# Clear tools from tool manager before loading new tools
|
165
|
-
self.tool_manager.clear_tools()
|
166
165
|
logger.info(f"Exporting tools to {format.value} format")
|
167
166
|
if isinstance(tools, dict):
|
168
167
|
self._load_tools_from_tool_config(tools)
|
@@ -178,6 +177,7 @@ class AgentrRegistry(ToolRegistry):
|
|
178
177
|
|
179
178
|
langchain_tools = []
|
180
179
|
for tool in loaded_tools:
|
180
|
+
full_docstring = inspect.getdoc(tool.fn)
|
181
181
|
|
182
182
|
def create_coroutine(t):
|
183
183
|
async def call_tool_wrapper(**arguments: dict[str, Any]):
|
@@ -190,7 +190,7 @@ class AgentrRegistry(ToolRegistry):
|
|
190
190
|
|
191
191
|
langchain_tool = StructuredTool(
|
192
192
|
name=tool.name,
|
193
|
-
description=tool.description or "",
|
193
|
+
description=full_docstring or tool.description or "",
|
194
194
|
coroutine=create_coroutine(tool),
|
195
195
|
response_format="content",
|
196
196
|
args_schema=tool.parameters,
|
@@ -237,3 +237,15 @@ class AgentrRegistry(ToolRegistry):
|
|
237
237
|
async def list_connected_apps(self) -> list[dict[str, Any]]:
|
238
238
|
"""List all apps that the user has connected."""
|
239
239
|
return self.client.list_my_connections()
|
240
|
+
|
241
|
+
async def authorise_app(self, app_id: str) -> str:
|
242
|
+
"""Authorise an app to connect to the user's account.
|
243
|
+
|
244
|
+
Args:
|
245
|
+
app_id: The ID of the app to authorise
|
246
|
+
|
247
|
+
Returns:
|
248
|
+
String containing authorisation url
|
249
|
+
"""
|
250
|
+
url = self.client.get_authorization_url(app_id=app_id)
|
251
|
+
return url
|
@@ -1,3 +1,4 @@
|
|
1
|
+
import inspect
|
1
2
|
from typing import Any
|
2
3
|
|
3
4
|
from loguru import logger
|
@@ -90,6 +91,7 @@ def convert_tool_to_langchain_tool(
|
|
90
91
|
"""
|
91
92
|
|
92
93
|
logger.debug(f"Converting tool '{tool.name}' to LangChain format")
|
94
|
+
full_docstring = inspect.getdoc(tool.fn)
|
93
95
|
|
94
96
|
async def call_tool(
|
95
97
|
**arguments: dict[str, Any],
|
@@ -101,7 +103,7 @@ def convert_tool_to_langchain_tool(
|
|
101
103
|
|
102
104
|
langchain_tool = StructuredTool(
|
103
105
|
name=tool.name,
|
104
|
-
description=tool.description or "",
|
106
|
+
description=full_docstring or tool.description or "",
|
105
107
|
coroutine=call_tool,
|
106
108
|
response_format="content",
|
107
109
|
args_schema=tool.parameters,
|
@@ -16,6 +16,7 @@ class ToolRegistry(ABC):
|
|
16
16
|
|
17
17
|
def __init__(self):
|
18
18
|
"""Initializes the registry and its internal tool manager."""
|
19
|
+
self._app_instances = {}
|
19
20
|
self.tool_manager = ToolManager()
|
20
21
|
logger.debug(f"{self.__class__.__name__} initialized.")
|
21
22
|
|
@@ -75,7 +76,9 @@ class ToolRegistry(ABC):
|
|
75
76
|
"""Helper method to load and register tools for an app."""
|
76
77
|
logger.info(f"Loading tools for app '{app_name}' (tools: {tool_names or 'default'})")
|
77
78
|
try:
|
78
|
-
|
79
|
+
if app_name not in self._app_instances:
|
80
|
+
self._app_instances[app_name] = self._create_app_instance(app_name)
|
81
|
+
app_instance = self._app_instances[app_name]
|
79
82
|
self.tool_manager.register_tools_from_app(app_instance, tool_names=tool_names)
|
80
83
|
logger.info(f"Successfully registered tools for app: {app_name}")
|
81
84
|
except Exception as e:
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{universal_mcp-0.1.24rc23 → universal_mcp-0.1.24rc25}/src/universal_mcp/agentr/integration.py
RENAMED
File without changes
|
File without changes
|
{universal_mcp-0.1.24rc23 → universal_mcp-0.1.24rc25}/src/universal_mcp/applications/application.py
RENAMED
File without changes
|
{universal_mcp-0.1.24rc23 → universal_mcp-0.1.24rc25}/src/universal_mcp/applications/sample/app.py
RENAMED
File without changes
|
{universal_mcp-0.1.24rc23 → universal_mcp-0.1.24rc25}/src/universal_mcp/applications/utils.py
RENAMED
File without changes
|
File without changes
|
{universal_mcp-0.1.24rc23 → universal_mcp-0.1.24rc25}/src/universal_mcp/client/token_store.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{universal_mcp-0.1.24rc23 → universal_mcp-0.1.24rc25}/src/universal_mcp/integrations/__init__.py
RENAMED
File without changes
|
{universal_mcp-0.1.24rc23 → universal_mcp-0.1.24rc25}/src/universal_mcp/integrations/integration.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{universal_mcp-0.1.24rc23 → universal_mcp-0.1.24rc25}/src/universal_mcp/tools/docstring_parser.py
RENAMED
File without changes
|
{universal_mcp-0.1.24rc23 → universal_mcp-0.1.24rc25}/src/universal_mcp/tools/func_metadata.py
RENAMED
File without changes
|
{universal_mcp-0.1.24rc23 → universal_mcp-0.1.24rc25}/src/universal_mcp/tools/local_registry.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{universal_mcp-0.1.24rc23 → universal_mcp-0.1.24rc25}/src/universal_mcp/utils/installation.py
RENAMED
File without changes
|
{universal_mcp-0.1.24rc23 → universal_mcp-0.1.24rc25}/src/universal_mcp/utils/openapi/__inti__.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
{universal_mcp-0.1.24rc23 → universal_mcp-0.1.24rc25}/src/universal_mcp/utils/openapi/cli.py
RENAMED
File without changes
|
{universal_mcp-0.1.24rc23 → universal_mcp-0.1.24rc25}/src/universal_mcp/utils/openapi/docgen.py
RENAMED
File without changes
|
{universal_mcp-0.1.24rc23 → universal_mcp-0.1.24rc25}/src/universal_mcp/utils/openapi/filters.py
RENAMED
File without changes
|
{universal_mcp-0.1.24rc23 → universal_mcp-0.1.24rc25}/src/universal_mcp/utils/openapi/openapi.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
{universal_mcp-0.1.24rc23 → universal_mcp-0.1.24rc25}/src/universal_mcp/utils/openapi/readme.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{universal_mcp-0.1.24rc23 → universal_mcp-0.1.24rc25}/src/universal_mcp/utils/templates/README.md.j2
RENAMED
File without changes
|
File without changes
|
File without changes
|