universal-mcp-applications 0.1.30rc1__py3-none-any.whl → 0.1.36rc1__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.
Potentially problematic release.
This version of universal-mcp-applications might be problematic. Click here for more details.
- 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 +33 -100
- 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 +23 -100
- 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 +88 -188
- universal_mcp/applications/google_drive/app.py +140 -462
- 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 +101 -578
- 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 +23 -4
- universal_mcp/applications/linkedin/app.py +392 -212
- 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 +14 -36
- universal_mcp/applications/openai/app.py +42 -165
- universal_mcp/applications/outlook/app.py +16 -76
- 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 +280 -93
- 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 +15 -37
- universal_mcp/applications/shopify/app.py +1551 -4287
- universal_mcp/applications/shortcut/app.py +155 -417
- universal_mcp/applications/slack/app.py +50 -101
- 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.30rc1.dist-info → universal_mcp_applications-0.1.36rc1.dist-info}/METADATA +2 -2
- {universal_mcp_applications-0.1.30rc1.dist-info → universal_mcp_applications-0.1.36rc1.dist-info}/RECORD +105 -106
- universal_mcp/applications/scraper/scraper_testers.py +0 -17
- {universal_mcp_applications-0.1.30rc1.dist-info → universal_mcp_applications-0.1.36rc1.dist-info}/WHEEL +0 -0
- {universal_mcp_applications-0.1.30rc1.dist-info → universal_mcp_applications-0.1.36rc1.dist-info}/licenses/LICENSE +0 -0
|
@@ -1,10 +1,7 @@
|
|
|
1
1
|
from collections.abc import Callable
|
|
2
2
|
from typing import Any
|
|
3
|
-
|
|
4
3
|
from gql import gql
|
|
5
|
-
from universal_mcp.applications.application import
|
|
6
|
-
GraphQLApplication,
|
|
7
|
-
)
|
|
4
|
+
from universal_mcp.applications.application import GraphQLApplication
|
|
8
5
|
from universal_mcp.integrations import Integration
|
|
9
6
|
|
|
10
7
|
|
|
@@ -14,14 +11,10 @@ class FirefliesApp(GraphQLApplication):
|
|
|
14
11
|
"""
|
|
15
12
|
|
|
16
13
|
def __init__(self, integration: Integration | None = None, **kwargs: Any) -> None:
|
|
17
|
-
super().__init__(
|
|
18
|
-
name="fireflies", base_url="https://api.fireflies.ai/graphql", **kwargs
|
|
19
|
-
)
|
|
14
|
+
super().__init__(name="fireflies", base_url="https://api.fireflies.ai/graphql", **kwargs)
|
|
20
15
|
self.integration = integration
|
|
21
16
|
|
|
22
|
-
def get_team_conversation_analytics(
|
|
23
|
-
self, start_time: str | None = None, end_time: str | None = None
|
|
24
|
-
) -> dict[str, Any]:
|
|
17
|
+
async def get_team_conversation_analytics(self, start_time: str | None = None, end_time: str | None = None) -> dict[str, Any]:
|
|
25
18
|
"""
|
|
26
19
|
Queries the Fireflies.ai API for team conversation analytics, specifically the average number of filler words. The data retrieval can optionally be filtered by a start and end time. Returns a dictionary containing the fetched analytics.
|
|
27
20
|
|
|
@@ -39,27 +32,18 @@ class FirefliesApp(GraphQLApplication):
|
|
|
39
32
|
Tags:
|
|
40
33
|
analytics, team, fireflies, query
|
|
41
34
|
"""
|
|
42
|
-
query_gql = gql(
|
|
43
|
-
query Analytics($startTime: String, $endTime: String) {
|
|
44
|
-
|
|
45
|
-
team {
|
|
46
|
-
conversation {
|
|
47
|
-
average_filler_words
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
""")
|
|
35
|
+
query_gql = gql(
|
|
36
|
+
"\n query Analytics($startTime: String, $endTime: String) {\n analytics(start_time: $startTime, end_time: $endTime) {\n team {\n conversation {\n average_filler_words\n }\n }\n }\n }\n "
|
|
37
|
+
)
|
|
53
38
|
variables: dict[str, Any] = {}
|
|
54
39
|
if start_time:
|
|
55
40
|
variables["startTime"] = start_time
|
|
56
41
|
if end_time:
|
|
57
42
|
variables["endTime"] = end_time
|
|
58
|
-
|
|
59
43
|
result = self.query(query_gql, variables=variables if variables else None)
|
|
60
44
|
return result.get("analytics", {})
|
|
61
45
|
|
|
62
|
-
def get_transcript_ai_outputs(self, transcript_id: str) -> list[dict[str, Any]]:
|
|
46
|
+
async def get_transcript_ai_outputs(self, transcript_id: str) -> list[dict[str, Any]]:
|
|
63
47
|
"""
|
|
64
48
|
Retrieves all AI-generated application outputs, such as summaries or analyses, associated with a specific transcript ID. It fetches the detailed prompt and response data for each AI app that has processed the transcript, providing a complete record of AI-generated content.
|
|
65
49
|
|
|
@@ -76,26 +60,14 @@ class FirefliesApp(GraphQLApplication):
|
|
|
76
60
|
Tags:
|
|
77
61
|
ai, apps, transcript, fireflies, query
|
|
78
62
|
"""
|
|
79
|
-
query_gql = gql(
|
|
80
|
-
query GetAIAppsOutputs($transcriptId: String!) {
|
|
81
|
-
|
|
82
|
-
outputs {
|
|
83
|
-
transcript_id
|
|
84
|
-
user_id
|
|
85
|
-
app_id
|
|
86
|
-
created_at
|
|
87
|
-
title
|
|
88
|
-
prompt
|
|
89
|
-
response
|
|
90
|
-
}
|
|
91
|
-
}
|
|
92
|
-
}
|
|
93
|
-
""")
|
|
63
|
+
query_gql = gql(
|
|
64
|
+
"\n query GetAIAppsOutputs($transcriptId: String!) {\n apps(transcript_id: $transcriptId) {\n outputs {\n transcript_id\n user_id\n app_id\n created_at\n title\n prompt\n response\n }\n }\n }\n "
|
|
65
|
+
)
|
|
94
66
|
variables = {"transcriptId": transcript_id}
|
|
95
67
|
result = self.query(query_gql, variables=variables)
|
|
96
68
|
return result.get("apps", {})
|
|
97
69
|
|
|
98
|
-
def get_user_details(self, user_id: str) -> dict[str, Any]:
|
|
70
|
+
async def get_user_details(self, user_id: str) -> dict[str, Any]:
|
|
99
71
|
"""
|
|
100
72
|
Fetches details, such as name and integrations, for a single user identified by their unique ID. This function queries for a specific user, differentiating it from `list_users` which retrieves a list of all users in the workspace.
|
|
101
73
|
|
|
@@ -112,19 +84,14 @@ class FirefliesApp(GraphQLApplication):
|
|
|
112
84
|
Tags:
|
|
113
85
|
user, details, fireflies, query, important
|
|
114
86
|
"""
|
|
115
|
-
query_gql = gql(
|
|
116
|
-
query User($userId: String!) {
|
|
117
|
-
|
|
118
|
-
name
|
|
119
|
-
integrations
|
|
120
|
-
}
|
|
121
|
-
}
|
|
122
|
-
""")
|
|
87
|
+
query_gql = gql(
|
|
88
|
+
"\n query User($userId: String!) {\n user(id: $userId) {\n name\n integrations\n }\n }\n "
|
|
89
|
+
)
|
|
123
90
|
variables = {"userId": user_id}
|
|
124
91
|
result = self.query(query_gql, variables=variables)
|
|
125
92
|
return result.get("user", {})
|
|
126
93
|
|
|
127
|
-
def list_users(self) -> list[dict[str, Any]]:
|
|
94
|
+
async def list_users(self) -> list[dict[str, Any]]:
|
|
128
95
|
"""
|
|
129
96
|
Retrieves a list of all users in the workspace, returning each user's name and configured integrations. It provides a complete team roster, differing from `get_user_details`, which fetches information for a single user by their ID.
|
|
130
97
|
|
|
@@ -138,23 +105,11 @@ class FirefliesApp(GraphQLApplication):
|
|
|
138
105
|
Tags:
|
|
139
106
|
user, list, users, fireflies, query
|
|
140
107
|
"""
|
|
141
|
-
query_str = ""
|
|
142
|
-
query ListAllUsers {
|
|
143
|
-
users {
|
|
144
|
-
name
|
|
145
|
-
integrations
|
|
146
|
-
# You might want to add other available user fields here if needed, e.g.:
|
|
147
|
-
# id
|
|
148
|
-
# email
|
|
149
|
-
# role
|
|
150
|
-
# is_admin
|
|
151
|
-
}
|
|
152
|
-
}
|
|
153
|
-
"""
|
|
108
|
+
query_str = "\n query ListAllUsers {\n users {\n name\n integrations\n # You might want to add other available user fields here if needed, e.g.:\n # id\n # email\n # role\n # is_admin\n }\n }\n "
|
|
154
109
|
result = self.query(query_str)
|
|
155
110
|
return result.get("users", [])
|
|
156
111
|
|
|
157
|
-
def get_transcript_details(self, transcript_id: str) -> dict[str, Any]:
|
|
112
|
+
async def get_transcript_details(self, transcript_id: str) -> dict[str, Any]:
|
|
158
113
|
"""
|
|
159
114
|
Queries the Fireflies API for a single transcript's details, such as title and ID, using its unique identifier. It fetches one specific entry, distinguishing it from `list_transcripts`, which retrieves a collection, and from `get_ai_apps_outputs` which gets AI data from a transcript.
|
|
160
115
|
|
|
@@ -171,127 +126,14 @@ class FirefliesApp(GraphQLApplication):
|
|
|
171
126
|
Tags:
|
|
172
127
|
transcript, details, fireflies, query, important
|
|
173
128
|
"""
|
|
174
|
-
query_gql = gql(
|
|
175
|
-
query Transcript($transcriptId: String!) {
|
|
176
|
-
|
|
177
|
-
id
|
|
178
|
-
title
|
|
179
|
-
host_email
|
|
180
|
-
organizer_email
|
|
181
|
-
user {
|
|
182
|
-
user_id
|
|
183
|
-
email
|
|
184
|
-
name
|
|
185
|
-
num_transcripts
|
|
186
|
-
recent_meeting
|
|
187
|
-
minutes_consumed
|
|
188
|
-
is_admin
|
|
189
|
-
integrations
|
|
190
|
-
}
|
|
191
|
-
speakers {
|
|
192
|
-
id
|
|
193
|
-
name
|
|
194
|
-
}
|
|
195
|
-
transcript_url
|
|
196
|
-
participants
|
|
197
|
-
meeting_attendees {
|
|
198
|
-
displayName
|
|
199
|
-
email
|
|
200
|
-
phoneNumber
|
|
201
|
-
name
|
|
202
|
-
location
|
|
203
|
-
}
|
|
204
|
-
fireflies_users
|
|
205
|
-
duration
|
|
206
|
-
dateString
|
|
207
|
-
date
|
|
208
|
-
audio_url
|
|
209
|
-
video_url
|
|
210
|
-
sentences {
|
|
211
|
-
index
|
|
212
|
-
speaker_name
|
|
213
|
-
speaker_id
|
|
214
|
-
text
|
|
215
|
-
raw_text
|
|
216
|
-
start_time
|
|
217
|
-
end_time
|
|
218
|
-
ai_filters {
|
|
219
|
-
task
|
|
220
|
-
pricing
|
|
221
|
-
metric
|
|
222
|
-
question
|
|
223
|
-
date_and_time
|
|
224
|
-
text_cleanup
|
|
225
|
-
sentiment
|
|
226
|
-
}
|
|
227
|
-
}
|
|
228
|
-
calendar_id
|
|
229
|
-
summary {
|
|
230
|
-
action_items
|
|
231
|
-
keywords
|
|
232
|
-
outline
|
|
233
|
-
overview
|
|
234
|
-
shorthand_bullet
|
|
235
|
-
gist
|
|
236
|
-
bullet_gist
|
|
237
|
-
short_summary
|
|
238
|
-
short_overview
|
|
239
|
-
meeting_type
|
|
240
|
-
topics_discussed
|
|
241
|
-
transcript_chapters
|
|
242
|
-
}
|
|
243
|
-
meeting_info {
|
|
244
|
-
fred_joined
|
|
245
|
-
silent_meeting
|
|
246
|
-
summary_status
|
|
247
|
-
}
|
|
248
|
-
cal_id
|
|
249
|
-
calendar_type
|
|
250
|
-
apps_preview {
|
|
251
|
-
outputs {
|
|
252
|
-
transcript_id
|
|
253
|
-
user_id
|
|
254
|
-
app_id
|
|
255
|
-
created_at
|
|
256
|
-
title
|
|
257
|
-
prompt
|
|
258
|
-
response
|
|
259
|
-
}
|
|
260
|
-
}
|
|
261
|
-
meeting_link
|
|
262
|
-
analytics {
|
|
263
|
-
sentiments {
|
|
264
|
-
negative_pct
|
|
265
|
-
neutral_pct
|
|
266
|
-
positive_pct
|
|
267
|
-
}
|
|
268
|
-
categories {
|
|
269
|
-
questions
|
|
270
|
-
date_times
|
|
271
|
-
metrics
|
|
272
|
-
tasks
|
|
273
|
-
}
|
|
274
|
-
speakers {
|
|
275
|
-
speaker_id
|
|
276
|
-
name
|
|
277
|
-
duration
|
|
278
|
-
word_count
|
|
279
|
-
longest_monologue
|
|
280
|
-
monologues_count
|
|
281
|
-
filler_words
|
|
282
|
-
questions
|
|
283
|
-
duration_pct
|
|
284
|
-
words_per_minute
|
|
285
|
-
}
|
|
286
|
-
}
|
|
287
|
-
}
|
|
288
|
-
}
|
|
289
|
-
""")
|
|
129
|
+
query_gql = gql(
|
|
130
|
+
"\n query Transcript($transcriptId: String!) {\n transcript(id: $transcriptId) {\n id\n title\n host_email\n organizer_email\n user {\n user_id\n email\n name\n num_transcripts\n recent_meeting\n minutes_consumed\n is_admin\n integrations\n }\n speakers {\n id\n name\n }\n transcript_url\n participants\n meeting_attendees {\n displayName\n email\n phoneNumber\n name\n location\n }\n fireflies_users\n duration\n dateString\n date\n audio_url\n video_url\n sentences {\n index\n speaker_name\n speaker_id\n text\n raw_text\n start_time\n end_time\n ai_filters {\n task\n pricing\n metric\n question\n date_and_time\n text_cleanup\n sentiment\n }\n }\n calendar_id\n summary {\n action_items\n keywords\n outline\n overview\n shorthand_bullet\n gist\n bullet_gist\n short_summary\n short_overview\n meeting_type\n topics_discussed\n transcript_chapters\n }\n meeting_info {\n fred_joined\n silent_meeting\n summary_status\n }\n cal_id\n calendar_type\n apps_preview {\n outputs {\n transcript_id\n user_id\n app_id\n created_at\n title\n prompt\n response\n }\n }\n meeting_link\n analytics {\n sentiments {\n negative_pct\n neutral_pct\n positive_pct\n }\n categories {\n questions\n date_times\n metrics\n tasks\n }\n speakers {\n speaker_id\n name\n duration\n word_count\n longest_monologue\n monologues_count\n filler_words\n questions\n duration_pct\n words_per_minute\n }\n }\n }\n }\n "
|
|
131
|
+
)
|
|
290
132
|
variables = {"transcriptId": transcript_id}
|
|
291
133
|
result = self.query(query_gql, variables=variables)
|
|
292
134
|
return result.get("transcript", {})
|
|
293
135
|
|
|
294
|
-
def list_transcripts(self, user_id: str | None = None) -> list[dict[str, Any]]:
|
|
136
|
+
async def list_transcripts(self, user_id: str | None = None) -> list[dict[str, Any]]:
|
|
295
137
|
"""
|
|
296
138
|
Fetches a list of meeting transcripts, returning the title and ID for each. The list can be filtered to return only transcripts for a specific user. This function complements `get_transcript_details`, which retrieves a single transcript by its unique ID.
|
|
297
139
|
|
|
@@ -308,21 +150,16 @@ class FirefliesApp(GraphQLApplication):
|
|
|
308
150
|
Tags:
|
|
309
151
|
transcript, list, fireflies, query
|
|
310
152
|
"""
|
|
311
|
-
query_gql = gql(
|
|
312
|
-
query Transcripts($userId: String) {
|
|
313
|
-
|
|
314
|
-
title
|
|
315
|
-
id
|
|
316
|
-
}
|
|
317
|
-
}
|
|
318
|
-
""")
|
|
153
|
+
query_gql = gql(
|
|
154
|
+
"\n query Transcripts($userId: String) {\n transcripts(user_id: $userId) {\n title\n id\n }\n }\n "
|
|
155
|
+
)
|
|
319
156
|
variables: dict[str, Any] = {}
|
|
320
157
|
if user_id:
|
|
321
158
|
variables["userId"] = user_id
|
|
322
159
|
result = self.query(query_gql, variables=variables if variables else None)
|
|
323
160
|
return result.get("transcripts", [])
|
|
324
161
|
|
|
325
|
-
def get_bite_details(self, bite_id: str) -> dict[str, Any]:
|
|
162
|
+
async def get_bite_details(self, bite_id: str) -> dict[str, Any]:
|
|
326
163
|
"""
|
|
327
164
|
Retrieves detailed information for a specific bite (soundbite/clip) using its unique ID. It fetches data including the user ID, name, processing status, and summary. This provides a focused view of a single bite, distinguishing it from `list_bites` which fetches a collection of bites.
|
|
328
165
|
|
|
@@ -339,21 +176,14 @@ class FirefliesApp(GraphQLApplication):
|
|
|
339
176
|
Tags:
|
|
340
177
|
bite, details, fireflies, query
|
|
341
178
|
"""
|
|
342
|
-
query_gql = gql(
|
|
343
|
-
query Bite($biteId: ID!) {
|
|
344
|
-
|
|
345
|
-
user_id
|
|
346
|
-
name
|
|
347
|
-
status
|
|
348
|
-
summary
|
|
349
|
-
}
|
|
350
|
-
}
|
|
351
|
-
""")
|
|
179
|
+
query_gql = gql(
|
|
180
|
+
"\n query Bite($biteId: ID!) {\n bite(id: $biteId) {\n user_id\n name\n status\n summary\n }\n }\n "
|
|
181
|
+
)
|
|
352
182
|
variables = {"biteId": bite_id}
|
|
353
183
|
result = self.query(query_gql, variables=variables)
|
|
354
184
|
return result.get("bite", {})
|
|
355
185
|
|
|
356
|
-
def list_bites(self, mine: bool | None = None) -> list[dict[str, Any]]:
|
|
186
|
+
async def list_bites(self, mine: bool | None = None) -> list[dict[str, Any]]:
|
|
357
187
|
"""
|
|
358
188
|
Retrieves a list of soundbites (clips) from the Fireflies API. An optional 'mine' parameter filters for soundbites belonging only to the authenticated user. Differentiates from 'get_bite_details' by fetching multiple items rather than a single one by ID.
|
|
359
189
|
|
|
@@ -370,24 +200,16 @@ class FirefliesApp(GraphQLApplication):
|
|
|
370
200
|
Tags:
|
|
371
201
|
bite, list, fireflies, query
|
|
372
202
|
"""
|
|
373
|
-
query_gql = gql(
|
|
374
|
-
query Bites($mine: Boolean) {
|
|
375
|
-
|
|
376
|
-
user_id
|
|
377
|
-
name
|
|
378
|
-
end_time
|
|
379
|
-
}
|
|
380
|
-
}
|
|
381
|
-
""")
|
|
203
|
+
query_gql = gql(
|
|
204
|
+
"\n query Bites($mine: Boolean) {\n bites(mine: $mine) {\n user_id\n name\n end_time\n }\n }\n "
|
|
205
|
+
)
|
|
382
206
|
variables: dict[str, Any] = {}
|
|
383
|
-
if
|
|
384
|
-
mine is not None
|
|
385
|
-
): # API might default this, ensure we only send if explicitly set
|
|
207
|
+
if mine is not None:
|
|
386
208
|
variables["mine"] = mine
|
|
387
209
|
result = self.query(query_gql, variables=variables if variables else None)
|
|
388
210
|
return result.get("bites", [])
|
|
389
211
|
|
|
390
|
-
def add_to_live_meeting(self, meeting_link: str) -> dict[str, Any]:
|
|
212
|
+
async def add_to_live_meeting(self, meeting_link: str) -> dict[str, Any]:
|
|
391
213
|
"""
|
|
392
214
|
Executes a GraphQL mutation to make the Fireflies.ai notetaker join a live meeting specified by its URL. This action initiates the bot's recording and transcription process for the ongoing session and returns a success confirmation.
|
|
393
215
|
|
|
@@ -404,20 +226,14 @@ class FirefliesApp(GraphQLApplication):
|
|
|
404
226
|
Tags:
|
|
405
227
|
meeting, live, fireflies, mutation, important
|
|
406
228
|
"""
|
|
407
|
-
mutation_gql = gql(
|
|
408
|
-
mutation AddToLiveMeeting($meetingLink: String!) {
|
|
409
|
-
|
|
410
|
-
success
|
|
411
|
-
}
|
|
412
|
-
}
|
|
413
|
-
""")
|
|
229
|
+
mutation_gql = gql(
|
|
230
|
+
"\n mutation AddToLiveMeeting($meetingLink: String!) {\n addToLiveMeeting(meeting_link: $meetingLink) {\n success\n }\n }\n "
|
|
231
|
+
)
|
|
414
232
|
variables = {"meetingLink": meeting_link}
|
|
415
233
|
result = self.mutate(mutation_gql, variables=variables)
|
|
416
234
|
return result.get("addToLiveMeeting", {})
|
|
417
235
|
|
|
418
|
-
def create_soundbite_from_transcript(
|
|
419
|
-
self, transcript_id: str, start_time: float, end_time: float
|
|
420
|
-
) -> dict[str, Any]:
|
|
236
|
+
async def create_soundbite_from_transcript(self, transcript_id: str, start_time: float, end_time: float) -> dict[str, Any]:
|
|
421
237
|
"""
|
|
422
238
|
Creates a soundbite/clip from a specified segment of a transcript using its ID, start, and end times. This function executes a GraphQL mutation, returning details of the newly created bite, such as its ID and processing status.
|
|
423
239
|
|
|
@@ -436,24 +252,14 @@ class FirefliesApp(GraphQLApplication):
|
|
|
436
252
|
Tags:
|
|
437
253
|
bite, create, transcript, fireflies, mutation
|
|
438
254
|
"""
|
|
439
|
-
mutation_gql = gql(
|
|
440
|
-
mutation CreateBite($transcriptId: ID!, $startTime: Float!, $endTime: Float!) {
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
status
|
|
444
|
-
id
|
|
445
|
-
}
|
|
446
|
-
}
|
|
447
|
-
""")
|
|
448
|
-
variables = {
|
|
449
|
-
"transcriptId": transcript_id,
|
|
450
|
-
"startTime": start_time,
|
|
451
|
-
"endTime": end_time,
|
|
452
|
-
}
|
|
255
|
+
mutation_gql = gql(
|
|
256
|
+
"\n mutation CreateBite($transcriptId: ID!, $startTime: Float!, $endTime: Float!) {\n createBite(transcript_id: $transcriptId, start_time: $startTime, end_time: $endTime) {\n summary\n status\n id\n }\n }\n "
|
|
257
|
+
)
|
|
258
|
+
variables = {"transcriptId": transcript_id, "startTime": start_time, "endTime": end_time}
|
|
453
259
|
result = self.mutate(mutation_gql, variables=variables)
|
|
454
260
|
return result.get("createBite", {})
|
|
455
261
|
|
|
456
|
-
def delete_transcript(self, transcript_id: str) -> dict[str, Any]:
|
|
262
|
+
async def delete_transcript(self, transcript_id: str) -> dict[str, Any]:
|
|
457
263
|
"""
|
|
458
264
|
Permanently deletes a specific transcript from Fireflies.ai using its ID. This destructive operation executes a GraphQL mutation and returns a dictionary containing the details of the transcript (e.g., title, date) as it existed just before being removed, confirming the action.
|
|
459
265
|
|
|
@@ -470,21 +276,14 @@ class FirefliesApp(GraphQLApplication):
|
|
|
470
276
|
Tags:
|
|
471
277
|
transcript, delete, fireflies, mutation, destructive
|
|
472
278
|
"""
|
|
473
|
-
mutation_gql = gql(
|
|
474
|
-
mutation DeleteTranscript($transcriptId: String!) {
|
|
475
|
-
|
|
476
|
-
title
|
|
477
|
-
date
|
|
478
|
-
duration
|
|
479
|
-
organizer_email
|
|
480
|
-
}
|
|
481
|
-
}
|
|
482
|
-
""")
|
|
279
|
+
mutation_gql = gql(
|
|
280
|
+
"\n mutation DeleteTranscript($transcriptId: String!) {\n deleteTranscript(id: $transcriptId) {\n title\n date\n duration\n organizer_email\n }\n }\n "
|
|
281
|
+
)
|
|
483
282
|
variables = {"transcriptId": transcript_id}
|
|
484
283
|
result = self.mutate(mutation_gql, variables=variables)
|
|
485
284
|
return result.get("deleteTranscript", {})
|
|
486
285
|
|
|
487
|
-
def set_user_role(self, user_id: str, role: str) -> dict[str, Any]:
|
|
286
|
+
async def set_user_role(self, user_id: str, role: str) -> dict[str, Any]:
|
|
488
287
|
"""
|
|
489
288
|
Assigns a new role (e.g., 'admin', 'member') to a user specified by their ID. This function executes a GraphQL mutation to modify user data and returns a dictionary with the user's updated name and admin status to confirm the change.
|
|
490
289
|
|
|
@@ -502,23 +301,15 @@ class FirefliesApp(GraphQLApplication):
|
|
|
502
301
|
Tags:
|
|
503
302
|
user, role, admin, fireflies, mutation
|
|
504
303
|
"""
|
|
505
|
-
mutation_gql = gql(
|
|
506
|
-
mutation SetUserRole($user_id: String!, $role: Role!) {
|
|
507
|
-
|
|
508
|
-
name
|
|
509
|
-
is_admin
|
|
510
|
-
}
|
|
511
|
-
}
|
|
512
|
-
""")
|
|
304
|
+
mutation_gql = gql(
|
|
305
|
+
"\n mutation SetUserRole($user_id: String!, $role: Role!) {\n setUserRole(user_id: $user_id, role: $role) {\n name\n is_admin\n }\n }\n "
|
|
306
|
+
)
|
|
513
307
|
variables = {"user_id": user_id, "role": role}
|
|
514
308
|
result = self.mutate(mutation_gql, variables=variables)
|
|
515
309
|
return result.get("setUserRole", {})
|
|
516
310
|
|
|
517
|
-
def transcribe_audio_from_url(
|
|
518
|
-
self,
|
|
519
|
-
url: str,
|
|
520
|
-
title: str | None = None,
|
|
521
|
-
attendees: list[dict[str, str]] | None = None,
|
|
311
|
+
async def transcribe_audio_from_url(
|
|
312
|
+
self, url: str, title: str | None = None, attendees: list[dict[str, str]] | None = None
|
|
522
313
|
) -> dict[str, Any]:
|
|
523
314
|
"""
|
|
524
315
|
Submits an audio file from a URL to the Fireflies.ai API for transcription. It can optionally associate a title and a list of attendees with the audio, returning the upload status and details upon completion.
|
|
@@ -539,28 +330,19 @@ class FirefliesApp(GraphQLApplication):
|
|
|
539
330
|
Tags:
|
|
540
331
|
audio, upload, transcript, fireflies, mutation
|
|
541
332
|
"""
|
|
542
|
-
mutation_gql = gql(
|
|
543
|
-
mutation UploadAudio($input: AudioUploadInput!) {
|
|
544
|
-
|
|
545
|
-
success
|
|
546
|
-
title
|
|
547
|
-
message
|
|
548
|
-
}
|
|
549
|
-
}
|
|
550
|
-
""")
|
|
333
|
+
mutation_gql = gql(
|
|
334
|
+
"\n mutation UploadAudio($input: AudioUploadInput!) {\n uploadAudio(input: $input) {\n success\n title\n message\n }\n }\n "
|
|
335
|
+
)
|
|
551
336
|
input_data: dict[str, Any] = {"url": url}
|
|
552
337
|
if title:
|
|
553
338
|
input_data["title"] = title
|
|
554
339
|
if attendees:
|
|
555
340
|
input_data["attendees"] = attendees
|
|
556
|
-
|
|
557
341
|
variables = {"input": input_data}
|
|
558
342
|
result = self.mutate(mutation_gql, variables=variables)
|
|
559
343
|
return result.get("uploadAudio", {})
|
|
560
344
|
|
|
561
|
-
def update_transcript_title(
|
|
562
|
-
self, transcript_id: str, new_title: str
|
|
563
|
-
) -> dict[str, Any]:
|
|
345
|
+
async def update_transcript_title(self, transcript_id: str, new_title: str) -> dict[str, Any]:
|
|
564
346
|
"""
|
|
565
347
|
Updates the title of a specific transcript, identified by its ID, to a new value. This function executes a GraphQL mutation and returns a dictionary containing the newly assigned title upon successful completion of the request.
|
|
566
348
|
|
|
@@ -578,13 +360,9 @@ class FirefliesApp(GraphQLApplication):
|
|
|
578
360
|
Tags:
|
|
579
361
|
transcript, meeting, title, update, fireflies, mutation
|
|
580
362
|
"""
|
|
581
|
-
mutation_gql = gql(
|
|
582
|
-
mutation UpdateMeetingTitle($input: UpdateMeetingTitleInput!) {
|
|
583
|
-
|
|
584
|
-
title
|
|
585
|
-
}
|
|
586
|
-
}
|
|
587
|
-
""")
|
|
363
|
+
mutation_gql = gql(
|
|
364
|
+
"\n mutation UpdateMeetingTitle($input: UpdateMeetingTitleInput!) {\n updateMeetingTitle(input: $input) {\n title\n }\n }\n "
|
|
365
|
+
)
|
|
588
366
|
variables = {"input": {"id": transcript_id, "title": new_title}}
|
|
589
367
|
result = self.mutate(mutation_gql, variables=variables)
|
|
590
368
|
return result.get("updateMeetingTitle", {})
|