universal-mcp 0.1.9rc1__py3-none-any.whl → 0.1.10__py3-none-any.whl
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/applications/application.py +19 -30
- universal_mcp/applications/cal_com_v2/app.py +1676 -1021
- universal_mcp/applications/clickup/app.py +1496 -846
- universal_mcp/applications/falai/README.md +42 -0
- universal_mcp/applications/falai/__init__.py +0 -0
- universal_mcp/applications/falai/app.py +332 -0
- universal_mcp/applications/gong/README.md +88 -0
- universal_mcp/applications/gong/__init__.py +0 -0
- universal_mcp/applications/gong/app.py +2297 -0
- universal_mcp/applications/hashnode/app.py +12 -8
- universal_mcp/applications/hashnode/prompt.md +2 -0
- universal_mcp/applications/heygen/README.md +69 -0
- universal_mcp/applications/heygen/__init__.py +0 -0
- universal_mcp/applications/heygen/app.py +956 -0
- universal_mcp/applications/mailchimp/app.py +3848 -1794
- universal_mcp/applications/replicate/README.md +47 -35
- universal_mcp/applications/replicate/__init__.py +0 -0
- universal_mcp/applications/replicate/app.py +215 -204
- universal_mcp/applications/retell_ai/app.py +84 -67
- universal_mcp/applications/rocketlane/app.py +49 -35
- universal_mcp/applications/spotify/app.py +723 -428
- universal_mcp/applications/supabase/app.py +909 -583
- universal_mcp/servers/server.py +50 -0
- universal_mcp/stores/store.py +2 -3
- universal_mcp/utils/docstring_parser.py +67 -36
- {universal_mcp-0.1.9rc1.dist-info → universal_mcp-0.1.10.dist-info}/METADATA +5 -1
- {universal_mcp-0.1.9rc1.dist-info → universal_mcp-0.1.10.dist-info}/RECORD +29 -19
- {universal_mcp-0.1.9rc1.dist-info → universal_mcp-0.1.10.dist-info}/WHEEL +0 -0
- {universal_mcp-0.1.9rc1.dist-info → universal_mcp-0.1.10.dist-info}/entry_points.txt +0 -0
@@ -39,7 +39,7 @@ class APIApplication(BaseApplication):
|
|
39
39
|
)
|
40
40
|
self._client = None
|
41
41
|
# base_url should be set by subclasses, e.g., self.base_url = "https://api.example.com"
|
42
|
-
self.base_url: str = ""
|
42
|
+
self.base_url: str = "" # Initialize, but subclasses should set this
|
43
43
|
|
44
44
|
def _get_headers(self):
|
45
45
|
if not self.integration:
|
@@ -77,32 +77,30 @@ class APIApplication(BaseApplication):
|
|
77
77
|
}
|
78
78
|
logger.debug("No authentication found in credentials, returning empty headers")
|
79
79
|
return {}
|
80
|
-
|
80
|
+
|
81
81
|
@property
|
82
82
|
def client(self):
|
83
83
|
if not self._client:
|
84
84
|
headers = self._get_headers()
|
85
85
|
if not self.base_url:
|
86
|
-
|
87
|
-
|
88
|
-
|
86
|
+
logger.warning(f"APIApplication '{self.name}' base_url is not set.")
|
87
|
+
# Fallback: Initialize client without base_url, requiring full URLs in methods
|
88
|
+
self._client = httpx.Client(
|
89
|
+
headers=headers, timeout=self.default_timeout
|
90
|
+
)
|
89
91
|
else:
|
90
92
|
self._client = httpx.Client(
|
91
|
-
base_url=self.base_url,
|
93
|
+
base_url=self.base_url, # Pass the base_url here
|
92
94
|
headers=headers,
|
93
|
-
timeout=self.default_timeout
|
95
|
+
timeout=self.default_timeout,
|
94
96
|
)
|
95
97
|
return self._client
|
96
98
|
|
97
99
|
def _get(self, url, params=None):
|
98
100
|
logger.debug(f"Making GET request to {url} with params: {params}")
|
99
|
-
response = self.client.get(
|
100
|
-
url, params=params
|
101
|
-
)
|
101
|
+
response = self.client.get(url, params=params)
|
102
102
|
response.raise_for_status()
|
103
|
-
logger.debug(
|
104
|
-
f"GET request successful with status code: {response.status_code}"
|
105
|
-
)
|
103
|
+
logger.debug(f"GET request successful with status code: {response.status_code}")
|
106
104
|
return response
|
107
105
|
|
108
106
|
def _post(self, url, data, params=None):
|
@@ -120,7 +118,6 @@ class APIApplication(BaseApplication):
|
|
120
118
|
)
|
121
119
|
return response
|
122
120
|
|
123
|
-
|
124
121
|
def _put(self, url, data, params=None):
|
125
122
|
logger.debug(
|
126
123
|
f"Making PUT request to {url} with params: {params} and data: {data}"
|
@@ -131,25 +128,19 @@ class APIApplication(BaseApplication):
|
|
131
128
|
params=params,
|
132
129
|
)
|
133
130
|
response.raise_for_status()
|
134
|
-
logger.debug(
|
135
|
-
f"PUT request successful with status code: {response.status_code}"
|
136
|
-
)
|
131
|
+
logger.debug(f"PUT request successful with status code: {response.status_code}")
|
137
132
|
return response
|
138
133
|
|
139
|
-
|
140
134
|
def _delete(self, url, params=None):
|
141
135
|
# Now `url` can be a relative path if base_url is set in the client
|
142
136
|
logger.debug(f"Making DELETE request to {url} with params: {params}")
|
143
|
-
response = self.client.delete(
|
144
|
-
url, params=params, timeout=self.default_timeout
|
145
|
-
)
|
137
|
+
response = self.client.delete(url, params=params, timeout=self.default_timeout)
|
146
138
|
response.raise_for_status()
|
147
139
|
logger.debug(
|
148
140
|
f"DELETE request successful with status code: {response.status_code}"
|
149
141
|
)
|
150
142
|
return response
|
151
143
|
|
152
|
-
|
153
144
|
def _patch(self, url, data, params=None):
|
154
145
|
# Now `url` can be a relative path if base_url is set in the client
|
155
146
|
logger.debug(
|
@@ -175,8 +166,10 @@ class GraphQLApplication(BaseApplication):
|
|
175
166
|
GraphQLApplication is a collection of tools that can be used by an agent.
|
176
167
|
"""
|
177
168
|
|
178
|
-
def __init__(
|
179
|
-
|
169
|
+
def __init__(
|
170
|
+
self, name: str, base_url: str, integration: Integration = None, **kwargs
|
171
|
+
):
|
172
|
+
super().__init__(name, **kwargs)
|
180
173
|
self.base_url = base_url
|
181
174
|
logger.debug(f"Initializing Application '{name}' with kwargs: {kwargs}")
|
182
175
|
analytics.track_app_loaded(name) # Track app loading
|
@@ -217,15 +210,11 @@ class GraphQLApplication(BaseApplication):
|
|
217
210
|
logger.debug("No authentication found in credentials, returning empty headers")
|
218
211
|
return {}
|
219
212
|
|
220
|
-
|
221
213
|
@property
|
222
214
|
def client(self):
|
223
215
|
if not self._client:
|
224
216
|
headers = self._get_headers()
|
225
|
-
transport = RequestsHTTPTransport(
|
226
|
-
url=self.base_url,
|
227
|
-
headers=headers
|
228
|
-
)
|
217
|
+
transport = RequestsHTTPTransport(url=self.base_url, headers=headers)
|
229
218
|
self._client = Client(transport=transport, fetch_schema_from_transport=True)
|
230
219
|
return self._client
|
231
220
|
|
@@ -241,4 +230,4 @@ class GraphQLApplication(BaseApplication):
|
|
241
230
|
|
242
231
|
@abstractmethod
|
243
232
|
def list_tools(self):
|
244
|
-
pass
|
233
|
+
pass
|