universal-mcp-applications 0.1.32__py3-none-any.whl → 0.1.36rc2__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/ahrefs/app.py +52 -198
- universal_mcp/applications/airtable/app.py +23 -122
- universal_mcp/applications/apollo/app.py +111 -464
- universal_mcp/applications/asana/app.py +417 -1567
- universal_mcp/applications/aws_s3/app.py +36 -103
- universal_mcp/applications/bill/app.py +546 -1957
- universal_mcp/applications/box/app.py +1068 -3981
- universal_mcp/applications/braze/app.py +364 -1430
- universal_mcp/applications/browser_use/app.py +2 -8
- universal_mcp/applications/cal_com_v2/app.py +207 -625
- universal_mcp/applications/calendly/app.py +61 -200
- universal_mcp/applications/canva/app.py +45 -110
- universal_mcp/applications/clickup/app.py +207 -674
- universal_mcp/applications/coda/app.py +146 -426
- universal_mcp/applications/confluence/app.py +310 -1098
- universal_mcp/applications/contentful/app.py +36 -151
- universal_mcp/applications/crustdata/app.py +28 -107
- universal_mcp/applications/dialpad/app.py +283 -756
- universal_mcp/applications/digitalocean/app.py +1766 -5777
- universal_mcp/applications/domain_checker/app.py +3 -54
- universal_mcp/applications/e2b/app.py +14 -64
- universal_mcp/applications/elevenlabs/app.py +9 -47
- universal_mcp/applications/exa/app.py +6 -17
- universal_mcp/applications/falai/app.py +24 -101
- universal_mcp/applications/figma/app.py +53 -137
- universal_mcp/applications/file_system/app.py +2 -13
- universal_mcp/applications/firecrawl/app.py +51 -152
- universal_mcp/applications/fireflies/app.py +59 -281
- universal_mcp/applications/fpl/app.py +91 -528
- universal_mcp/applications/fpl/utils/fixtures.py +15 -49
- universal_mcp/applications/fpl/utils/helper.py +25 -89
- universal_mcp/applications/fpl/utils/league_utils.py +20 -64
- universal_mcp/applications/ghost_content/app.py +52 -161
- universal_mcp/applications/github/app.py +19 -56
- universal_mcp/applications/gong/app.py +88 -248
- universal_mcp/applications/google_calendar/app.py +16 -68
- universal_mcp/applications/google_docs/app.py +85 -189
- universal_mcp/applications/google_drive/app.py +141 -463
- universal_mcp/applications/google_gemini/app.py +12 -64
- universal_mcp/applications/google_mail/app.py +28 -157
- universal_mcp/applications/google_searchconsole/app.py +15 -48
- universal_mcp/applications/google_sheet/app.py +100 -581
- universal_mcp/applications/google_sheet/helper.py +10 -37
- universal_mcp/applications/hashnode/app.py +57 -269
- universal_mcp/applications/heygen/app.py +44 -122
- universal_mcp/applications/http_tools/app.py +10 -32
- universal_mcp/applications/hubspot/api_segments/crm_api.py +460 -1573
- universal_mcp/applications/hubspot/api_segments/marketing_api.py +74 -262
- universal_mcp/applications/hubspot/app.py +23 -87
- universal_mcp/applications/jira/app.py +2071 -7986
- universal_mcp/applications/klaviyo/app.py +494 -1376
- universal_mcp/applications/linkedin/README.md +9 -2
- universal_mcp/applications/linkedin/app.py +240 -181
- universal_mcp/applications/mailchimp/app.py +450 -1605
- universal_mcp/applications/markitdown/app.py +8 -20
- universal_mcp/applications/miro/app.py +217 -699
- universal_mcp/applications/ms_teams/app.py +64 -186
- universal_mcp/applications/neon/app.py +86 -192
- universal_mcp/applications/notion/app.py +21 -36
- universal_mcp/applications/onedrive/app.py +16 -38
- universal_mcp/applications/openai/app.py +42 -165
- universal_mcp/applications/outlook/app.py +24 -84
- universal_mcp/applications/perplexity/app.py +4 -19
- universal_mcp/applications/pipedrive/app.py +832 -3142
- universal_mcp/applications/posthog/app.py +163 -432
- universal_mcp/applications/reddit/app.py +40 -139
- universal_mcp/applications/resend/app.py +41 -107
- universal_mcp/applications/retell/app.py +14 -41
- universal_mcp/applications/rocketlane/app.py +221 -934
- universal_mcp/applications/scraper/README.md +7 -4
- universal_mcp/applications/scraper/app.py +50 -109
- universal_mcp/applications/semanticscholar/app.py +22 -64
- universal_mcp/applications/semrush/app.py +43 -77
- universal_mcp/applications/sendgrid/app.py +512 -1262
- universal_mcp/applications/sentry/app.py +271 -906
- universal_mcp/applications/serpapi/app.py +40 -143
- universal_mcp/applications/sharepoint/app.py +17 -39
- universal_mcp/applications/shopify/app.py +1551 -4287
- universal_mcp/applications/shortcut/app.py +155 -417
- universal_mcp/applications/slack/app.py +33 -115
- universal_mcp/applications/spotify/app.py +126 -325
- universal_mcp/applications/supabase/app.py +104 -213
- universal_mcp/applications/tavily/app.py +1 -1
- universal_mcp/applications/trello/app.py +693 -2656
- universal_mcp/applications/twilio/app.py +14 -50
- universal_mcp/applications/twitter/api_segments/compliance_api.py +4 -14
- universal_mcp/applications/twitter/api_segments/dm_conversations_api.py +6 -18
- universal_mcp/applications/twitter/api_segments/likes_api.py +1 -3
- universal_mcp/applications/twitter/api_segments/lists_api.py +5 -15
- universal_mcp/applications/twitter/api_segments/trends_api.py +1 -3
- universal_mcp/applications/twitter/api_segments/tweets_api.py +9 -31
- universal_mcp/applications/twitter/api_segments/usage_api.py +1 -5
- universal_mcp/applications/twitter/api_segments/users_api.py +14 -42
- universal_mcp/applications/whatsapp/app.py +35 -186
- universal_mcp/applications/whatsapp/audio.py +2 -6
- universal_mcp/applications/whatsapp/whatsapp.py +17 -51
- universal_mcp/applications/whatsapp_business/app.py +70 -283
- universal_mcp/applications/wrike/app.py +45 -118
- universal_mcp/applications/yahoo_finance/app.py +19 -65
- universal_mcp/applications/youtube/app.py +75 -261
- universal_mcp/applications/zenquotes/app.py +2 -2
- {universal_mcp_applications-0.1.32.dist-info → universal_mcp_applications-0.1.36rc2.dist-info}/METADATA +2 -2
- {universal_mcp_applications-0.1.32.dist-info → universal_mcp_applications-0.1.36rc2.dist-info}/RECORD +105 -105
- {universal_mcp_applications-0.1.32.dist-info → universal_mcp_applications-0.1.36rc2.dist-info}/WHEEL +0 -0
- {universal_mcp_applications-0.1.32.dist-info → universal_mcp_applications-0.1.36rc2.dist-info}/licenses/LICENSE +0 -0
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
from typing import Any
|
|
2
|
-
|
|
3
2
|
from universal_mcp.applications.application import APIApplication
|
|
4
3
|
from universal_mcp.integrations import Integration
|
|
5
4
|
|
|
@@ -9,15 +8,8 @@ class FigmaApp(APIApplication):
|
|
|
9
8
|
super().__init__(name="figma", integration=integration, **kwargs)
|
|
10
9
|
self.base_url = "https://api.figma.com"
|
|
11
10
|
|
|
12
|
-
def get_file(
|
|
13
|
-
self,
|
|
14
|
-
file_key,
|
|
15
|
-
version=None,
|
|
16
|
-
ids=None,
|
|
17
|
-
depth=None,
|
|
18
|
-
geometry=None,
|
|
19
|
-
plugin_data=None,
|
|
20
|
-
branch_data=None,
|
|
11
|
+
async def get_file(
|
|
12
|
+
self, file_key, version=None, ids=None, depth=None, geometry=None, plugin_data=None, branch_data=None
|
|
21
13
|
) -> dict[str, Any]:
|
|
22
14
|
"""
|
|
23
15
|
Retrieves a specified file's data (including versions, geometry, and plugin information) from the API using a unique file identifier.
|
|
@@ -56,9 +48,7 @@ class FigmaApp(APIApplication):
|
|
|
56
48
|
response.raise_for_status()
|
|
57
49
|
return response.json()
|
|
58
50
|
|
|
59
|
-
def get_file_nodes(
|
|
60
|
-
self, file_key, ids, version=None, depth=None, geometry=None, plugin_data=None
|
|
61
|
-
) -> dict[str, Any]:
|
|
51
|
+
async def get_file_nodes(self, file_key, ids, version=None, depth=None, geometry=None, plugin_data=None) -> dict[str, Any]:
|
|
62
52
|
"""
|
|
63
53
|
Retrieves nodes related to a file identified by the "file_key" using the specified query parameters for filtering by "ids", "version", "depth", "geometry", and "plugin_data".
|
|
64
54
|
|
|
@@ -81,20 +71,14 @@ class FigmaApp(APIApplication):
|
|
|
81
71
|
url = f"{self.base_url}/v1/files/{file_key}/nodes"
|
|
82
72
|
query_params = {
|
|
83
73
|
k: v
|
|
84
|
-
for k, v in [
|
|
85
|
-
("ids", ids),
|
|
86
|
-
("version", version),
|
|
87
|
-
("depth", depth),
|
|
88
|
-
("geometry", geometry),
|
|
89
|
-
("plugin_data", plugin_data),
|
|
90
|
-
]
|
|
74
|
+
for k, v in [("ids", ids), ("version", version), ("depth", depth), ("geometry", geometry), ("plugin_data", plugin_data)]
|
|
91
75
|
if v is not None
|
|
92
76
|
}
|
|
93
77
|
response = self._get(url, params=query_params)
|
|
94
78
|
response.raise_for_status()
|
|
95
79
|
return response.json()
|
|
96
80
|
|
|
97
|
-
def get_images(
|
|
81
|
+
async def get_images(
|
|
98
82
|
self,
|
|
99
83
|
file_key,
|
|
100
84
|
ids,
|
|
@@ -153,7 +137,7 @@ class FigmaApp(APIApplication):
|
|
|
153
137
|
response.raise_for_status()
|
|
154
138
|
return response.json()
|
|
155
139
|
|
|
156
|
-
def get_image_fills(self, file_key) -> dict[str, Any]:
|
|
140
|
+
async def get_image_fills(self, file_key) -> dict[str, Any]:
|
|
157
141
|
"""
|
|
158
142
|
Retrieves images associated with a file identified by the `{file_key}` using the `/v1/files/{file_key}/images` API endpoint.
|
|
159
143
|
|
|
@@ -174,7 +158,7 @@ class FigmaApp(APIApplication):
|
|
|
174
158
|
response.raise_for_status()
|
|
175
159
|
return response.json()
|
|
176
160
|
|
|
177
|
-
def get_team_projects(self, team_id) -> dict[str, Any]:
|
|
161
|
+
async def get_team_projects(self, team_id) -> dict[str, Any]:
|
|
178
162
|
"""
|
|
179
163
|
Retrieves a list of projects associated with a specific team identified by the team_id parameter.
|
|
180
164
|
|
|
@@ -195,7 +179,7 @@ class FigmaApp(APIApplication):
|
|
|
195
179
|
response.raise_for_status()
|
|
196
180
|
return response.json()
|
|
197
181
|
|
|
198
|
-
def get_project_files(self, project_id, branch_data=None) -> dict[str, Any]:
|
|
182
|
+
async def get_project_files(self, project_id, branch_data=None) -> dict[str, Any]:
|
|
199
183
|
"""
|
|
200
184
|
Retrieves files from a specified project, optionally including branch data, using the provided project identifier.
|
|
201
185
|
|
|
@@ -212,16 +196,12 @@ class FigmaApp(APIApplication):
|
|
|
212
196
|
if project_id is None:
|
|
213
197
|
raise ValueError("Missing required parameter 'project_id'")
|
|
214
198
|
url = f"{self.base_url}/v1/projects/{project_id}/files"
|
|
215
|
-
query_params = {
|
|
216
|
-
k: v for k, v in [("branch_data", branch_data)] if v is not None
|
|
217
|
-
}
|
|
199
|
+
query_params = {k: v for k, v in [("branch_data", branch_data)] if v is not None}
|
|
218
200
|
response = self._get(url, params=query_params)
|
|
219
201
|
response.raise_for_status()
|
|
220
202
|
return response.json()
|
|
221
203
|
|
|
222
|
-
def get_file_versions(
|
|
223
|
-
self, file_key, page_size=None, before=None, after=None
|
|
224
|
-
) -> dict[str, Any]:
|
|
204
|
+
async def get_file_versions(self, file_key, page_size=None, before=None, after=None) -> dict[str, Any]:
|
|
225
205
|
"""
|
|
226
206
|
Retrieves a list of file versions using the "GET" method, filtering by file key and optional query parameters for pagination and sorting.
|
|
227
207
|
|
|
@@ -240,16 +220,12 @@ class FigmaApp(APIApplication):
|
|
|
240
220
|
if file_key is None:
|
|
241
221
|
raise ValueError("Missing required parameter 'file_key'")
|
|
242
222
|
url = f"{self.base_url}/v1/files/{file_key}/versions"
|
|
243
|
-
query_params = {
|
|
244
|
-
k: v
|
|
245
|
-
for k, v in [("page_size", page_size), ("before", before), ("after", after)]
|
|
246
|
-
if v is not None
|
|
247
|
-
}
|
|
223
|
+
query_params = {k: v for k, v in [("page_size", page_size), ("before", before), ("after", after)] if v is not None}
|
|
248
224
|
response = self._get(url, params=query_params)
|
|
249
225
|
response.raise_for_status()
|
|
250
226
|
return response.json()
|
|
251
227
|
|
|
252
|
-
def get_comments(self, file_key, as_md=None) -> dict[str, Any]:
|
|
228
|
+
async def get_comments(self, file_key, as_md=None) -> dict[str, Any]:
|
|
253
229
|
"""
|
|
254
230
|
Retrieves comments associated with a specified file and optionally returns them in Markdown format based on the query parameter.
|
|
255
231
|
|
|
@@ -271,9 +247,7 @@ class FigmaApp(APIApplication):
|
|
|
271
247
|
response.raise_for_status()
|
|
272
248
|
return response.json()
|
|
273
249
|
|
|
274
|
-
def post_comment(
|
|
275
|
-
self, file_key, message, comment_id=None, client_meta=None
|
|
276
|
-
) -> dict[str, Any]:
|
|
250
|
+
async def post_comment(self, file_key, message, comment_id=None, client_meta=None) -> dict[str, Any]:
|
|
277
251
|
"""
|
|
278
252
|
Creates a new comment on a file specified by the file_key and returns an appropriate status code.
|
|
279
253
|
|
|
@@ -291,11 +265,7 @@ class FigmaApp(APIApplication):
|
|
|
291
265
|
"""
|
|
292
266
|
if file_key is None:
|
|
293
267
|
raise ValueError("Missing required parameter 'file_key'")
|
|
294
|
-
request_body = {
|
|
295
|
-
"message": message,
|
|
296
|
-
"comment_id": comment_id,
|
|
297
|
-
"client_meta": client_meta,
|
|
298
|
-
}
|
|
268
|
+
request_body = {"message": message, "comment_id": comment_id, "client_meta": client_meta}
|
|
299
269
|
request_body = {k: v for k, v in request_body.items() if v is not None}
|
|
300
270
|
url = f"{self.base_url}/v1/files/{file_key}/comments"
|
|
301
271
|
query_params = {}
|
|
@@ -303,7 +273,7 @@ class FigmaApp(APIApplication):
|
|
|
303
273
|
response.raise_for_status()
|
|
304
274
|
return response.json()
|
|
305
275
|
|
|
306
|
-
def delete_comment(self, file_key, comment_id) -> dict[str, Any]:
|
|
276
|
+
async def delete_comment(self, file_key, comment_id) -> dict[str, Any]:
|
|
307
277
|
"""
|
|
308
278
|
Deletes a specified comment from a file identified by its file key and comment ID.
|
|
309
279
|
|
|
@@ -327,9 +297,7 @@ class FigmaApp(APIApplication):
|
|
|
327
297
|
response.raise_for_status()
|
|
328
298
|
return response.json()
|
|
329
299
|
|
|
330
|
-
def get_comment_reactions(
|
|
331
|
-
self, file_key, comment_id, cursor=None
|
|
332
|
-
) -> dict[str, Any]:
|
|
300
|
+
async def get_comment_reactions(self, file_key, comment_id, cursor=None) -> dict[str, Any]:
|
|
333
301
|
"""
|
|
334
302
|
Retrieves reactions for a specific comment in a file using the provided file key and comment ID.
|
|
335
303
|
|
|
@@ -354,7 +322,7 @@ class FigmaApp(APIApplication):
|
|
|
354
322
|
response.raise_for_status()
|
|
355
323
|
return response.json()
|
|
356
324
|
|
|
357
|
-
def post_comment_reaction(self, file_key, comment_id, emoji) -> dict[str, Any]:
|
|
325
|
+
async def post_comment_reaction(self, file_key, comment_id, emoji) -> dict[str, Any]:
|
|
358
326
|
"""
|
|
359
327
|
Adds a reaction to a specific comment on a file identified by the file key and comment ID using the "POST" method at the "/v1/files/{file_key}/comments/{comment_id}/reactions" endpoint.
|
|
360
328
|
|
|
@@ -373,9 +341,7 @@ class FigmaApp(APIApplication):
|
|
|
373
341
|
raise ValueError("Missing required parameter 'file_key'")
|
|
374
342
|
if comment_id is None:
|
|
375
343
|
raise ValueError("Missing required parameter 'comment_id'")
|
|
376
|
-
request_body = {
|
|
377
|
-
"emoji": emoji,
|
|
378
|
-
}
|
|
344
|
+
request_body = {"emoji": emoji}
|
|
379
345
|
request_body = {k: v for k, v in request_body.items() if v is not None}
|
|
380
346
|
url = f"{self.base_url}/v1/files/{file_key}/comments/{comment_id}/reactions"
|
|
381
347
|
query_params = {}
|
|
@@ -383,7 +349,7 @@ class FigmaApp(APIApplication):
|
|
|
383
349
|
response.raise_for_status()
|
|
384
350
|
return response.json()
|
|
385
351
|
|
|
386
|
-
def delete_comment_reaction(self, file_key, comment_id, emoji) -> dict[str, Any]:
|
|
352
|
+
async def delete_comment_reaction(self, file_key, comment_id, emoji) -> dict[str, Any]:
|
|
387
353
|
"""
|
|
388
354
|
Removes a reaction emoji from a comment on a file using the specified emoji parameter.
|
|
389
355
|
|
|
@@ -408,7 +374,7 @@ class FigmaApp(APIApplication):
|
|
|
408
374
|
response.raise_for_status()
|
|
409
375
|
return response.json()
|
|
410
376
|
|
|
411
|
-
def get_me(self) -> Any:
|
|
377
|
+
async def get_me(self) -> Any:
|
|
412
378
|
"""
|
|
413
379
|
Retrieves the authenticated user's profile data.
|
|
414
380
|
|
|
@@ -424,9 +390,7 @@ class FigmaApp(APIApplication):
|
|
|
424
390
|
response.raise_for_status()
|
|
425
391
|
return response.json()
|
|
426
392
|
|
|
427
|
-
def get_team_components(
|
|
428
|
-
self, team_id, page_size=None, after=None, before=None
|
|
429
|
-
) -> dict[str, Any]:
|
|
393
|
+
async def get_team_components(self, team_id, page_size=None, after=None, before=None) -> dict[str, Any]:
|
|
430
394
|
"""
|
|
431
395
|
Retrieves a list of components for a specified team with pagination support using page_size, after, and before parameters.
|
|
432
396
|
|
|
@@ -445,16 +409,12 @@ class FigmaApp(APIApplication):
|
|
|
445
409
|
if team_id is None:
|
|
446
410
|
raise ValueError("Missing required parameter 'team_id'")
|
|
447
411
|
url = f"{self.base_url}/v1/teams/{team_id}/components"
|
|
448
|
-
query_params = {
|
|
449
|
-
k: v
|
|
450
|
-
for k, v in [("page_size", page_size), ("after", after), ("before", before)]
|
|
451
|
-
if v is not None
|
|
452
|
-
}
|
|
412
|
+
query_params = {k: v for k, v in [("page_size", page_size), ("after", after), ("before", before)] if v is not None}
|
|
453
413
|
response = self._get(url, params=query_params)
|
|
454
414
|
response.raise_for_status()
|
|
455
415
|
return response.json()
|
|
456
416
|
|
|
457
|
-
def get_file_components(self, file_key) -> dict[str, Any]:
|
|
417
|
+
async def get_file_components(self, file_key) -> dict[str, Any]:
|
|
458
418
|
"""
|
|
459
419
|
Retrieves a list of components associated with a file identified by the specified file key using the API endpoint "/v1/files/{file_key}/components".
|
|
460
420
|
|
|
@@ -475,7 +435,7 @@ class FigmaApp(APIApplication):
|
|
|
475
435
|
response.raise_for_status()
|
|
476
436
|
return response.json()
|
|
477
437
|
|
|
478
|
-
def get_component(self, key) -> dict[str, Any]:
|
|
438
|
+
async def get_component(self, key) -> dict[str, Any]:
|
|
479
439
|
"""
|
|
480
440
|
Retrieves component information for a specific key using the API endpoint at "/v1/components/{key}" with the GET method.
|
|
481
441
|
|
|
@@ -496,9 +456,7 @@ class FigmaApp(APIApplication):
|
|
|
496
456
|
response.raise_for_status()
|
|
497
457
|
return response.json()
|
|
498
458
|
|
|
499
|
-
def get_team_component_sets(
|
|
500
|
-
self, team_id, page_size=None, after=None, before=None
|
|
501
|
-
) -> dict[str, Any]:
|
|
459
|
+
async def get_team_component_sets(self, team_id, page_size=None, after=None, before=None) -> dict[str, Any]:
|
|
502
460
|
"""
|
|
503
461
|
Retrieves a paginated list of component sets associated with a specific team ID, supporting pagination via page size, after, and before query parameters.
|
|
504
462
|
|
|
@@ -517,16 +475,12 @@ class FigmaApp(APIApplication):
|
|
|
517
475
|
if team_id is None:
|
|
518
476
|
raise ValueError("Missing required parameter 'team_id'")
|
|
519
477
|
url = f"{self.base_url}/v1/teams/{team_id}/component_sets"
|
|
520
|
-
query_params = {
|
|
521
|
-
k: v
|
|
522
|
-
for k, v in [("page_size", page_size), ("after", after), ("before", before)]
|
|
523
|
-
if v is not None
|
|
524
|
-
}
|
|
478
|
+
query_params = {k: v for k, v in [("page_size", page_size), ("after", after), ("before", before)] if v is not None}
|
|
525
479
|
response = self._get(url, params=query_params)
|
|
526
480
|
response.raise_for_status()
|
|
527
481
|
return response.json()
|
|
528
482
|
|
|
529
|
-
def get_file_component_sets(self, file_key) -> dict[str, Any]:
|
|
483
|
+
async def get_file_component_sets(self, file_key) -> dict[str, Any]:
|
|
530
484
|
"""
|
|
531
485
|
Retrieves the component sets associated with a file identified by a specific file key using the "GET" method at the "/v1/files/{file_key}/component_sets" endpoint.
|
|
532
486
|
|
|
@@ -547,7 +501,7 @@ class FigmaApp(APIApplication):
|
|
|
547
501
|
response.raise_for_status()
|
|
548
502
|
return response.json()
|
|
549
503
|
|
|
550
|
-
def get_component_set(self, key) -> dict[str, Any]:
|
|
504
|
+
async def get_component_set(self, key) -> dict[str, Any]:
|
|
551
505
|
"""
|
|
552
506
|
Retrieves a component set by its unique key identifier and returns the associated component data.
|
|
553
507
|
|
|
@@ -568,9 +522,7 @@ class FigmaApp(APIApplication):
|
|
|
568
522
|
response.raise_for_status()
|
|
569
523
|
return response.json()
|
|
570
524
|
|
|
571
|
-
def get_team_styles(
|
|
572
|
-
self, team_id, page_size=None, after=None, before=None
|
|
573
|
-
) -> dict[str, Any]:
|
|
525
|
+
async def get_team_styles(self, team_id, page_size=None, after=None, before=None) -> dict[str, Any]:
|
|
574
526
|
"""
|
|
575
527
|
Retrieves paginated style resources associated with a specific team using query parameters for pagination control.
|
|
576
528
|
|
|
@@ -589,16 +541,12 @@ class FigmaApp(APIApplication):
|
|
|
589
541
|
if team_id is None:
|
|
590
542
|
raise ValueError("Missing required parameter 'team_id'")
|
|
591
543
|
url = f"{self.base_url}/v1/teams/{team_id}/styles"
|
|
592
|
-
query_params = {
|
|
593
|
-
k: v
|
|
594
|
-
for k, v in [("page_size", page_size), ("after", after), ("before", before)]
|
|
595
|
-
if v is not None
|
|
596
|
-
}
|
|
544
|
+
query_params = {k: v for k, v in [("page_size", page_size), ("after", after), ("before", before)] if v is not None}
|
|
597
545
|
response = self._get(url, params=query_params)
|
|
598
546
|
response.raise_for_status()
|
|
599
547
|
return response.json()
|
|
600
548
|
|
|
601
|
-
def get_file_styles(self, file_key) -> dict[str, Any]:
|
|
549
|
+
async def get_file_styles(self, file_key) -> dict[str, Any]:
|
|
602
550
|
"""
|
|
603
551
|
Retrieves styles information for a specific file identified by the file key using the API endpoint "/v1/files/{file_key}/styles" with the GET method.
|
|
604
552
|
|
|
@@ -619,7 +567,7 @@ class FigmaApp(APIApplication):
|
|
|
619
567
|
response.raise_for_status()
|
|
620
568
|
return response.json()
|
|
621
569
|
|
|
622
|
-
def get_style(self, key) -> dict[str, Any]:
|
|
570
|
+
async def get_style(self, key) -> dict[str, Any]:
|
|
623
571
|
"""
|
|
624
572
|
Retrieves a style object associated with the specified key using the "GET" method at the "/v1/styles/{key}" endpoint.
|
|
625
573
|
|
|
@@ -640,9 +588,7 @@ class FigmaApp(APIApplication):
|
|
|
640
588
|
response.raise_for_status()
|
|
641
589
|
return response.json()
|
|
642
590
|
|
|
643
|
-
def post_webhook(
|
|
644
|
-
self, event_type, team_id, endpoint, passcode, status=None, description=None
|
|
645
|
-
) -> dict[str, Any]:
|
|
591
|
+
async def post_webhook(self, event_type, team_id, endpoint, passcode, status=None, description=None) -> dict[str, Any]:
|
|
646
592
|
"""
|
|
647
593
|
Registers a new webhook to receive HTTP callbacks for specified events, returning success or error status codes.
|
|
648
594
|
|
|
@@ -677,7 +623,7 @@ class FigmaApp(APIApplication):
|
|
|
677
623
|
response.raise_for_status()
|
|
678
624
|
return response.json()
|
|
679
625
|
|
|
680
|
-
def get_webhook(self, webhook_id) -> dict[str, Any]:
|
|
626
|
+
async def get_webhook(self, webhook_id) -> dict[str, Any]:
|
|
681
627
|
"""
|
|
682
628
|
Retrieves information about a specific webhook by its ID using the "GET" method at the path "/v2/webhooks/{webhook_id}".
|
|
683
629
|
|
|
@@ -698,9 +644,7 @@ class FigmaApp(APIApplication):
|
|
|
698
644
|
response.raise_for_status()
|
|
699
645
|
return response.json()
|
|
700
646
|
|
|
701
|
-
def put_webhook(
|
|
702
|
-
self, webhook_id, event_type, endpoint, passcode, status=None, description=None
|
|
703
|
-
) -> dict[str, Any]:
|
|
647
|
+
async def put_webhook(self, webhook_id, event_type, endpoint, passcode, status=None, description=None) -> dict[str, Any]:
|
|
704
648
|
"""
|
|
705
649
|
Updates an existing webhook's configuration using the provided webhook ID and returns an HTTP status code indicating success or failure.
|
|
706
650
|
|
|
@@ -722,13 +666,7 @@ class FigmaApp(APIApplication):
|
|
|
722
666
|
"""
|
|
723
667
|
if webhook_id is None:
|
|
724
668
|
raise ValueError("Missing required parameter 'webhook_id'")
|
|
725
|
-
request_body = {
|
|
726
|
-
"event_type": event_type,
|
|
727
|
-
"endpoint": endpoint,
|
|
728
|
-
"passcode": passcode,
|
|
729
|
-
"status": status,
|
|
730
|
-
"description": description,
|
|
731
|
-
}
|
|
669
|
+
request_body = {"event_type": event_type, "endpoint": endpoint, "passcode": passcode, "status": status, "description": description}
|
|
732
670
|
request_body = {k: v for k, v in request_body.items() if v is not None}
|
|
733
671
|
url = f"{self.base_url}/v2/webhooks/{webhook_id}"
|
|
734
672
|
query_params = {}
|
|
@@ -736,7 +674,7 @@ class FigmaApp(APIApplication):
|
|
|
736
674
|
response.raise_for_status()
|
|
737
675
|
return response.json()
|
|
738
676
|
|
|
739
|
-
def delete_webhook(self, webhook_id) -> dict[str, Any]:
|
|
677
|
+
async def delete_webhook(self, webhook_id) -> dict[str, Any]:
|
|
740
678
|
"""
|
|
741
679
|
Deletes a webhook identified by its `webhook_id`, permanently removing it to manage and optimize webhook configurations.
|
|
742
680
|
|
|
@@ -757,7 +695,7 @@ class FigmaApp(APIApplication):
|
|
|
757
695
|
response.raise_for_status()
|
|
758
696
|
return response.json()
|
|
759
697
|
|
|
760
|
-
def get_team_webhooks(self, team_id) -> dict[str, Any]:
|
|
698
|
+
async def get_team_webhooks(self, team_id) -> dict[str, Any]:
|
|
761
699
|
"""
|
|
762
700
|
Retrieves a list of webhooks for a specified team using the "GET" method, with the team identified by the `team_id` path parameter.
|
|
763
701
|
|
|
@@ -778,7 +716,7 @@ class FigmaApp(APIApplication):
|
|
|
778
716
|
response.raise_for_status()
|
|
779
717
|
return response.json()
|
|
780
718
|
|
|
781
|
-
def get_webhook_requests(self, webhook_id) -> dict[str, Any]:
|
|
719
|
+
async def get_webhook_requests(self, webhook_id) -> dict[str, Any]:
|
|
782
720
|
"""
|
|
783
721
|
Retrieves a list of requests for a specific webhook identified by `{webhook_id}` using the "GET" method.
|
|
784
722
|
|
|
@@ -799,9 +737,7 @@ class FigmaApp(APIApplication):
|
|
|
799
737
|
response.raise_for_status()
|
|
800
738
|
return response.json()
|
|
801
739
|
|
|
802
|
-
def get_activity_logs(
|
|
803
|
-
self, events=None, start_time=None, end_time=None, limit=None, order=None
|
|
804
|
-
) -> dict[str, Any]:
|
|
740
|
+
async def get_activity_logs(self, events=None, start_time=None, end_time=None, limit=None, order=None) -> dict[str, Any]:
|
|
805
741
|
"""
|
|
806
742
|
Retrieves a list of activity logs filtered by specified events, time range, and other parameters, returning the results in a specified order with a limited number of entries.
|
|
807
743
|
|
|
@@ -821,26 +757,15 @@ class FigmaApp(APIApplication):
|
|
|
821
757
|
url = f"{self.base_url}/v1/activity_logs"
|
|
822
758
|
query_params = {
|
|
823
759
|
k: v
|
|
824
|
-
for k, v in [
|
|
825
|
-
("events", events),
|
|
826
|
-
("start_time", start_time),
|
|
827
|
-
("end_time", end_time),
|
|
828
|
-
("limit", limit),
|
|
829
|
-
("order", order),
|
|
830
|
-
]
|
|
760
|
+
for k, v in [("events", events), ("start_time", start_time), ("end_time", end_time), ("limit", limit), ("order", order)]
|
|
831
761
|
if v is not None
|
|
832
762
|
}
|
|
833
763
|
response = self._get(url, params=query_params)
|
|
834
764
|
response.raise_for_status()
|
|
835
765
|
return response.json()
|
|
836
766
|
|
|
837
|
-
def get_payments(
|
|
838
|
-
self,
|
|
839
|
-
plugin_payment_token=None,
|
|
840
|
-
user_id=None,
|
|
841
|
-
community_file_id=None,
|
|
842
|
-
plugin_id=None,
|
|
843
|
-
widget_id=None,
|
|
767
|
+
async def get_payments(
|
|
768
|
+
self, plugin_payment_token=None, user_id=None, community_file_id=None, plugin_id=None, widget_id=None
|
|
844
769
|
) -> dict[str, Any]:
|
|
845
770
|
"""
|
|
846
771
|
Retrieves payment information based on specified parameters, including plugin payment token, user ID, community file ID, plugin ID, and widget ID, using the "/v1/payments" API endpoint with a GET request.
|
|
@@ -874,7 +799,7 @@ class FigmaApp(APIApplication):
|
|
|
874
799
|
response.raise_for_status()
|
|
875
800
|
return response.json()
|
|
876
801
|
|
|
877
|
-
def get_local_variables(self, file_key) -> dict[str, Any]:
|
|
802
|
+
async def get_local_variables(self, file_key) -> dict[str, Any]:
|
|
878
803
|
"""
|
|
879
804
|
Retrieves local variables for a file specified by the "file_key" using the "GET" method.
|
|
880
805
|
|
|
@@ -895,7 +820,7 @@ class FigmaApp(APIApplication):
|
|
|
895
820
|
response.raise_for_status()
|
|
896
821
|
return response.json()
|
|
897
822
|
|
|
898
|
-
def get_published_variables(self, file_key) -> dict[str, Any]:
|
|
823
|
+
async def get_published_variables(self, file_key) -> dict[str, Any]:
|
|
899
824
|
"""
|
|
900
825
|
Retrieves the published variables for a file identified by the `{file_key}` using the `GET` method.
|
|
901
826
|
|
|
@@ -916,13 +841,8 @@ class FigmaApp(APIApplication):
|
|
|
916
841
|
response.raise_for_status()
|
|
917
842
|
return response.json()
|
|
918
843
|
|
|
919
|
-
def post_variables(
|
|
920
|
-
self,
|
|
921
|
-
file_key,
|
|
922
|
-
variableCollections=None,
|
|
923
|
-
variableModes=None,
|
|
924
|
-
variables=None,
|
|
925
|
-
variableModeValues=None,
|
|
844
|
+
async def post_variables(
|
|
845
|
+
self, file_key, variableCollections=None, variableModes=None, variables=None, variableModeValues=None
|
|
926
846
|
) -> dict[str, Any]:
|
|
927
847
|
"""
|
|
928
848
|
Creates variables for a specific file identified by its file_key and returns an appropriate status code based on the operation's outcome.
|
|
@@ -955,7 +875,7 @@ class FigmaApp(APIApplication):
|
|
|
955
875
|
response.raise_for_status()
|
|
956
876
|
return response.json()
|
|
957
877
|
|
|
958
|
-
def get_dev_resources(self, file_key, node_ids=None) -> dict[str, Any]:
|
|
878
|
+
async def get_dev_resources(self, file_key, node_ids=None) -> dict[str, Any]:
|
|
959
879
|
"""
|
|
960
880
|
Retrieves development resources associated with a specific file, identified by its file_key, with optional filtering by node IDs.
|
|
961
881
|
|
|
@@ -977,7 +897,7 @@ class FigmaApp(APIApplication):
|
|
|
977
897
|
response.raise_for_status()
|
|
978
898
|
return response.json()
|
|
979
899
|
|
|
980
|
-
def post_dev_resources(self, dev_resources) -> dict[str, Any]:
|
|
900
|
+
async def post_dev_resources(self, dev_resources) -> dict[str, Any]:
|
|
981
901
|
"""
|
|
982
902
|
Creates developer resources via the API and returns a status response.
|
|
983
903
|
|
|
@@ -990,9 +910,7 @@ class FigmaApp(APIApplication):
|
|
|
990
910
|
Tags:
|
|
991
911
|
Dev Resources
|
|
992
912
|
"""
|
|
993
|
-
request_body = {
|
|
994
|
-
"dev_resources": dev_resources,
|
|
995
|
-
}
|
|
913
|
+
request_body = {"dev_resources": dev_resources}
|
|
996
914
|
request_body = {k: v for k, v in request_body.items() if v is not None}
|
|
997
915
|
url = f"{self.base_url}/v1/dev_resources"
|
|
998
916
|
query_params = {}
|
|
@@ -1000,7 +918,7 @@ class FigmaApp(APIApplication):
|
|
|
1000
918
|
response.raise_for_status()
|
|
1001
919
|
return response.json()
|
|
1002
920
|
|
|
1003
|
-
def put_dev_resources(self, dev_resources) -> dict[str, Any]:
|
|
921
|
+
async def put_dev_resources(self, dev_resources) -> dict[str, Any]:
|
|
1004
922
|
"""
|
|
1005
923
|
Replaces a specific developer resource at the specified path with updated data, returning a status code for success or error conditions.
|
|
1006
924
|
|
|
@@ -1013,9 +931,7 @@ class FigmaApp(APIApplication):
|
|
|
1013
931
|
Tags:
|
|
1014
932
|
Dev Resources
|
|
1015
933
|
"""
|
|
1016
|
-
request_body = {
|
|
1017
|
-
"dev_resources": dev_resources,
|
|
1018
|
-
}
|
|
934
|
+
request_body = {"dev_resources": dev_resources}
|
|
1019
935
|
request_body = {k: v for k, v in request_body.items() if v is not None}
|
|
1020
936
|
url = f"{self.base_url}/v1/dev_resources"
|
|
1021
937
|
query_params = {}
|
|
@@ -1023,7 +939,7 @@ class FigmaApp(APIApplication):
|
|
|
1023
939
|
response.raise_for_status()
|
|
1024
940
|
return response.json()
|
|
1025
941
|
|
|
1026
|
-
def delete_dev_resource(self, file_key, dev_resource_id) -> Any:
|
|
942
|
+
async def delete_dev_resource(self, file_key, dev_resource_id) -> Any:
|
|
1027
943
|
"""
|
|
1028
944
|
Deletes a specific development resource associated with a file using the provided file key and development resource ID.
|
|
1029
945
|
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import os
|
|
2
2
|
import shutil
|
|
3
3
|
import uuid
|
|
4
|
-
|
|
5
4
|
from universal_mcp.applications.application import BaseApplication
|
|
6
5
|
|
|
7
6
|
|
|
@@ -63,14 +62,7 @@ class FileSystemApp(BaseApplication):
|
|
|
63
62
|
file_path = await FileSystemApp._generate_file_path()
|
|
64
63
|
with open(file_path, "wb") as f:
|
|
65
64
|
f.write(file_data)
|
|
66
|
-
result = {
|
|
67
|
-
"status": "success",
|
|
68
|
-
"data": {
|
|
69
|
-
"url": file_path,
|
|
70
|
-
"filename": file_path,
|
|
71
|
-
"size": len(file_data),
|
|
72
|
-
},
|
|
73
|
-
}
|
|
65
|
+
result = {"status": "success", "data": {"url": file_path, "filename": file_path, "size": len(file_data)}}
|
|
74
66
|
return result
|
|
75
67
|
|
|
76
68
|
@staticmethod
|
|
@@ -98,7 +90,4 @@ class FileSystemApp(BaseApplication):
|
|
|
98
90
|
return {"status": "success"}
|
|
99
91
|
|
|
100
92
|
def list_tools(self):
|
|
101
|
-
return [
|
|
102
|
-
FileSystemApp.read_file,
|
|
103
|
-
FileSystemApp.write_file,
|
|
104
|
-
]
|
|
93
|
+
return [FileSystemApp.read_file, FileSystemApp.write_file]
|