@speakai/mcp-server 1.13.2 → 1.13.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (3) hide show
  1. package/README.md +10 -10
  2. package/dist/index.js +68 -55
  3. package/package.json +1 -1
package/README.md CHANGED
@@ -246,14 +246,14 @@ Speak AI ships 107 tools your AI assistant can call. You don't memorize them —
246
246
 
247
247
  | Ask | Tools used (auto) |
248
248
  |---|---|
249
- | "Find customer interviews about pricing and group the feedback by theme" | `search_media`, `ask_magic_prompt` |
249
+ | "Find customer interviews about pricing and group the feedback by theme" | `search_media`, `ask_ai_chat` |
250
250
  | "Summarize this week's meetings into decisions, owners, and risks" | `list_media`, `get_media_insights` |
251
- | "Pull action items from yesterday's call" | `get_media_insights`, `ask_magic_prompt` |
251
+ | "Pull action items from yesterday's call" | `get_media_insights`, `ask_ai_chat` |
252
252
  | "Schedule the AI to join my 2pm Zoom" | `schedule_meeting_event` |
253
253
  | "Pull the live transcript from my current MS Teams meeting since last fetch" | `list_meeting_events`, `get_live_meeting_transcript` |
254
254
  | "Find a 30-second webinar highlight and export captions" | `create_clip`, `export_media` |
255
255
  | "Export the transcript as a PDF and captions as SRT" | `export_media` |
256
- | "Compare Q1 sales calls against Q2 sales calls and summarize changed objections" | `search_media`, `ask_magic_prompt` |
256
+ | "Compare Q1 sales calls against Q2 sales calls and summarize changed objections" | `search_media`, `ask_ai_chat` |
257
257
 
258
258
  Full tool catalog is in the developer reference below.
259
259
 
@@ -421,13 +421,13 @@ SPEAK_API_KEY=your-key npx @speakai/mcp-server
421
421
  </details>
422
422
 
423
423
  <details>
424
- <summary>Magic Prompt / AI Chat (12 tools)</summary>
424
+ <summary>AI Chat (12 tools)</summary>
425
425
 
426
426
  | Tool | Description |
427
427
  |---|---|
428
- | `ask_magic_prompt` | Ask AI questions about media, folders, or your whole workspace |
428
+ | `ask_ai_chat` | Ask AI questions about media, folders, or your whole workspace |
429
429
  | `retry_magic_prompt` | Retry a failed or incomplete AI response |
430
- | `get_chat_history` | List recent Magic Prompt conversations |
430
+ | `get_chat_history` | List recent AI Chat conversations |
431
431
  | `get_chat_messages` | Get full message history for conversations |
432
432
  | `delete_chat_message` | Delete a specific chat message |
433
433
  | `list_prompts` | List available AI prompt templates |
@@ -435,7 +435,7 @@ SPEAK_API_KEY=your-key npx @speakai/mcp-server
435
435
  | `toggle_prompt_favorite` | Mark or unmark a chat message as favorite |
436
436
  | `update_chat_title` | Rename a chat conversation |
437
437
  | `submit_chat_feedback` | Rate a chat response (thumbs up/down) |
438
- | `get_chat_statistics` | Get Magic Prompt usage statistics |
438
+ | `get_chat_statistics` | Get AI Chat usage statistics |
439
439
  | `export_chat_answer` | Export a conversation or answer |
440
440
 
441
441
  </details>
@@ -723,7 +723,7 @@ npx @speakai/mcp-server config set-key
723
723
  | Command | Description |
724
724
  |---|---|
725
725
  | `ask <prompt>` | Ask AI about media, folders, or your whole workspace |
726
- | `chat-history` | List past Magic Prompt conversations |
726
+ | `chat-history` | List past AI Chat conversations |
727
727
  | `search <query>` | Full-text search across transcripts and insights |
728
728
 
729
729
  #### Folders & Clips
@@ -822,7 +822,7 @@ You: "What themes came up across all our customer interviews this month?"
822
822
 
823
823
  AI: Let me search your media library.
824
824
  → search_media(query: "customer interview", startDate: "2026-04-01")
825
- ask_magic_prompt(mediaIds: [...], prompt: "What are the recurring themes?")
825
+ ask_ai_chat(mediaIds: [...], prompt: "What are the recurring themes?")
826
826
 
827
827
  Across 12 interviews, the top themes were:
828
828
  1. Pricing sensitivity (mentioned in 8/12)
@@ -842,7 +842,7 @@ AI: → schedule_meeting_event(meetingUrl, scheduledAt: "2026-04-25T14:00:00Z")
842
842
 
843
843
  [After the meeting]
844
844
  → get_media_insights(mediaId)
845
- ask_magic_prompt(mediaIds: [...], prompt: "List all action items with owners")
845
+ ask_ai_chat(mediaIds: [...], prompt: "List all action items with owners")
846
846
 
847
847
  Here's your meeting summary with 7 action items...
848
848
  ```
package/dist/index.js CHANGED
@@ -1251,7 +1251,7 @@ function register(server, client) {
1251
1251
  registerSpeakTool(
1252
1252
  server,
1253
1253
  "list_media",
1254
- "List and search media files in the workspace with filtering, pagination, and sorting. Use filterName for text search, mediaType to filter by audio/video/text, folderId for folder-specific results, and from/to for date ranges. Use the include param to embed additional data (transcripts, speakers, keywords) inline with each result, avoiding N+1 API calls. Returns mediaIds you can pass to get_transcript, get_media_insights, or ask_magic_prompt. For deep full-text search across transcripts, use search_media instead.",
1254
+ "List and search media files in the workspace with filtering, pagination, and sorting. Use filterName for text search, mediaType to filter by audio/video/text, folderId for folder-specific results, and from/to for date ranges. Use the include param to embed additional data (transcripts, speakers, keywords) inline with each result, avoiding N+1 API calls. Returns mediaIds you can pass to get_transcript, get_media_insights, or ask_ai_chat. For deep full-text search across transcripts, use search_media instead.",
1255
1255
  {
1256
1256
  mediaType: import_zod2.z.enum([MediaType.AUDIO, MediaType.VIDEO, MediaType.TEXT]).optional().describe('Filter by media type: "audio", "video", or "text"'),
1257
1257
  page: import_zod2.z.number().int().min(0).optional().describe("Page number for pagination (0-based, default: 0)"),
@@ -1306,7 +1306,7 @@ function register(server, client) {
1306
1306
  registerSpeakTool(
1307
1307
  server,
1308
1308
  "get_media_insights",
1309
- "Retrieve AI-generated insights for a processed media file \u2014 topics, sentiment, keywords, action items, summaries, and more. The media must be in 'processed' state (check with get_media_status first). For asking custom questions about a media file, use ask_magic_prompt instead.",
1309
+ "Retrieve AI-generated insights for a processed media file \u2014 topics, sentiment, keywords, action items, summaries, and more. The media must be in 'processed' state (check with get_media_status first). For asking custom questions about a media file, use ask_ai_chat instead.",
1310
1310
  {
1311
1311
  mediaId: import_zod2.z.string().min(1).describe("Unique identifier of the media file")
1312
1312
  },
@@ -2889,59 +2889,71 @@ __export(prompt_exports, {
2889
2889
  });
2890
2890
  function register7(server, client) {
2891
2891
  const api = client ?? speakClient;
2892
+ const askAiChatDescription = [
2893
+ "Ask an AI-powered question about your media using Speak AI's AI Chat.",
2894
+ "Supports querying a single file, multiple files, entire folders, or your whole workspace.",
2895
+ "Pass mediaIds for specific files, folderIds for entire folders, or omit both to search across all media.",
2896
+ "Use assistantType to get specialized responses (e.g., 'researcher' for academic analysis, 'sales' for deal insights).",
2897
+ "To continue a conversation, pass the promptId from a previous response.",
2898
+ "Returns a promptId \u2014 save it to continue the conversation with follow-up questions."
2899
+ ].join(" ");
2900
+ const askAiChatInputSchema = {
2901
+ prompt: import_zod8.z.string().min(1).describe("The question or prompt to ask about the media"),
2902
+ mediaIds: import_zod8.z.array(import_zod8.z.string()).optional().describe("Array of media IDs to query. Omit along with folderIds to search across all media in your workspace."),
2903
+ folderIds: import_zod8.z.array(import_zod8.z.string()).optional().describe("Array of folder IDs to scope the query to. Omit along with mediaIds to search across all media."),
2904
+ folderId: import_zod8.z.string().optional().describe("Single folder ID to scope the query to. Use folderIds for multiple folders."),
2905
+ assistantType: import_zod8.z.enum(Object.values(AssistantType)).optional().describe("Assistant persona: 'general' (default), 'researcher' (academic), 'marketer' (content), 'sales' (deals), 'recruiter' (hiring). Use 'custom' with assistantTemplateId."),
2906
+ assistantTemplateId: import_zod8.z.string().optional().describe("Required when assistantType is 'custom'. ID of a custom assistant template from list_prompts."),
2907
+ promptId: import_zod8.z.string().optional().describe("ID of an existing conversation to continue. Pass this to maintain chat context across multiple questions."),
2908
+ speakers: import_zod8.z.array(import_zod8.z.string()).optional().describe("Filter to specific speaker IDs from the transcript"),
2909
+ tags: import_zod8.z.array(import_zod8.z.string()).optional().describe("Filter media by tags"),
2910
+ startDate: import_zod8.z.string().optional().describe("Start date for date range filter (ISO 8601, e.g., '2025-01-01')"),
2911
+ endDate: import_zod8.z.string().optional().describe("End date for date range filter (ISO 8601, e.g., '2025-03-31')"),
2912
+ isIndividualPrompt: import_zod8.z.boolean().optional().describe("When true, processes each media file separately instead of combining context. Useful for comparing responses across files."),
2913
+ fieldId: import_zod8.z.string().optional().describe("Scope the prompt to a single custom field"),
2914
+ fieldIds: import_zod8.z.array(import_zod8.z.string()).max(10).optional().describe("Scope the prompt to multiple custom fields (max 10)"),
2915
+ filters: import_zod8.z.record(import_zod8.z.unknown()).optional().describe("Advanced filter object to scope which media the prompt runs over")
2916
+ };
2917
+ const askAiChatAnnotations = {
2918
+ title: "Ask AI Chat",
2919
+ readOnlyHint: false,
2920
+ destructiveHint: false,
2921
+ idempotentHint: false,
2922
+ openWorldHint: false
2923
+ };
2924
+ const askAiChatHandler = async (params) => {
2925
+ try {
2926
+ const result = await api.post("/v1/prompt", params);
2927
+ return {
2928
+ content: [{ type: "text", text: JSON.stringify(result.data, null, 2) }]
2929
+ };
2930
+ } catch (err) {
2931
+ return {
2932
+ content: [{ type: "text", text: `Error: ${formatAxiosError(err)}` }],
2933
+ isError: true
2934
+ };
2935
+ }
2936
+ };
2937
+ registerSpeakTool(
2938
+ server,
2939
+ "ask_ai_chat",
2940
+ askAiChatDescription,
2941
+ askAiChatInputSchema,
2942
+ askAiChatAnnotations,
2943
+ askAiChatHandler
2944
+ );
2892
2945
  registerSpeakTool(
2893
2946
  server,
2894
2947
  "ask_magic_prompt",
2895
- [
2896
- "Ask an AI-powered question about your media using Speak AI's Magic Prompt.",
2897
- "Supports querying a single file, multiple files, entire folders, or your whole workspace.",
2898
- "Pass mediaIds for specific files, folderIds for entire folders, or omit both to search across all media.",
2899
- "Use assistantType to get specialized responses (e.g., 'researcher' for academic analysis, 'sales' for deal insights).",
2900
- "To continue a conversation, pass the promptId from a previous response.",
2901
- "Returns a promptId \u2014 save it to continue the conversation with follow-up questions."
2902
- ].join(" "),
2903
- {
2904
- prompt: import_zod8.z.string().min(1).describe("The question or prompt to ask about the media"),
2905
- mediaIds: import_zod8.z.array(import_zod8.z.string()).optional().describe("Array of media IDs to query. Omit along with folderIds to search across all media in your workspace."),
2906
- folderIds: import_zod8.z.array(import_zod8.z.string()).optional().describe("Array of folder IDs to scope the query to. Omit along with mediaIds to search across all media."),
2907
- folderId: import_zod8.z.string().optional().describe("Single folder ID to scope the query to. Use folderIds for multiple folders."),
2908
- assistantType: import_zod8.z.enum(Object.values(AssistantType)).optional().describe("Assistant persona: 'general' (default), 'researcher' (academic), 'marketer' (content), 'sales' (deals), 'recruiter' (hiring). Use 'custom' with assistantTemplateId."),
2909
- assistantTemplateId: import_zod8.z.string().optional().describe("Required when assistantType is 'custom'. ID of a custom assistant template from list_prompts."),
2910
- promptId: import_zod8.z.string().optional().describe("ID of an existing conversation to continue. Pass this to maintain chat context across multiple questions."),
2911
- speakers: import_zod8.z.array(import_zod8.z.string()).optional().describe("Filter to specific speaker IDs from the transcript"),
2912
- tags: import_zod8.z.array(import_zod8.z.string()).optional().describe("Filter media by tags"),
2913
- startDate: import_zod8.z.string().optional().describe("Start date for date range filter (ISO 8601, e.g., '2025-01-01')"),
2914
- endDate: import_zod8.z.string().optional().describe("End date for date range filter (ISO 8601, e.g., '2025-03-31')"),
2915
- isIndividualPrompt: import_zod8.z.boolean().optional().describe("When true, processes each media file separately instead of combining context. Useful for comparing responses across files."),
2916
- fieldId: import_zod8.z.string().optional().describe("Scope the prompt to a single custom field"),
2917
- fieldIds: import_zod8.z.array(import_zod8.z.string()).max(10).optional().describe("Scope the prompt to multiple custom fields (max 10)"),
2918
- filters: import_zod8.z.record(import_zod8.z.unknown()).optional().describe("Advanced filter object to scope which media the prompt runs over")
2919
- },
2920
- {
2921
- title: "Ask AI About Your Recordings",
2922
- readOnlyHint: false,
2923
- destructiveHint: false,
2924
- idempotentHint: false,
2925
- openWorldHint: false
2926
- },
2927
- async (params) => {
2928
- try {
2929
- const result = await api.post("/v1/prompt", params);
2930
- return {
2931
- content: [{ type: "text", text: JSON.stringify(result.data, null, 2) }]
2932
- };
2933
- } catch (err) {
2934
- return {
2935
- content: [{ type: "text", text: `Error: ${formatAxiosError(err)}` }],
2936
- isError: true
2937
- };
2938
- }
2939
- }
2948
+ `[Deprecated \u2014 use ask_ai_chat] ${askAiChatDescription}`,
2949
+ askAiChatInputSchema,
2950
+ askAiChatAnnotations,
2951
+ askAiChatHandler
2940
2952
  );
2941
2953
  registerSpeakTool(
2942
2954
  server,
2943
2955
  "retry_magic_prompt",
2944
- "Retry a failed or incomplete Magic Prompt response. Use when a previous ask_magic_prompt call returned an error or incomplete answer.",
2956
+ "Retry a failed or incomplete AI Chat response. Use when a previous ask_ai_chat call returned an error or incomplete answer.",
2945
2957
  {
2946
2958
  promptId: import_zod8.z.string().min(1).describe("ID of the conversation containing the failed message"),
2947
2959
  messageId: import_zod8.z.string().min(1).describe("ID of the specific message to retry")
@@ -2970,7 +2982,7 @@ function register7(server, client) {
2970
2982
  registerSpeakTool(
2971
2983
  server,
2972
2984
  "get_chat_history",
2973
- "Get a list of recent Magic Prompt conversations. Returns conversation summaries with promptIds that can be used to continue conversations via ask_magic_prompt or retrieve full messages via get_chat_messages.",
2985
+ "Get a list of recent AI Chat conversations. Returns conversation summaries with promptIds that can be used to continue conversations via ask_ai_chat or retrieve full messages via get_chat_messages.",
2974
2986
  {
2975
2987
  limit: import_zod8.z.number().int().positive().optional().describe("Number of recent conversations to return (default: 10)")
2976
2988
  },
@@ -3061,7 +3073,7 @@ function register7(server, client) {
3061
3073
  registerSpeakTool(
3062
3074
  server,
3063
3075
  "list_prompts",
3064
- "List all available Magic Prompt templates. Use template IDs with ask_magic_prompt's assistantTemplateId parameter when using assistantType 'custom'.",
3076
+ "List all available AI Chat templates. Use template IDs with ask_ai_chat's assistantTemplateId parameter when using assistantType 'custom'.",
3065
3077
  {},
3066
3078
  {
3067
3079
  title: "List Prompt Templates",
@@ -3203,7 +3215,7 @@ function register7(server, client) {
3203
3215
  registerSpeakTool(
3204
3216
  server,
3205
3217
  "get_chat_statistics",
3206
- "Get usage statistics for Magic Prompt / chat. Returns metrics on prompt usage, optionally filtered by date range.",
3218
+ "Get usage statistics for AI Chat / chat. Returns metrics on prompt usage, optionally filtered by date range.",
3207
3219
  {
3208
3220
  startDate: import_zod8.z.string().optional().describe("Start date for stats (ISO 8601)"),
3209
3221
  endDate: import_zod8.z.string().optional().describe("End date for stats (ISO 8601)")
@@ -3232,7 +3244,7 @@ function register7(server, client) {
3232
3244
  registerSpeakTool(
3233
3245
  server,
3234
3246
  "export_chat_answer",
3235
- "Export a specific Magic Prompt answer. Useful for saving AI-generated summaries, reports, or analysis results.",
3247
+ "Export a specific AI Chat answer. Useful for saving AI-generated summaries, reports, or analysis results.",
3236
3248
  {
3237
3249
  promptId: import_zod8.z.string().min(1).describe("ID of the conversation to export"),
3238
3250
  messageId: import_zod8.z.string().min(1).describe("ID of the specific message/answer to export"),
@@ -4759,7 +4771,7 @@ function register15(server, client) {
4759
4771
  {
4760
4772
  title: "Update User Group",
4761
4773
  readOnlyHint: false,
4762
- destructiveHint: false,
4774
+ destructiveHint: true,
4763
4775
  idempotentHint: true,
4764
4776
  openWorldHint: false
4765
4777
  },
@@ -5534,7 +5546,7 @@ function registerPrompts(server) {
5534
5546
  ``,
5535
5547
  `Steps:`,
5536
5548
  `1. Use search_media to find relevant media matching this topic`,
5537
- `2. For the most relevant results, use ask_magic_prompt with the matching mediaIds to ask: "${topic}"`,
5549
+ `2. For the most relevant results, use ask_ai_chat with the matching mediaIds to ask: "${topic}"`,
5538
5550
  `3. Synthesize findings across all results:`,
5539
5551
  ` - Common themes and patterns`,
5540
5552
  ` - Notable quotes or data points`,
@@ -5679,6 +5691,7 @@ var init_tool_names = __esm({
5679
5691
  "delete_scheduled_assistant",
5680
5692
  "get_live_meeting_transcript",
5681
5693
  // prompt
5694
+ "ask_ai_chat",
5682
5695
  "ask_magic_prompt",
5683
5696
  "list_prompts",
5684
5697
  "get_favorite_prompts",
@@ -6384,7 +6397,7 @@ function createCli() {
6384
6397
  process.exit(1);
6385
6398
  }
6386
6399
  });
6387
- program.command("chat-history").description("List past Magic Prompt conversations").option("--json", "Output raw JSON").action(async (opts) => {
6400
+ program.command("chat-history").description("List past AI Chat conversations").option("--json", "Output raw JSON").action(async (opts) => {
6388
6401
  requireApiKey();
6389
6402
  const client = await getClient();
6390
6403
  try {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@speakai/mcp-server",
3
- "version": "1.13.2",
3
+ "version": "1.13.4",
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",