@speakai/mcp-server 1.10.0 → 1.11.0
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.
- package/dist/index.d.ts +9 -0
- package/dist/index.js +315 -95
- package/package.json +2 -2
package/dist/index.d.ts
CHANGED
|
@@ -10,3 +10,12 @@ export declare function createSpeakClient(options: {
|
|
|
10
10
|
}): AxiosInstance;
|
|
11
11
|
|
|
12
12
|
export declare function formatAxiosError(error: unknown): string;
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Static manifest of every Speak MCP tool name exposed by `registerAllTools`.
|
|
16
|
+
* Consumers (e.g. speak-server's orchestrator bridge) can import this to route
|
|
17
|
+
* or validate tool calls without spinning up an `McpServer` instance.
|
|
18
|
+
*/
|
|
19
|
+
export declare const SPEAK_MCP_TOOL_NAMES: readonly string[];
|
|
20
|
+
|
|
21
|
+
export type SpeakMcpToolName = (typeof SPEAK_MCP_TOOL_NAMES)[number];
|
package/dist/index.js
CHANGED
|
@@ -410,6 +410,7 @@ var init_export = __esm({
|
|
|
410
410
|
ExportFormatType2["DOCX"] = "docx";
|
|
411
411
|
ExportFormatType2["HTML"] = "html";
|
|
412
412
|
ExportFormatType2["JSON"] = "json";
|
|
413
|
+
ExportFormatType2["MD"] = "md";
|
|
413
414
|
ExportFormatType2["PDF"] = "pdf";
|
|
414
415
|
ExportFormatType2["SOURCEFILE"] = "sourceFile";
|
|
415
416
|
ExportFormatType2["SRT"] = "srt";
|
|
@@ -1386,7 +1387,7 @@ function register(server, client) {
|
|
|
1386
1387
|
try {
|
|
1387
1388
|
const result = await api.put(
|
|
1388
1389
|
`/v1/media/speakers/${mediaId}`,
|
|
1389
|
-
|
|
1390
|
+
speakers
|
|
1390
1391
|
);
|
|
1391
1392
|
return {
|
|
1392
1393
|
content: [
|
|
@@ -1437,7 +1438,7 @@ function register(server, client) {
|
|
|
1437
1438
|
"Update metadata fields (name, description, tags, status) for an existing media file.",
|
|
1438
1439
|
{
|
|
1439
1440
|
mediaId: import_zod2.z.string().min(1).describe("Unique identifier of the media file"),
|
|
1440
|
-
name: import_zod2.z.string().
|
|
1441
|
+
name: import_zod2.z.string().describe("Display name for the media (required \u2014 the server replaces the metadata)"),
|
|
1441
1442
|
description: import_zod2.z.string().optional().describe("Description or notes for the media"),
|
|
1442
1443
|
folderId: import_zod2.z.string().optional().describe("Move media to this folder ID"),
|
|
1443
1444
|
tags: import_zod2.z.array(import_zod2.z.string()).optional().describe("Array of tags to assign to the media"),
|
|
@@ -1587,9 +1588,10 @@ function register(server, client) {
|
|
|
1587
1588
|
registerSpeakTool(
|
|
1588
1589
|
server,
|
|
1589
1590
|
"toggle_media_favorite",
|
|
1590
|
-
"Mark or unmark
|
|
1591
|
+
"Mark or unmark media files as favorites for quick access.",
|
|
1591
1592
|
{
|
|
1592
|
-
|
|
1593
|
+
mediaIds: import_zod2.z.array(import_zod2.z.string().min(1)).min(1).describe("Media file IDs to update"),
|
|
1594
|
+
isFavorite: import_zod2.z.boolean().describe("true to mark as favorite, false to unmark")
|
|
1593
1595
|
},
|
|
1594
1596
|
{
|
|
1595
1597
|
title: "Toggle Media Favorite",
|
|
@@ -1617,9 +1619,13 @@ function register(server, client) {
|
|
|
1617
1619
|
registerSpeakTool(
|
|
1618
1620
|
server,
|
|
1619
1621
|
"reanalyze_media",
|
|
1620
|
-
"Re-run AI analysis on a media file using the latest models.
|
|
1622
|
+
"Re-run AI analysis on a media file using the latest models. Choose which parts to re-run via the flags below.",
|
|
1621
1623
|
{
|
|
1622
|
-
mediaId: import_zod2.z.string().min(1).describe("Unique identifier of the media file to re-analyze")
|
|
1624
|
+
mediaId: import_zod2.z.string().min(1).describe("Unique identifier of the media file to re-analyze"),
|
|
1625
|
+
isInsights: import_zod2.z.boolean().optional().describe("Re-run insights analysis"),
|
|
1626
|
+
isSentiment: import_zod2.z.boolean().optional().describe("Re-run sentiment analysis"),
|
|
1627
|
+
isFillerWords: import_zod2.z.boolean().optional().describe("Re-run filler-word detection"),
|
|
1628
|
+
isEmbeddings: import_zod2.z.boolean().optional().describe("Re-generate embeddings")
|
|
1623
1629
|
},
|
|
1624
1630
|
{
|
|
1625
1631
|
title: "Re-analyze Media",
|
|
@@ -1628,9 +1634,9 @@ function register(server, client) {
|
|
|
1628
1634
|
idempotentHint: false,
|
|
1629
1635
|
openWorldHint: false
|
|
1630
1636
|
},
|
|
1631
|
-
async ({ mediaId }) => {
|
|
1637
|
+
async ({ mediaId, ...params }) => {
|
|
1632
1638
|
try {
|
|
1633
|
-
const result = await api.
|
|
1639
|
+
const result = await api.get(`/v1/media/reanalyze/${mediaId}`, { params });
|
|
1634
1640
|
return {
|
|
1635
1641
|
content: [
|
|
1636
1642
|
{ type: "text", text: JSON.stringify(result.data, null, 2) }
|
|
@@ -1668,7 +1674,7 @@ function register(server, client) {
|
|
|
1668
1674
|
const results = [];
|
|
1669
1675
|
for (const mediaId of mediaIds) {
|
|
1670
1676
|
try {
|
|
1671
|
-
await api.put(`/v1/media/speakers/${mediaId}`,
|
|
1677
|
+
await api.put(`/v1/media/speakers/${mediaId}`, speakers);
|
|
1672
1678
|
results.push({ mediaId, success: true });
|
|
1673
1679
|
} catch (err) {
|
|
1674
1680
|
results.push({ mediaId, success: false, error: formatAxiosError(err) });
|
|
@@ -1904,7 +1910,7 @@ function register3(server, client) {
|
|
|
1904
1910
|
"Export a media file's transcript or insights in various formats (pdf, docx, srt, vtt, txt, csv).",
|
|
1905
1911
|
{
|
|
1906
1912
|
mediaId: import_zod4.z.string().min(1).describe("Unique identifier of the media file"),
|
|
1907
|
-
fileType: import_zod4.z.
|
|
1913
|
+
fileType: import_zod4.z.nativeEnum(ExportFormatType).describe("Desired export format"),
|
|
1908
1914
|
isSpeakerNames: import_zod4.z.boolean().optional().describe("Include speaker names in export"),
|
|
1909
1915
|
isSpeakerEmail: import_zod4.z.boolean().optional().describe("Include speaker emails in export"),
|
|
1910
1916
|
isTimeStamps: import_zod4.z.boolean().optional().describe("Include timestamps in export"),
|
|
@@ -1944,7 +1950,7 @@ function register3(server, client) {
|
|
|
1944
1950
|
"Export multiple media files at once, optionally merged into a single file.",
|
|
1945
1951
|
{
|
|
1946
1952
|
mediaIds: import_zod4.z.array(import_zod4.z.string()).describe("Array of media IDs to export"),
|
|
1947
|
-
fileType: import_zod4.z.
|
|
1953
|
+
fileType: import_zod4.z.nativeEnum(ExportFormatType).describe("Desired export format"),
|
|
1948
1954
|
isSpeakerNames: import_zod4.z.boolean().optional().describe("Include speaker names in export"),
|
|
1949
1955
|
isSpeakerEmail: import_zod4.z.boolean().optional().describe("Include speaker emails in export"),
|
|
1950
1956
|
isTimeStamps: import_zod4.z.boolean().optional().describe("Include timestamps in export"),
|
|
@@ -1987,6 +1993,7 @@ var init_exports = __esm({
|
|
|
1987
1993
|
import_zod4 = require("zod");
|
|
1988
1994
|
init_helpers();
|
|
1989
1995
|
init_client();
|
|
1996
|
+
init_dist();
|
|
1990
1997
|
}
|
|
1991
1998
|
});
|
|
1992
1999
|
|
|
@@ -2011,7 +2018,7 @@ function register4(server, client) {
|
|
|
2011
2018
|
},
|
|
2012
2019
|
async () => {
|
|
2013
2020
|
try {
|
|
2014
|
-
const result = await api.get("/v1/
|
|
2021
|
+
const result = await api.get("/v1/folder/views");
|
|
2015
2022
|
return {
|
|
2016
2023
|
content: [
|
|
2017
2024
|
{ type: "text", text: JSON.stringify(result.data, null, 2) }
|
|
@@ -2041,7 +2048,7 @@ function register4(server, client) {
|
|
|
2041
2048
|
},
|
|
2042
2049
|
async ({ folderId }) => {
|
|
2043
2050
|
try {
|
|
2044
|
-
const result = await api.get(`/v1/
|
|
2051
|
+
const result = await api.get(`/v1/folder/${folderId}/views`);
|
|
2045
2052
|
return {
|
|
2046
2053
|
content: [
|
|
2047
2054
|
{ type: "text", text: JSON.stringify(result.data, null, 2) }
|
|
@@ -2058,11 +2065,20 @@ function register4(server, client) {
|
|
|
2058
2065
|
registerSpeakTool(
|
|
2059
2066
|
server,
|
|
2060
2067
|
"create_folder_view",
|
|
2061
|
-
"Create a new saved view for a folder with custom
|
|
2068
|
+
"Create a new saved view for a folder with a custom set of display columns.",
|
|
2062
2069
|
{
|
|
2063
2070
|
folderId: import_zod5.z.string().min(1).describe("Unique identifier of the folder"),
|
|
2064
|
-
name: import_zod5.z.string().
|
|
2065
|
-
|
|
2071
|
+
name: import_zod5.z.string().describe("Display name for the view"),
|
|
2072
|
+
isDefault: import_zod5.z.boolean().optional().describe("Whether this view is the folder's default view"),
|
|
2073
|
+
columns: import_zod5.z.array(
|
|
2074
|
+
import_zod5.z.object({
|
|
2075
|
+
fieldId: import_zod5.z.string().optional().describe("Field ID this column maps to (omit for built-in columns)"),
|
|
2076
|
+
name: import_zod5.z.string().describe("Column display name"),
|
|
2077
|
+
type: import_zod5.z.string().describe("Column type \u2014 a FieldType or a default view column"),
|
|
2078
|
+
definition: import_zod5.z.string().optional().describe("Optional column definition"),
|
|
2079
|
+
order: import_zod5.z.number().describe("Column display order")
|
|
2080
|
+
})
|
|
2081
|
+
).describe("Ordered list of columns shown in the view")
|
|
2066
2082
|
},
|
|
2067
2083
|
{
|
|
2068
2084
|
title: "Create Folder View",
|
|
@@ -2074,7 +2090,7 @@ function register4(server, client) {
|
|
|
2074
2090
|
async ({ folderId, ...body }) => {
|
|
2075
2091
|
try {
|
|
2076
2092
|
const result = await api.post(
|
|
2077
|
-
`/v1/
|
|
2093
|
+
`/v1/folder/${folderId}/views`,
|
|
2078
2094
|
body
|
|
2079
2095
|
);
|
|
2080
2096
|
return {
|
|
@@ -2093,12 +2109,21 @@ function register4(server, client) {
|
|
|
2093
2109
|
registerSpeakTool(
|
|
2094
2110
|
server,
|
|
2095
2111
|
"update_folder_view",
|
|
2096
|
-
"Update an existing saved view
|
|
2112
|
+
"Update an existing saved view. Replaces the whole view, so `name`, `isDefault` and `columns` must all be supplied.",
|
|
2097
2113
|
{
|
|
2098
2114
|
folderId: import_zod5.z.string().min(1).describe("Unique identifier of the folder"),
|
|
2099
2115
|
viewId: import_zod5.z.string().min(1).describe("Unique identifier of the view to update"),
|
|
2100
|
-
name: import_zod5.z.string().
|
|
2101
|
-
|
|
2116
|
+
name: import_zod5.z.string().describe("Display name for the view"),
|
|
2117
|
+
isDefault: import_zod5.z.boolean().describe("Whether this view is the folder's default view"),
|
|
2118
|
+
columns: import_zod5.z.array(
|
|
2119
|
+
import_zod5.z.object({
|
|
2120
|
+
fieldId: import_zod5.z.string().optional().describe("Field ID this column maps to (omit for built-in columns)"),
|
|
2121
|
+
name: import_zod5.z.string().describe("Column display name"),
|
|
2122
|
+
type: import_zod5.z.string().describe("Column type \u2014 a FieldType or a default view column"),
|
|
2123
|
+
definition: import_zod5.z.string().optional().describe("Optional column definition"),
|
|
2124
|
+
order: import_zod5.z.number().describe("Column display order")
|
|
2125
|
+
})
|
|
2126
|
+
).describe("Ordered list of columns shown in the view")
|
|
2102
2127
|
},
|
|
2103
2128
|
{
|
|
2104
2129
|
title: "Update Folder View",
|
|
@@ -2110,7 +2135,7 @@ function register4(server, client) {
|
|
|
2110
2135
|
async ({ folderId, viewId, ...body }) => {
|
|
2111
2136
|
try {
|
|
2112
2137
|
const result = await api.put(
|
|
2113
|
-
`/v1/
|
|
2138
|
+
`/v1/folder/${folderId}/views/${viewId}`,
|
|
2114
2139
|
body
|
|
2115
2140
|
);
|
|
2116
2141
|
return {
|
|
@@ -2129,9 +2154,13 @@ function register4(server, client) {
|
|
|
2129
2154
|
registerSpeakTool(
|
|
2130
2155
|
server,
|
|
2131
2156
|
"clone_folder_view",
|
|
2132
|
-
"Duplicate an existing folder view.",
|
|
2157
|
+
"Duplicate an existing folder view into a target folder.",
|
|
2133
2158
|
{
|
|
2134
|
-
|
|
2159
|
+
sourceFolderId: import_zod5.z.string().min(1).describe("Folder that currently holds the view"),
|
|
2160
|
+
targetFolderId: import_zod5.z.string().min(1).describe("Folder to copy the view into (must differ from sourceFolderId)"),
|
|
2161
|
+
viewId: import_zod5.z.string().min(1).describe("Unique identifier of the view to clone"),
|
|
2162
|
+
name: import_zod5.z.string().describe("Display name for the cloned view"),
|
|
2163
|
+
isDefault: import_zod5.z.boolean().optional().describe("Whether the cloned view becomes the target folder's default")
|
|
2135
2164
|
},
|
|
2136
2165
|
{
|
|
2137
2166
|
title: "Clone Folder View",
|
|
@@ -2142,7 +2171,7 @@ function register4(server, client) {
|
|
|
2142
2171
|
},
|
|
2143
2172
|
async (body) => {
|
|
2144
2173
|
try {
|
|
2145
|
-
const result = await api.post("/v1/
|
|
2174
|
+
const result = await api.post("/v1/folder/views/clone", body);
|
|
2146
2175
|
return {
|
|
2147
2176
|
content: [
|
|
2148
2177
|
{ type: "text", text: JSON.stringify(result.data, null, 2) }
|
|
@@ -2224,7 +2253,7 @@ function register4(server, client) {
|
|
|
2224
2253
|
"Create a new folder in the workspace.",
|
|
2225
2254
|
{
|
|
2226
2255
|
name: import_zod5.z.string().min(1).describe("Display name for the new folder"),
|
|
2227
|
-
|
|
2256
|
+
description: import_zod5.z.string().optional().describe("Optional folder description")
|
|
2228
2257
|
},
|
|
2229
2258
|
{
|
|
2230
2259
|
title: "Create Folder",
|
|
@@ -2254,7 +2283,11 @@ function register4(server, client) {
|
|
|
2254
2283
|
"clone_folder",
|
|
2255
2284
|
"Duplicate an existing folder and all of its contents.",
|
|
2256
2285
|
{
|
|
2257
|
-
folderId: import_zod5.z.string().min(1).describe("ID of the folder to clone")
|
|
2286
|
+
folderId: import_zod5.z.string().min(1).describe("ID of the folder to clone"),
|
|
2287
|
+
name: import_zod5.z.string().optional().describe("Name for the cloned folder"),
|
|
2288
|
+
description: import_zod5.z.string().optional().describe("Description for the cloned folder"),
|
|
2289
|
+
assignTo: import_zod5.z.array(import_zod5.z.string()).optional().describe("User IDs to assign the cloned folder to"),
|
|
2290
|
+
isSaveDefaultView: import_zod5.z.boolean().optional().describe("Whether to copy the source folder's default view")
|
|
2258
2291
|
},
|
|
2259
2292
|
{
|
|
2260
2293
|
title: "Clone Folder",
|
|
@@ -2282,10 +2315,11 @@ function register4(server, client) {
|
|
|
2282
2315
|
registerSpeakTool(
|
|
2283
2316
|
server,
|
|
2284
2317
|
"update_folder",
|
|
2285
|
-
"Update a folder
|
|
2318
|
+
"Update a folder. `name` must always be supplied (the server replaces the folder config).",
|
|
2286
2319
|
{
|
|
2287
2320
|
folderId: import_zod5.z.string().min(1).describe("Unique identifier of the folder"),
|
|
2288
|
-
name: import_zod5.z.string().
|
|
2321
|
+
name: import_zod5.z.string().describe("Display name for the folder"),
|
|
2322
|
+
description: import_zod5.z.string().optional().describe("Optional folder description")
|
|
2289
2323
|
},
|
|
2290
2324
|
{
|
|
2291
2325
|
title: "Update Folder",
|
|
@@ -2391,9 +2425,11 @@ function register5(server, client) {
|
|
|
2391
2425
|
"create_recorder",
|
|
2392
2426
|
"Create a new recorder or survey for collecting audio/video submissions.",
|
|
2393
2427
|
{
|
|
2394
|
-
name: import_zod6.z.string().
|
|
2395
|
-
|
|
2396
|
-
|
|
2428
|
+
name: import_zod6.z.string().describe("Display name for the recorder"),
|
|
2429
|
+
...recorderConfigShape,
|
|
2430
|
+
clientInformation: import_zod6.z.record(import_zod6.z.unknown()).optional().describe(
|
|
2431
|
+
"Respondent info & questions: { name:boolean, email:boolean, questions:[{ question, isRequired, answerType, options?, includeOther?, fieldId? }], consent?:{ isEnabled, title, description, yesButtonLabel, noButtonLabel, isRequired, fieldId? } }"
|
|
2432
|
+
)
|
|
2397
2433
|
},
|
|
2398
2434
|
{
|
|
2399
2435
|
title: "Create Recorder",
|
|
@@ -2451,7 +2487,10 @@ function register5(server, client) {
|
|
|
2451
2487
|
"clone_recorder",
|
|
2452
2488
|
"Duplicate an existing recorder including all its settings and questions.",
|
|
2453
2489
|
{
|
|
2454
|
-
recorderId: import_zod6.z.string().min(1).describe("ID of the recorder to clone")
|
|
2490
|
+
recorderId: import_zod6.z.string().min(1).describe("ID of the recorder to clone"),
|
|
2491
|
+
name: import_zod6.z.string().optional().describe("Name for the cloned recorder"),
|
|
2492
|
+
description: import_zod6.z.string().optional().describe("Description for the cloned recorder"),
|
|
2493
|
+
folderId: import_zod6.z.string().optional().describe("Folder for the cloned recorder")
|
|
2455
2494
|
},
|
|
2456
2495
|
{
|
|
2457
2496
|
title: "Clone Recorder",
|
|
@@ -2561,10 +2600,11 @@ function register5(server, client) {
|
|
|
2561
2600
|
registerSpeakTool(
|
|
2562
2601
|
server,
|
|
2563
2602
|
"update_recorder_settings",
|
|
2564
|
-
"Update configuration settings for a recorder (branding,
|
|
2603
|
+
"Update configuration settings for a recorder (branding, capture options, etc.). `name` must always be supplied.",
|
|
2565
2604
|
{
|
|
2566
2605
|
recorderId: import_zod6.z.string().min(1).describe("Unique identifier of the recorder"),
|
|
2567
|
-
|
|
2606
|
+
name: import_zod6.z.string().describe("Display name for the recorder"),
|
|
2607
|
+
...recorderConfigShape
|
|
2568
2608
|
},
|
|
2569
2609
|
{
|
|
2570
2610
|
title: "Update Recorder Settings",
|
|
@@ -2573,9 +2613,9 @@ function register5(server, client) {
|
|
|
2573
2613
|
idempotentHint: true,
|
|
2574
2614
|
openWorldHint: true
|
|
2575
2615
|
},
|
|
2576
|
-
async ({ recorderId,
|
|
2616
|
+
async ({ recorderId, ...body }) => {
|
|
2577
2617
|
try {
|
|
2578
|
-
const result = await api.put(`/v1/recorder/settings/${recorderId}`,
|
|
2618
|
+
const result = await api.put(`/v1/recorder/settings/${recorderId}`, body);
|
|
2579
2619
|
return {
|
|
2580
2620
|
content: [{ type: "text", text: JSON.stringify(result.data, null, 2) }]
|
|
2581
2621
|
};
|
|
@@ -2590,10 +2630,17 @@ function register5(server, client) {
|
|
|
2590
2630
|
registerSpeakTool(
|
|
2591
2631
|
server,
|
|
2592
2632
|
"update_recorder_questions",
|
|
2593
|
-
"Update the survey questions for a recorder.",
|
|
2633
|
+
"Update the survey questions and respondent-info settings for a recorder.",
|
|
2594
2634
|
{
|
|
2595
2635
|
recorderId: import_zod6.z.string().min(1).describe("Unique identifier of the recorder"),
|
|
2596
|
-
|
|
2636
|
+
name: import_zod6.z.boolean().optional().describe("Whether to collect the respondent's name"),
|
|
2637
|
+
email: import_zod6.z.boolean().optional().describe("Whether to collect the respondent's email"),
|
|
2638
|
+
questions: import_zod6.z.array(import_zod6.z.record(import_zod6.z.unknown())).describe(
|
|
2639
|
+
"Survey questions. Each: { question, isRequired, answerType, options?, includeOther?, fieldId?, id? }"
|
|
2640
|
+
),
|
|
2641
|
+
consent: import_zod6.z.record(import_zod6.z.unknown()).optional().describe(
|
|
2642
|
+
"Consent screen: { isEnabled, title, description, yesButtonLabel, noButtonLabel, isRequired, fieldId? }"
|
|
2643
|
+
)
|
|
2597
2644
|
},
|
|
2598
2645
|
{
|
|
2599
2646
|
title: "Update Recorder Questions",
|
|
@@ -2602,9 +2649,9 @@ function register5(server, client) {
|
|
|
2602
2649
|
idempotentHint: true,
|
|
2603
2650
|
openWorldHint: true
|
|
2604
2651
|
},
|
|
2605
|
-
async ({ recorderId,
|
|
2652
|
+
async ({ recorderId, ...body }) => {
|
|
2606
2653
|
try {
|
|
2607
|
-
const result = await api.put(`/v1/recorder/questions/${recorderId}`,
|
|
2654
|
+
const result = await api.put(`/v1/recorder/questions/${recorderId}`, body);
|
|
2608
2655
|
return {
|
|
2609
2656
|
content: [{ type: "text", text: JSON.stringify(result.data, null, 2) }]
|
|
2610
2657
|
};
|
|
@@ -2645,13 +2692,28 @@ function register5(server, client) {
|
|
|
2645
2692
|
}
|
|
2646
2693
|
);
|
|
2647
2694
|
}
|
|
2648
|
-
var import_zod6;
|
|
2695
|
+
var import_zod6, recorderConfigShape;
|
|
2649
2696
|
var init_recorder3 = __esm({
|
|
2650
2697
|
"src/tools/recorder.ts"() {
|
|
2651
2698
|
"use strict";
|
|
2652
2699
|
import_zod6 = require("zod");
|
|
2653
2700
|
init_helpers();
|
|
2654
2701
|
init_client();
|
|
2702
|
+
recorderConfigShape = {
|
|
2703
|
+
description: import_zod6.z.string().optional().describe("Recorder description"),
|
|
2704
|
+
sourceLanguage: import_zod6.z.string().optional().describe("Transcription language code (e.g. en-US)"),
|
|
2705
|
+
folderId: import_zod6.z.string().optional().describe("Folder to store recordings in"),
|
|
2706
|
+
isAutoAnalyze: import_zod6.z.boolean().optional().describe("Whether to auto-analyze submissions"),
|
|
2707
|
+
notifyUsers: import_zod6.z.array(import_zod6.z.string()).optional().describe("User IDs to notify on new submissions"),
|
|
2708
|
+
duration: import_zod6.z.record(import_zod6.z.unknown()).optional().describe("Recording duration: { minDuration, maxDuration } in seconds"),
|
|
2709
|
+
options: import_zod6.z.record(import_zod6.z.unknown()).optional().describe(
|
|
2710
|
+
"Capture options: { audio, video, screenShare, liveTranscription, upload:{ file, text, multiple, url } } \u2014 all booleans"
|
|
2711
|
+
),
|
|
2712
|
+
notification: import_zod6.z.record(import_zod6.z.unknown()).optional().describe("Notification toggles: { upload, client } \u2014 booleans"),
|
|
2713
|
+
meta: import_zod6.z.record(import_zod6.z.unknown()).optional().describe(
|
|
2714
|
+
"Branding/customization: { primaryColor, backgroundImg, logo, fontColor, fontFamily, theme, customCSS, hideWaveform, hideTitle, hideDescription, hideSubmitButton, submitButtonLabel, countdown, hideImages }"
|
|
2715
|
+
)
|
|
2716
|
+
};
|
|
2655
2717
|
}
|
|
2656
2718
|
});
|
|
2657
2719
|
|
|
@@ -2665,10 +2727,10 @@ function register6(server, client) {
|
|
|
2665
2727
|
registerSpeakTool(
|
|
2666
2728
|
server,
|
|
2667
2729
|
"create_embed",
|
|
2668
|
-
"Create an embeddable player/transcript widget for a media file.",
|
|
2730
|
+
"Create an embeddable player/transcript widget for a media file or a set of folders. Provide `mediaId` for a single-media embed, or `folderIds` for a folder/library embed.",
|
|
2669
2731
|
{
|
|
2670
|
-
mediaId: import_zod7.z.string().
|
|
2671
|
-
|
|
2732
|
+
mediaId: import_zod7.z.string().optional().describe("Media file to embed (for a single-media embed)"),
|
|
2733
|
+
folderIds: import_zod7.z.array(import_zod7.z.string()).optional().describe("Folder IDs to embed (for a folder/library embed)")
|
|
2672
2734
|
},
|
|
2673
2735
|
{
|
|
2674
2736
|
title: "Create Embed Widget",
|
|
@@ -2694,10 +2756,16 @@ function register6(server, client) {
|
|
|
2694
2756
|
registerSpeakTool(
|
|
2695
2757
|
server,
|
|
2696
2758
|
"update_embed",
|
|
2697
|
-
"Update
|
|
2759
|
+
"Update an existing embed widget \u2014 appearance/feature toggles via `meta`, plus scope and privacy.",
|
|
2698
2760
|
{
|
|
2699
2761
|
embedId: import_zod7.z.string().min(1).describe("Unique identifier of the embed"),
|
|
2700
|
-
|
|
2762
|
+
mediaId: import_zod7.z.string().optional().describe("Media file the embed points to"),
|
|
2763
|
+
folderIds: import_zod7.z.array(import_zod7.z.string()).optional().describe("Folder IDs the embed covers"),
|
|
2764
|
+
privacyMode: import_zod7.z.string().optional().describe("Privacy mode for the embed"),
|
|
2765
|
+
embedType: import_zod7.z.string().optional().describe("Embed type"),
|
|
2766
|
+
meta: import_zod7.z.record(import_zod7.z.unknown()).optional().describe(
|
|
2767
|
+
"Embed appearance & feature toggles: { backgroundImg, logo, primaryColor, titleColor, chatWelcomeMessage, assistantTemplateId, isTitle, isDescription, isRemarks, isDataVizDownloadable, isSEOIndexing, isPromptAsk, isPromptHistory, isMediaExport, callToActionButtons:[{ url, label }], features:[{ name, isActive, isCustom? }] }"
|
|
2768
|
+
)
|
|
2701
2769
|
},
|
|
2702
2770
|
{
|
|
2703
2771
|
title: "Update Embed Widget",
|
|
@@ -2736,7 +2804,7 @@ function register6(server, client) {
|
|
|
2736
2804
|
},
|
|
2737
2805
|
async ({ mediaId }) => {
|
|
2738
2806
|
try {
|
|
2739
|
-
const result = await api.get(
|
|
2807
|
+
const result = await api.get("/v1/embed", { params: { mediaId } });
|
|
2740
2808
|
return {
|
|
2741
2809
|
content: [{ type: "text", text: JSON.stringify(result.data, null, 2) }]
|
|
2742
2810
|
};
|
|
@@ -2819,7 +2887,10 @@ function register7(server, client) {
|
|
|
2819
2887
|
tags: import_zod8.z.array(import_zod8.z.string()).optional().describe("Filter media by tags"),
|
|
2820
2888
|
startDate: import_zod8.z.string().optional().describe("Start date for date range filter (ISO 8601, e.g., '2025-01-01')"),
|
|
2821
2889
|
endDate: import_zod8.z.string().optional().describe("End date for date range filter (ISO 8601, e.g., '2025-03-31')"),
|
|
2822
|
-
isIndividualPrompt: import_zod8.z.boolean().optional().describe("When true, processes each media file separately instead of combining context. Useful for comparing responses across files.")
|
|
2890
|
+
isIndividualPrompt: import_zod8.z.boolean().optional().describe("When true, processes each media file separately instead of combining context. Useful for comparing responses across files."),
|
|
2891
|
+
fieldId: import_zod8.z.string().optional().describe("Scope the prompt to a single custom field"),
|
|
2892
|
+
fieldIds: import_zod8.z.array(import_zod8.z.string()).max(10).optional().describe("Scope the prompt to multiple custom fields (max 10)"),
|
|
2893
|
+
filters: import_zod8.z.record(import_zod8.z.unknown()).optional().describe("Advanced filter object to scope which media the prompt runs over")
|
|
2823
2894
|
},
|
|
2824
2895
|
{
|
|
2825
2896
|
title: "Ask AI About Your Recordings",
|
|
@@ -3080,7 +3151,7 @@ function register7(server, client) {
|
|
|
3080
3151
|
{
|
|
3081
3152
|
promptId: import_zod8.z.string().min(1).describe("ID of the conversation"),
|
|
3082
3153
|
messageId: import_zod8.z.string().min(1).describe("ID of the message to rate"),
|
|
3083
|
-
score: import_zod8.z.
|
|
3154
|
+
score: import_zod8.z.union([import_zod8.z.literal(1), import_zod8.z.literal(-1)]).describe("Feedback score: 1 for thumbs up, -1 for thumbs down"),
|
|
3084
3155
|
reason: import_zod8.z.string().optional().describe("Optional explanation for the feedback")
|
|
3085
3156
|
},
|
|
3086
3157
|
{
|
|
@@ -3136,9 +3207,11 @@ function register7(server, client) {
|
|
|
3136
3207
|
registerSpeakTool(
|
|
3137
3208
|
server,
|
|
3138
3209
|
"export_chat_answer",
|
|
3139
|
-
"Export a Magic Prompt
|
|
3210
|
+
"Export a specific Magic Prompt answer. Useful for saving AI-generated summaries, reports, or analysis results.",
|
|
3140
3211
|
{
|
|
3141
|
-
promptId: import_zod8.z.string().min(1).describe("ID of the conversation to export")
|
|
3212
|
+
promptId: import_zod8.z.string().min(1).describe("ID of the conversation to export"),
|
|
3213
|
+
messageId: import_zod8.z.string().min(1).describe("ID of the specific message/answer to export"),
|
|
3214
|
+
fileType: import_zod8.z.enum(["txt", "docx", "pdf", "md"]).describe("Export file format")
|
|
3142
3215
|
},
|
|
3143
3216
|
{
|
|
3144
3217
|
title: "Export Chat Answer",
|
|
@@ -3218,9 +3291,11 @@ function register8(server, client) {
|
|
|
3218
3291
|
"schedule_meeting_event",
|
|
3219
3292
|
"Schedule the Speak AI meeting assistant to join and record an upcoming meeting.",
|
|
3220
3293
|
{
|
|
3221
|
-
|
|
3222
|
-
|
|
3223
|
-
|
|
3294
|
+
title: import_zod9.z.string().min(1).describe("Display title for the event"),
|
|
3295
|
+
meetingURL: import_zod9.z.string().min(1).describe("URL of the meeting to join"),
|
|
3296
|
+
meetingDate: import_zod9.z.string().optional().describe("ISO 8601 datetime for when the meeting starts"),
|
|
3297
|
+
meetingLanguage: import_zod9.z.string().optional().describe("Transcription language code for the meeting (e.g. en-US)"),
|
|
3298
|
+
folderId: import_zod9.z.string().optional().describe("Folder ID to store the recording in")
|
|
3224
3299
|
},
|
|
3225
3300
|
{
|
|
3226
3301
|
title: "Schedule AI Meeting Assistant",
|
|
@@ -3262,10 +3337,9 @@ function register8(server, client) {
|
|
|
3262
3337
|
},
|
|
3263
3338
|
async ({ meetingAssistantEventId }) => {
|
|
3264
3339
|
try {
|
|
3265
|
-
const result = await api.
|
|
3340
|
+
const result = await api.post(
|
|
3266
3341
|
"/v1/meeting-assistant/events/remove",
|
|
3267
|
-
|
|
3268
|
-
{ params: { meetingAssistantEventId } }
|
|
3342
|
+
{ meetingAssistantEventId }
|
|
3269
3343
|
);
|
|
3270
3344
|
return {
|
|
3271
3345
|
content: [{ type: "text", text: JSON.stringify(result.data, null, 2) }]
|
|
@@ -3443,8 +3517,14 @@ function register9(server, client) {
|
|
|
3443
3517
|
"Create a new custom field for categorizing and tagging media.",
|
|
3444
3518
|
{
|
|
3445
3519
|
name: import_zod10.z.string().min(1).describe("Display name for the field"),
|
|
3446
|
-
type: import_zod10.z.string().
|
|
3447
|
-
|
|
3520
|
+
type: import_zod10.z.string().describe("Field type (text, number, select, etc.)"),
|
|
3521
|
+
description: import_zod10.z.string().optional().describe("Optional description for the field"),
|
|
3522
|
+
prompt: import_zod10.z.string().optional().describe("AI prompt used to auto-populate the field"),
|
|
3523
|
+
allowedValues: import_zod10.z.array(import_zod10.z.string()).optional().describe("Allowed values for select/multi-select field types"),
|
|
3524
|
+
allowedValuesMode: import_zod10.z.nativeEnum(AllowedValuesMode).optional().describe("Whether one or multiple allowed values can be selected"),
|
|
3525
|
+
otherValues: import_zod10.z.boolean().optional().describe("Whether values outside allowedValues are permitted"),
|
|
3526
|
+
notApplicableValues: import_zod10.z.string().optional().describe("Value(s) treated as not-applicable"),
|
|
3527
|
+
privacyMode: import_zod10.z.string().optional().describe("Privacy mode for the field")
|
|
3448
3528
|
},
|
|
3449
3529
|
{
|
|
3450
3530
|
title: "Create Custom Field",
|
|
@@ -3470,20 +3550,27 @@ function register9(server, client) {
|
|
|
3470
3550
|
registerSpeakTool(
|
|
3471
3551
|
server,
|
|
3472
3552
|
"update_multiple_fields",
|
|
3473
|
-
"
|
|
3474
|
-
{
|
|
3475
|
-
|
|
3553
|
+
"Set custom field values across media in a single batch operation. Scope the update with `folderId` (all media in a folder) and/or `mediaIds`.",
|
|
3554
|
+
{
|
|
3555
|
+
folderId: import_zod10.z.string().optional().describe("Apply the field values to all media in this folder"),
|
|
3556
|
+
mediaIds: import_zod10.z.array(import_zod10.z.string()).optional().describe("Apply the field values to these specific media files"),
|
|
3557
|
+
fields: import_zod10.z.array(
|
|
3558
|
+
import_zod10.z.object({
|
|
3559
|
+
id: import_zod10.z.string().min(1).describe("Custom field ID"),
|
|
3560
|
+
value: import_zod10.z.unknown().describe("Value to set for the field")
|
|
3561
|
+
})
|
|
3562
|
+
).describe("Array of field id/value pairs to set")
|
|
3476
3563
|
},
|
|
3477
3564
|
{
|
|
3478
|
-
title: "Bulk Update Custom
|
|
3565
|
+
title: "Bulk Update Custom Field Values",
|
|
3479
3566
|
readOnlyHint: false,
|
|
3480
3567
|
destructiveHint: false,
|
|
3481
3568
|
idempotentHint: true,
|
|
3482
3569
|
openWorldHint: false
|
|
3483
3570
|
},
|
|
3484
|
-
async (
|
|
3571
|
+
async (body) => {
|
|
3485
3572
|
try {
|
|
3486
|
-
const result = await api.post("/v1/fields/
|
|
3573
|
+
const result = await api.post("/v1/fields/batch", body);
|
|
3487
3574
|
return {
|
|
3488
3575
|
content: [{ type: "text", text: JSON.stringify(result.data, null, 2) }]
|
|
3489
3576
|
};
|
|
@@ -3498,12 +3585,18 @@ function register9(server, client) {
|
|
|
3498
3585
|
registerSpeakTool(
|
|
3499
3586
|
server,
|
|
3500
3587
|
"update_field",
|
|
3501
|
-
"Update a specific custom field by ID.",
|
|
3588
|
+
"Update a specific custom field by ID. `name` must always be supplied (the server replaces the field config).",
|
|
3502
3589
|
{
|
|
3503
3590
|
id: import_zod10.z.string().min(1).describe("Unique identifier of the field"),
|
|
3504
|
-
name: import_zod10.z.string().
|
|
3505
|
-
type: import_zod10.z.string().optional().describe("
|
|
3506
|
-
|
|
3591
|
+
name: import_zod10.z.string().describe("Display name for the field"),
|
|
3592
|
+
type: import_zod10.z.string().optional().describe("Field type"),
|
|
3593
|
+
description: import_zod10.z.string().optional().describe("Optional description for the field"),
|
|
3594
|
+
prompt: import_zod10.z.string().optional().describe("AI prompt used to auto-populate the field"),
|
|
3595
|
+
allowedValues: import_zod10.z.array(import_zod10.z.string()).optional().describe("Allowed values for select/multi-select field types"),
|
|
3596
|
+
allowedValuesMode: import_zod10.z.nativeEnum(AllowedValuesMode).optional().describe("Whether one or multiple allowed values can be selected"),
|
|
3597
|
+
otherValues: import_zod10.z.boolean().optional().describe("Whether values outside allowedValues are permitted"),
|
|
3598
|
+
notApplicableValues: import_zod10.z.string().optional().describe("Value(s) treated as not-applicable"),
|
|
3599
|
+
privacyMode: import_zod10.z.string().optional().describe("Privacy mode for the field")
|
|
3507
3600
|
},
|
|
3508
3601
|
{
|
|
3509
3602
|
title: "Update Custom Field",
|
|
@@ -3534,6 +3627,7 @@ var init_fields2 = __esm({
|
|
|
3534
3627
|
import_zod10 = require("zod");
|
|
3535
3628
|
init_helpers();
|
|
3536
3629
|
init_client();
|
|
3630
|
+
init_dist();
|
|
3537
3631
|
}
|
|
3538
3632
|
});
|
|
3539
3633
|
|
|
@@ -3603,10 +3697,17 @@ function register10(server, client) {
|
|
|
3603
3697
|
"create_automation",
|
|
3604
3698
|
"Create a new automation rule for automatic media processing workflows.",
|
|
3605
3699
|
{
|
|
3606
|
-
name: import_zod11.z.string().
|
|
3607
|
-
trigger: import_zod11.z.record(import_zod11.z.unknown()).
|
|
3608
|
-
|
|
3609
|
-
|
|
3700
|
+
name: import_zod11.z.string().min(1).describe("Display name for the automation"),
|
|
3701
|
+
trigger: import_zod11.z.record(import_zod11.z.unknown()).describe(
|
|
3702
|
+
'Trigger object. Keys: `type` (e.g. "folders") and `folderIds` (array of folder IDs).'
|
|
3703
|
+
),
|
|
3704
|
+
action: import_zod11.z.record(import_zod11.z.unknown()).describe(
|
|
3705
|
+
'Single action object (not an array). Keys: `type` ("magic-prompt" or "translation"). For magic-prompt, include a `magicPrompt` object ({ prompt, title?, assistantType?, fieldIds?, ... }). For translation, include a `translation` object ({ targetLanguage }).'
|
|
3706
|
+
),
|
|
3707
|
+
description: import_zod11.z.string().optional().describe("Optional description"),
|
|
3708
|
+
isActive: import_zod11.z.boolean().optional().describe("Whether the automation is active (defaults to true)"),
|
|
3709
|
+
runType: import_zod11.z.string().optional().describe('Run type, e.g. "instant" (default) or "scheduled"'),
|
|
3710
|
+
schedule: import_zod11.z.record(import_zod11.z.unknown()).optional().describe("Schedule object for scheduled automations: { timePeriod, repeatAt }")
|
|
3610
3711
|
},
|
|
3611
3712
|
{
|
|
3612
3713
|
title: "Create Automation",
|
|
@@ -3632,13 +3733,20 @@ function register10(server, client) {
|
|
|
3632
3733
|
registerSpeakTool(
|
|
3633
3734
|
server,
|
|
3634
3735
|
"update_automation",
|
|
3635
|
-
"Update an existing automation rule
|
|
3736
|
+
"Update an existing automation rule. This replaces the whole automation, so fetch the current values with get_automation first and pass them all back.",
|
|
3636
3737
|
{
|
|
3637
3738
|
automationId: import_zod11.z.string().min(1).describe("Unique identifier of the automation"),
|
|
3638
|
-
name: import_zod11.z.string().
|
|
3639
|
-
trigger: import_zod11.z.record(import_zod11.z.unknown()).
|
|
3640
|
-
|
|
3641
|
-
|
|
3739
|
+
name: import_zod11.z.string().min(1).describe("Display name for the automation"),
|
|
3740
|
+
trigger: import_zod11.z.record(import_zod11.z.unknown()).describe(
|
|
3741
|
+
'Trigger object. Keys: `type` (e.g. "folders") and `folderIds` (array of folder IDs).'
|
|
3742
|
+
),
|
|
3743
|
+
action: import_zod11.z.record(import_zod11.z.unknown()).describe(
|
|
3744
|
+
'Single action object (not an array). Keys: `type` ("magic-prompt" or "translation"). For magic-prompt, include a `magicPrompt` object ({ prompt, title?, assistantType?, fieldIds?, ... }). For translation, include a `translation` object ({ targetLanguage }).'
|
|
3745
|
+
),
|
|
3746
|
+
description: import_zod11.z.string().optional().describe("Optional description"),
|
|
3747
|
+
isActive: import_zod11.z.boolean().optional().describe("Whether the automation is active (defaults to true)"),
|
|
3748
|
+
runType: import_zod11.z.string().optional().describe('Run type, e.g. "instant" (default) or "scheduled"'),
|
|
3749
|
+
schedule: import_zod11.z.record(import_zod11.z.unknown()).optional().describe("Schedule object for scheduled automations: { timePeriod, repeatAt }")
|
|
3642
3750
|
},
|
|
3643
3751
|
{
|
|
3644
3752
|
title: "Update Automation",
|
|
@@ -3667,23 +3775,21 @@ function register10(server, client) {
|
|
|
3667
3775
|
registerSpeakTool(
|
|
3668
3776
|
server,
|
|
3669
3777
|
"toggle_automation_status",
|
|
3670
|
-
"
|
|
3778
|
+
"Toggle an automation rule between active and inactive. This flips the current state \u2014 call get_automation first if you need to know which way it will flip.",
|
|
3671
3779
|
{
|
|
3672
|
-
automationId: import_zod11.z.string().min(1).describe("Unique identifier of the automation")
|
|
3673
|
-
enabled: import_zod11.z.boolean().describe("Set to true to enable, false to disable")
|
|
3780
|
+
automationId: import_zod11.z.string().min(1).describe("Unique identifier of the automation")
|
|
3674
3781
|
},
|
|
3675
3782
|
{
|
|
3676
|
-
title: "
|
|
3783
|
+
title: "Toggle Automation Status",
|
|
3677
3784
|
readOnlyHint: false,
|
|
3678
3785
|
destructiveHint: false,
|
|
3679
|
-
idempotentHint:
|
|
3786
|
+
idempotentHint: false,
|
|
3680
3787
|
openWorldHint: false
|
|
3681
3788
|
},
|
|
3682
|
-
async ({ automationId
|
|
3789
|
+
async ({ automationId }) => {
|
|
3683
3790
|
try {
|
|
3684
3791
|
const result = await api.put(
|
|
3685
|
-
`/v1/automations/status/${automationId}
|
|
3686
|
-
{ enabled }
|
|
3792
|
+
`/v1/automations/status/${automationId}`
|
|
3687
3793
|
);
|
|
3688
3794
|
return {
|
|
3689
3795
|
content: [{ type: "text", text: JSON.stringify(result.data, null, 2) }]
|
|
@@ -3719,8 +3825,9 @@ function register11(server, client) {
|
|
|
3719
3825
|
"create_webhook",
|
|
3720
3826
|
"Create a new webhook to receive real-time notifications when events occur in Speak AI.",
|
|
3721
3827
|
{
|
|
3722
|
-
|
|
3723
|
-
events: import_zod12.z.array(import_zod12.z.string()).optional().describe("Array of event types to subscribe to")
|
|
3828
|
+
callbackUrl: import_zod12.z.string().url().describe("HTTPS endpoint URL to receive webhook payloads"),
|
|
3829
|
+
events: import_zod12.z.array(import_zod12.z.string()).optional().describe("Array of event types to subscribe to"),
|
|
3830
|
+
description: import_zod12.z.string().optional().describe("Optional description for the webhook")
|
|
3724
3831
|
},
|
|
3725
3832
|
{
|
|
3726
3833
|
title: "Create Webhook",
|
|
@@ -3772,11 +3879,12 @@ function register11(server, client) {
|
|
|
3772
3879
|
registerSpeakTool(
|
|
3773
3880
|
server,
|
|
3774
3881
|
"update_webhook",
|
|
3775
|
-
"Update an existing webhook
|
|
3882
|
+
"Update an existing webhook. This replaces the webhook config, so `callbackUrl` must always be supplied.",
|
|
3776
3883
|
{
|
|
3777
3884
|
webhookId: import_zod12.z.string().min(1).describe("Unique identifier of the webhook"),
|
|
3778
|
-
|
|
3779
|
-
events: import_zod12.z.array(import_zod12.z.string()).optional().describe("Updated array of event types")
|
|
3885
|
+
callbackUrl: import_zod12.z.string().url().describe("HTTPS endpoint URL to receive webhook payloads"),
|
|
3886
|
+
events: import_zod12.z.array(import_zod12.z.string()).optional().describe("Updated array of event types"),
|
|
3887
|
+
description: import_zod12.z.string().optional().describe("Optional description for the webhook")
|
|
3780
3888
|
},
|
|
3781
3889
|
{
|
|
3782
3890
|
title: "Update Webhook",
|
|
@@ -5312,7 +5420,7 @@ function createCli() {
|
|
|
5312
5420
|
process.exit(1);
|
|
5313
5421
|
}
|
|
5314
5422
|
});
|
|
5315
|
-
program.command("update").description("Update media metadata").argument("<mediaId>", "Media file ID to update").
|
|
5423
|
+
program.command("update").description("Update media metadata").argument("<mediaId>", "Media file ID to update").requiredOption("-n, --name <name>", "Display name (required by the API)").option("-d, --description <text>", "New description").option("--tags <tags...>", "New tags").option("-f, --folder <id>", "Move to folder ID").option("--json", "Output raw JSON").action(async (mediaId, opts) => {
|
|
5316
5424
|
requireApiKey();
|
|
5317
5425
|
const client = await getClient();
|
|
5318
5426
|
try {
|
|
@@ -5369,13 +5477,19 @@ function createCli() {
|
|
|
5369
5477
|
process.exit(1);
|
|
5370
5478
|
}
|
|
5371
5479
|
});
|
|
5372
|
-
program.command("favorites").description("
|
|
5480
|
+
program.command("favorites").description("Mark or unmark a media file as a favorite").argument("<mediaId>", "Media file ID").option("--off", "Unmark as favorite (default: mark as favorite)").action(async (mediaId, opts) => {
|
|
5373
5481
|
requireApiKey();
|
|
5374
5482
|
const client = await getClient();
|
|
5375
5483
|
try {
|
|
5376
|
-
const
|
|
5484
|
+
const isFavorite = !opts.off;
|
|
5485
|
+
const res = await client.post("/v1/media/favorites", {
|
|
5486
|
+
mediaIds: [mediaId],
|
|
5487
|
+
isFavorite
|
|
5488
|
+
});
|
|
5377
5489
|
const data = res.data?.data;
|
|
5378
|
-
printSuccess(
|
|
5490
|
+
printSuccess(
|
|
5491
|
+
data?.message ?? `${isFavorite ? "Favorited" : "Unfavorited"} ${mediaId}`
|
|
5492
|
+
);
|
|
5379
5493
|
} catch (err) {
|
|
5380
5494
|
printError(err.response?.data?.message ?? err.message);
|
|
5381
5495
|
process.exit(1);
|
|
@@ -5599,6 +5713,7 @@ var init_cli = __esm({
|
|
|
5599
5713
|
// src/index.ts
|
|
5600
5714
|
var index_exports = {};
|
|
5601
5715
|
__export(index_exports, {
|
|
5716
|
+
SPEAK_MCP_TOOL_NAMES: () => SPEAK_MCP_TOOL_NAMES,
|
|
5602
5717
|
createSpeakClient: () => createSpeakClient,
|
|
5603
5718
|
formatAxiosError: () => formatAxiosError,
|
|
5604
5719
|
registerAllTools: () => registerAllTools,
|
|
@@ -5610,6 +5725,110 @@ init_tools();
|
|
|
5610
5725
|
init_resources();
|
|
5611
5726
|
init_prompts();
|
|
5612
5727
|
init_client();
|
|
5728
|
+
|
|
5729
|
+
// src/tool-names.ts
|
|
5730
|
+
var SPEAK_MCP_TOOL_NAMES = [
|
|
5731
|
+
// analytics
|
|
5732
|
+
"get_media_statistics",
|
|
5733
|
+
// automations
|
|
5734
|
+
"list_automations",
|
|
5735
|
+
"get_automation",
|
|
5736
|
+
"create_automation",
|
|
5737
|
+
"update_automation",
|
|
5738
|
+
"toggle_automation_status",
|
|
5739
|
+
// clips
|
|
5740
|
+
"get_clips",
|
|
5741
|
+
"create_clip",
|
|
5742
|
+
"update_clip",
|
|
5743
|
+
"delete_clip",
|
|
5744
|
+
// embed
|
|
5745
|
+
"create_embed",
|
|
5746
|
+
"update_embed",
|
|
5747
|
+
"check_embed",
|
|
5748
|
+
"get_embed_iframe_url",
|
|
5749
|
+
// exports
|
|
5750
|
+
"export_media",
|
|
5751
|
+
"export_multiple_media",
|
|
5752
|
+
// fields
|
|
5753
|
+
"list_fields",
|
|
5754
|
+
"create_field",
|
|
5755
|
+
"update_field",
|
|
5756
|
+
"update_multiple_fields",
|
|
5757
|
+
// folders
|
|
5758
|
+
"list_folders",
|
|
5759
|
+
"create_folder",
|
|
5760
|
+
"update_folder",
|
|
5761
|
+
"delete_folder",
|
|
5762
|
+
"get_folder_info",
|
|
5763
|
+
"clone_folder",
|
|
5764
|
+
"get_folder_views",
|
|
5765
|
+
"get_all_folder_views",
|
|
5766
|
+
"create_folder_view",
|
|
5767
|
+
"update_folder_view",
|
|
5768
|
+
"clone_folder_view",
|
|
5769
|
+
// media
|
|
5770
|
+
"get_signed_upload_url",
|
|
5771
|
+
"upload_media",
|
|
5772
|
+
"get_media_status",
|
|
5773
|
+
"get_media_insights",
|
|
5774
|
+
"get_transcript",
|
|
5775
|
+
"list_media",
|
|
5776
|
+
"search_media",
|
|
5777
|
+
"delete_media",
|
|
5778
|
+
"update_media_metadata",
|
|
5779
|
+
"toggle_media_favorite",
|
|
5780
|
+
"reanalyze_media",
|
|
5781
|
+
"get_captions",
|
|
5782
|
+
"list_supported_languages",
|
|
5783
|
+
"update_transcript_speakers",
|
|
5784
|
+
"bulk_update_transcript_speakers",
|
|
5785
|
+
"bulk_move_media",
|
|
5786
|
+
// meeting
|
|
5787
|
+
"list_meeting_events",
|
|
5788
|
+
"schedule_meeting_event",
|
|
5789
|
+
"remove_assistant_from_meeting",
|
|
5790
|
+
"delete_scheduled_assistant",
|
|
5791
|
+
"get_live_meeting_transcript",
|
|
5792
|
+
// prompt
|
|
5793
|
+
"ask_magic_prompt",
|
|
5794
|
+
"list_prompts",
|
|
5795
|
+
"get_favorite_prompts",
|
|
5796
|
+
"toggle_prompt_favorite",
|
|
5797
|
+
"get_chat_history",
|
|
5798
|
+
"get_chat_messages",
|
|
5799
|
+
"update_chat_title",
|
|
5800
|
+
"delete_chat_message",
|
|
5801
|
+
"submit_chat_feedback",
|
|
5802
|
+
"retry_magic_prompt",
|
|
5803
|
+
"export_chat_answer",
|
|
5804
|
+
"get_chat_statistics",
|
|
5805
|
+
// recorder
|
|
5806
|
+
"list_recorders",
|
|
5807
|
+
"create_recorder",
|
|
5808
|
+
"update_recorder_settings",
|
|
5809
|
+
"update_recorder_questions",
|
|
5810
|
+
"delete_recorder",
|
|
5811
|
+
"generate_recorder_url",
|
|
5812
|
+
"get_recorder_info",
|
|
5813
|
+
"get_recorder_recordings",
|
|
5814
|
+
"check_recorder_status",
|
|
5815
|
+
"clone_recorder",
|
|
5816
|
+
// text
|
|
5817
|
+
"create_text_note",
|
|
5818
|
+
"update_text_note",
|
|
5819
|
+
"get_text_insight",
|
|
5820
|
+
"reanalyze_text",
|
|
5821
|
+
// webhooks
|
|
5822
|
+
"list_webhooks",
|
|
5823
|
+
"create_webhook",
|
|
5824
|
+
"update_webhook",
|
|
5825
|
+
"delete_webhook",
|
|
5826
|
+
// workflows (high-level wrappers around media + upload tools)
|
|
5827
|
+
"upload_and_analyze",
|
|
5828
|
+
"upload_local_file"
|
|
5829
|
+
];
|
|
5830
|
+
|
|
5831
|
+
// src/index.ts
|
|
5613
5832
|
var args = process.argv.slice(2);
|
|
5614
5833
|
var cliCommands = [
|
|
5615
5834
|
"config",
|
|
@@ -5684,6 +5903,7 @@ if (isCliMode) {
|
|
|
5684
5903
|
}
|
|
5685
5904
|
// Annotate the CommonJS export names for ESM import in node:
|
|
5686
5905
|
0 && (module.exports = {
|
|
5906
|
+
SPEAK_MCP_TOOL_NAMES,
|
|
5687
5907
|
createSpeakClient,
|
|
5688
5908
|
formatAxiosError,
|
|
5689
5909
|
registerAllTools,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@speakai/mcp-server",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.11.0",
|
|
4
4
|
"mcpName": "io.github.speakai/mcp-server",
|
|
5
5
|
"description": "Official Speak AI MCP Server — capture meetings, search thousands of recordings, run async voice and video surveys, create clips, and automate workflows from your AI assistant.",
|
|
6
6
|
"homepage": "https://mcp.speakai.co",
|
|
@@ -49,7 +49,7 @@
|
|
|
49
49
|
"zod": "^3.22.0"
|
|
50
50
|
},
|
|
51
51
|
"devDependencies": {
|
|
52
|
-
"@speakai/shared": "^1.9.
|
|
52
|
+
"@speakai/shared": "^1.9.2",
|
|
53
53
|
"@types/node": "^20.0.0",
|
|
54
54
|
"@vitest/coverage-v8": "^4.1.6",
|
|
55
55
|
"tsup": "^8.5.1",
|