@speakai/mcp-server 1.10.1 → 1.12.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/README.md +2 -2
- package/dist/index.d.ts +9 -0
- package/dist/index.js +111 -5
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -402,9 +402,9 @@ SPEAK_API_KEY=your-key npx @speakai/mcp-server
|
|
|
402
402
|
| Tool | Description |
|
|
403
403
|
|---|---|
|
|
404
404
|
| `get_signed_upload_url` | Get a pre-signed S3 URL for direct file upload |
|
|
405
|
-
| `upload_media` | Upload media from a public URL
|
|
405
|
+
| `upload_media` | Upload media from a URL — a direct/public file URL or a social/video link (YouTube, Instagram, TikTok, X, Facebook, Reddit, SoundCloud, …) resolved automatically. |
|
|
406
406
|
| `upload_local_file` | Upload a local file directly from disk |
|
|
407
|
-
| `upload_and_analyze` | Upload media and return its `media_id` immediately. Poll `get_media_status` until `processed`, then call `get_media_insights` for AI summaries. |
|
|
407
|
+
| `upload_and_analyze` | Upload media from a URL (direct file or social/video link, resolved automatically) and return its `media_id` immediately. Poll `get_media_status` until `processed`, then call `get_media_insights` for AI summaries. |
|
|
408
408
|
| `list_media` | List and search media files with filters, pagination, and optional inline data (transcripts, speakers, keywords) via `include` param |
|
|
409
409
|
| `get_media_insights` | Get AI insights — topics, sentiment, summaries, action items |
|
|
410
410
|
| `get_transcript` | Get full transcript with speaker labels and timestamps |
|
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
|
@@ -1208,10 +1208,10 @@ function register(server, client) {
|
|
|
1208
1208
|
registerSpeakTool(
|
|
1209
1209
|
server,
|
|
1210
1210
|
"upload_media",
|
|
1211
|
-
"Upload media from a
|
|
1211
|
+
"Upload media from a URL \u2014 a direct/public file URL, a pre-signed S3 URL, or a shareable social/video link (YouTube, Instagram, TikTok, X, Facebook, Reddit, SoundCloud, and similar) which Speak resolves to the underlying media automatically. Processing is asynchronous \u2014 after uploading, use get_media_status to poll until state is 'processed' (typically 1-3 minutes for audio under 60 min), then use get_transcript and get_media_insights to retrieve results. For a single call that handles everything, use upload_and_analyze instead. For local files, use upload_local_file. (Vimeo links are not yet supported.)",
|
|
1212
1212
|
{
|
|
1213
1213
|
name: import_zod2.z.string().min(1).describe("Display name for the media file"),
|
|
1214
|
-
url: import_zod2.z.string().describe("
|
|
1214
|
+
url: import_zod2.z.string().describe("Direct/public media file URL, pre-signed S3 URL, or a shareable social/video page link (e.g. an Instagram reel or TikTok URL) \u2014 page links are resolved to the underlying media server-side."),
|
|
1215
1215
|
mediaType: import_zod2.z.enum([MediaType.AUDIO, MediaType.VIDEO]).describe('Type of media: "audio" or "video"'),
|
|
1216
1216
|
description: import_zod2.z.string().optional().describe("Description of the media file"),
|
|
1217
1217
|
sourceLanguage: import_zod2.z.string().optional().describe('BCP-47 language code for transcription, e.g. "en-US" or "he-IL"'),
|
|
@@ -4214,9 +4214,9 @@ function register14(server, client) {
|
|
|
4214
4214
|
registerSpeakTool(
|
|
4215
4215
|
server,
|
|
4216
4216
|
"upload_and_analyze",
|
|
4217
|
-
"Upload media and
|
|
4217
|
+
"Upload and transcribe media from a URL \u2014 a direct/public file URL, OR a shareable social/video link (YouTube, Instagram, TikTok, X, Facebook, Reddit, SoundCloud, and similar), which Speak resolves to the underlying media automatically. Returns media_id immediately; after this returns, poll get_media_status until state is 'processed' (typically 1-3 min for under 60min audio), then call get_media_insights for AI summaries. This async pattern is required for remote MCP transports \u2014 long blocking calls die at proxy idle timeouts. (Vimeo links are not yet supported.)",
|
|
4218
4218
|
{
|
|
4219
|
-
url: import_zod15.z.string().describe("
|
|
4219
|
+
url: import_zod15.z.string().describe("Direct/public media file URL, or a shareable social/video page link (e.g. an Instagram reel, TikTok, YouTube, or X post URL) \u2014 page links are resolved to the underlying media server-side. Pass the URL the user gave you as-is."),
|
|
4220
4220
|
name: import_zod15.z.string().optional().describe("Display name for the media (defaults to filename from URL)"),
|
|
4221
4221
|
mediaType: import_zod15.z.enum([MediaType.AUDIO, MediaType.VIDEO]).optional().describe("Media type (default: audio)"),
|
|
4222
4222
|
sourceLanguage: import_zod15.z.string().optional().describe("BCP-47 language code (e.g., 'en-US', 'he-IL')"),
|
|
@@ -4540,7 +4540,7 @@ function registerPrompts(server) {
|
|
|
4540
4540
|
"analyze-meeting",
|
|
4541
4541
|
"Upload a meeting recording and get a full analysis \u2014 transcript, insights, action items, and key takeaways.",
|
|
4542
4542
|
{
|
|
4543
|
-
url: import_zod16.z.string().describe("URL of the meeting recording"),
|
|
4543
|
+
url: import_zod16.z.string().describe("URL of the meeting recording \u2014 a direct file link or a shareable social/video link (resolved automatically)"),
|
|
4544
4544
|
name: import_zod16.z.string().optional().describe("Meeting name (optional)")
|
|
4545
4545
|
},
|
|
4546
4546
|
async ({ url, name }) => ({
|
|
@@ -5713,6 +5713,7 @@ var init_cli = __esm({
|
|
|
5713
5713
|
// src/index.ts
|
|
5714
5714
|
var index_exports = {};
|
|
5715
5715
|
__export(index_exports, {
|
|
5716
|
+
SPEAK_MCP_TOOL_NAMES: () => SPEAK_MCP_TOOL_NAMES,
|
|
5716
5717
|
createSpeakClient: () => createSpeakClient,
|
|
5717
5718
|
formatAxiosError: () => formatAxiosError,
|
|
5718
5719
|
registerAllTools: () => registerAllTools,
|
|
@@ -5724,6 +5725,110 @@ init_tools();
|
|
|
5724
5725
|
init_resources();
|
|
5725
5726
|
init_prompts();
|
|
5726
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
|
|
5727
5832
|
var args = process.argv.slice(2);
|
|
5728
5833
|
var cliCommands = [
|
|
5729
5834
|
"config",
|
|
@@ -5798,6 +5903,7 @@ if (isCliMode) {
|
|
|
5798
5903
|
}
|
|
5799
5904
|
// Annotate the CommonJS export names for ESM import in node:
|
|
5800
5905
|
0 && (module.exports = {
|
|
5906
|
+
SPEAK_MCP_TOOL_NAMES,
|
|
5801
5907
|
createSpeakClient,
|
|
5802
5908
|
formatAxiosError,
|
|
5803
5909
|
registerAllTools,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@speakai/mcp-server",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.12.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",
|