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.
Files changed (29) hide show
  1. universal_mcp/applications/application.py +19 -30
  2. universal_mcp/applications/cal_com_v2/app.py +1676 -1021
  3. universal_mcp/applications/clickup/app.py +1496 -846
  4. universal_mcp/applications/falai/README.md +42 -0
  5. universal_mcp/applications/falai/__init__.py +0 -0
  6. universal_mcp/applications/falai/app.py +332 -0
  7. universal_mcp/applications/gong/README.md +88 -0
  8. universal_mcp/applications/gong/__init__.py +0 -0
  9. universal_mcp/applications/gong/app.py +2297 -0
  10. universal_mcp/applications/hashnode/app.py +12 -8
  11. universal_mcp/applications/hashnode/prompt.md +2 -0
  12. universal_mcp/applications/heygen/README.md +69 -0
  13. universal_mcp/applications/heygen/__init__.py +0 -0
  14. universal_mcp/applications/heygen/app.py +956 -0
  15. universal_mcp/applications/mailchimp/app.py +3848 -1794
  16. universal_mcp/applications/replicate/README.md +47 -35
  17. universal_mcp/applications/replicate/__init__.py +0 -0
  18. universal_mcp/applications/replicate/app.py +215 -204
  19. universal_mcp/applications/retell_ai/app.py +84 -67
  20. universal_mcp/applications/rocketlane/app.py +49 -35
  21. universal_mcp/applications/spotify/app.py +723 -428
  22. universal_mcp/applications/supabase/app.py +909 -583
  23. universal_mcp/servers/server.py +50 -0
  24. universal_mcp/stores/store.py +2 -3
  25. universal_mcp/utils/docstring_parser.py +67 -36
  26. {universal_mcp-0.1.9rc1.dist-info → universal_mcp-0.1.10.dist-info}/METADATA +5 -1
  27. {universal_mcp-0.1.9rc1.dist-info → universal_mcp-0.1.10.dist-info}/RECORD +29 -19
  28. {universal_mcp-0.1.9rc1.dist-info → universal_mcp-0.1.10.dist-info}/WHEEL +0 -0
  29. {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 = "" # Initialize, but subclasses should set this
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
- 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(headers=headers, timeout=self.default_timeout)
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, # Pass the base_url here
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__(self, name: str, base_url: str, integration: Integration = None, **kwargs):
179
- super().__init__(name,**kwargs)
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