@speakai/mcp-server 1.0.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.
Files changed (3) hide show
  1. package/README.md +329 -0
  2. package/dist/index.js +1688 -0
  3. package/package.json +39 -0
package/README.md ADDED
@@ -0,0 +1,329 @@
1
+ <p align="center">
2
+ <img src="https://speakai.co/assets/images/speak-ai-logo.png" alt="Speak AI" width="200" />
3
+ </p>
4
+
5
+ <h1 align="center">Speak AI MCP Server</h1>
6
+
7
+ <p align="center">
8
+ Connect Claude, ChatGPT, and other AI assistants to your <a href="https://speakai.co">Speak AI</a> workspace.<br/>
9
+ Transcribe meetings, analyze media, extract insights — all through natural conversation.
10
+ </p>
11
+
12
+ <p align="center">
13
+ <a href="https://www.npmjs.com/package/@speakai/mcp-server"><img src="https://img.shields.io/npm/v/@speakai/mcp-server" alt="npm version" /></a>
14
+ <a href="https://modelcontextprotocol.io"><img src="https://img.shields.io/badge/MCP-compatible-blue" alt="MCP compatible" /></a>
15
+ <a href="https://opensource.org/licenses/MIT"><img src="https://img.shields.io/badge/license-MIT-green" alt="License: MIT" /></a>
16
+ </p>
17
+
18
+ ---
19
+
20
+ ## What You Can Do
21
+
22
+ Ask your AI assistant to work with your Speak AI data:
23
+
24
+ > "Transcribe this audio file and give me the key takeaways"
25
+
26
+ > "What action items came out of yesterday's team meeting?"
27
+
28
+ > "Export all Q1 interview transcripts as PDFs with speaker names"
29
+
30
+ > "Schedule the meeting assistant for my Zoom call at 2pm"
31
+
32
+ > "Create a folder called Customer Research and move these recordings into it"
33
+
34
+ ---
35
+
36
+ ## Quick Start
37
+
38
+ ### 1. Get Your API Key
39
+
40
+ 1. Log in to [Speak AI](https://app.speakai.co)
41
+ 2. Go to **Settings > Developer**
42
+ 3. Copy your **API Key**
43
+
44
+ That's it — the server handles access token management automatically.
45
+
46
+ ### 2. Connect to Your AI Assistant
47
+
48
+ There are two ways to connect — choose the one that fits your setup:
49
+
50
+ ---
51
+
52
+ ## Option A: Claude Web / ChatGPT (Remote Connector)
53
+
54
+ For **Claude on the web** (claude.ai) and **ChatGPT**, use the hosted endpoint. No installation required.
55
+
56
+ **Claude (claude.ai):**
57
+
58
+ 1. Go to **Settings > Connectors > Add Connector**
59
+ 2. Enter the URL: `https://api.speakai.co/v1/mcp/sse`
60
+ 3. Add your authentication headers
61
+ 4. Start chatting with your Speak AI data
62
+
63
+ **ChatGPT:**
64
+
65
+ 1. Go to **Settings > Connectors > Create**
66
+ 2. Enter the MCP URL: `https://api.speakai.co/v1/mcp/sse`
67
+ 3. Configure authentication with your API key
68
+ 4. Done — your GPT can now access Speak AI
69
+
70
+ ---
71
+
72
+ ## Option B: Claude Desktop / Claude Code (Local Server)
73
+
74
+ For **Claude Desktop** and **Claude Code**, the server runs locally on your machine via npm.
75
+
76
+ **Claude Desktop** — add to your config file:
77
+
78
+ macOS: `~/Library/Application Support/Claude/claude_desktop_config.json`
79
+ Windows: `%APPDATA%\Claude\claude_desktop_config.json`
80
+
81
+ ```json
82
+ {
83
+ "mcpServers": {
84
+ "speak-ai": {
85
+ "command": "npx",
86
+ "args": ["-y", "@speakai/mcp-server"],
87
+ "env": {
88
+ "SPEAK_API_KEY": "your-api-key"
89
+ }
90
+ }
91
+ }
92
+ }
93
+ ```
94
+
95
+ **Claude Code (CLI):**
96
+
97
+ ```sh
98
+ export SPEAK_API_KEY="your-api-key"
99
+
100
+ claude mcp add speak-ai -- npx -y @speakai/mcp-server
101
+ claude
102
+ ```
103
+
104
+ **Any STDIO-compatible MCP client:**
105
+
106
+ ```sh
107
+ SPEAK_API_KEY=your-key npx @speakai/mcp-server
108
+ ```
109
+
110
+ ### Environment Variables
111
+
112
+ | Variable | Required | Default | Description |
113
+ |---|---|---|---|
114
+ | `SPEAK_API_KEY` | Yes | — | Your Speak AI API key |
115
+ | `SPEAK_ACCESS_TOKEN` | No | Auto-managed | JWT access token (auto-fetched and refreshed using your API key) |
116
+ | `SPEAK_BASE_URL` | No | `https://api.speakai.co` | API base URL |
117
+
118
+ ---
119
+
120
+ ## Available Tools (45)
121
+
122
+ ### Media (Audio/Video)
123
+
124
+ | Tool | Description |
125
+ |---|---|
126
+ | `get_signed_upload_url` | Get a pre-signed S3 URL for direct file upload |
127
+ | `upload_media` | Upload media from a public URL for transcription |
128
+ | `list_media` | List and search media files with filters and pagination |
129
+ | `get_media_insights` | Get AI insights — topics, sentiment, summaries, action items |
130
+ | `get_transcript` | Get full transcript with speaker labels and timestamps |
131
+ | `update_transcript_speakers` | Rename speaker labels in a transcript |
132
+ | `get_media_status` | Check processing status (pending → completed) |
133
+ | `update_media_metadata` | Update name, description, tags, or folder |
134
+ | `delete_media` | Permanently delete a media file |
135
+
136
+ ### Text Notes
137
+
138
+ | Tool | Description |
139
+ |---|---|
140
+ | `create_text_note` | Create a text note for AI analysis |
141
+ | `get_text_insight` | Get AI insights for a text note |
142
+ | `reanalyze_text` | Re-run AI analysis with latest models |
143
+ | `update_text_note` | Update note content (triggers re-analysis) |
144
+
145
+ ### Exports
146
+
147
+ | Tool | Description |
148
+ |---|---|
149
+ | `export_media` | Export as PDF, DOCX, SRT, VTT, TXT, CSV, or Markdown |
150
+ | `export_multiple_media` | Batch export with optional merge into one file |
151
+
152
+ ### Folders
153
+
154
+ | Tool | Description |
155
+ |---|---|
156
+ | `list_folders` | List all folders |
157
+ | `get_folder_info` | Get folder details and contents |
158
+ | `create_folder` | Create a new folder |
159
+ | `clone_folder` | Duplicate a folder and its contents |
160
+ | `update_folder` | Rename a folder |
161
+ | `delete_folder` | Delete a folder (media is preserved) |
162
+ | `get_all_folder_views` | List all saved views |
163
+ | `get_folder_views` | List views for a specific folder |
164
+ | `create_folder_view` | Create a saved view with custom filters |
165
+ | `update_folder_view` | Update a saved view |
166
+ | `clone_folder_view` | Duplicate a view |
167
+
168
+ ### Recorder / Survey
169
+
170
+ | Tool | Description |
171
+ |---|---|
172
+ | `create_recorder` | Create a new recorder or survey |
173
+ | `list_recorders` | List all recorders |
174
+ | `get_recorder_info` | Get recorder details and questions |
175
+ | `clone_recorder` | Duplicate a recorder |
176
+ | `get_recorder_recordings` | List all submissions |
177
+ | `generate_recorder_url` | Get a shareable public URL |
178
+ | `update_recorder_settings` | Update branding and permissions |
179
+ | `update_recorder_questions` | Update survey questions |
180
+ | `check_recorder_status` | Check if recorder is active |
181
+ | `delete_recorder` | Delete a recorder |
182
+
183
+ ### Media Embed
184
+
185
+ | Tool | Description |
186
+ |---|---|
187
+ | `create_embed` | Create an embeddable player widget |
188
+ | `update_embed` | Update embed settings |
189
+ | `check_embed` | Check if embed exists for media |
190
+ | `get_embed_iframe_url` | Get iframe URL for your website |
191
+
192
+ ### Magic Prompt (AI Chat)
193
+
194
+ | Tool | Description |
195
+ |---|---|
196
+ | `list_prompts` | List available AI prompt templates |
197
+ | `ask_magic_prompt` | Ask AI questions about any media file |
198
+
199
+ ### Meeting Assistant
200
+
201
+ | Tool | Description |
202
+ |---|---|
203
+ | `list_meeting_events` | List scheduled and completed events |
204
+ | `schedule_meeting_event` | Schedule AI assistant to join a meeting |
205
+ | `remove_assistant_from_meeting` | Remove assistant from active meeting |
206
+ | `delete_scheduled_assistant` | Cancel a scheduled meeting assistant |
207
+
208
+ ### Custom Fields
209
+
210
+ | Tool | Description |
211
+ |---|---|
212
+ | `list_fields` | List all custom fields |
213
+ | `create_field` | Create a custom field |
214
+ | `update_field` | Update a custom field |
215
+ | `update_multiple_fields` | Batch update multiple fields |
216
+
217
+ ### Automations
218
+
219
+ | Tool | Description |
220
+ |---|---|
221
+ | `list_automations` | List automation rules |
222
+ | `get_automation` | Get automation details |
223
+ | `create_automation` | Create an automation rule |
224
+ | `update_automation` | Update an automation |
225
+ | `toggle_automation_status` | Enable or disable an automation |
226
+
227
+ ### Webhooks
228
+
229
+ | Tool | Description |
230
+ |---|---|
231
+ | `create_webhook` | Create a webhook for event notifications |
232
+ | `list_webhooks` | List all webhooks |
233
+ | `update_webhook` | Update a webhook |
234
+ | `delete_webhook` | Delete a webhook |
235
+
236
+ ---
237
+
238
+ ## Workflows
239
+
240
+ ### Transcribe and Analyze
241
+
242
+ ```
243
+ You: "Upload and transcribe this recording: https://example.com/meeting.mp3"
244
+
245
+ AI: I'll upload that for you.
246
+ → upload_media(url, name, mediaType: "audio")
247
+ → get_media_status(mediaId) [polls until complete]
248
+ → get_transcript(mediaId)
249
+ → get_media_insights(mediaId)
250
+
251
+ Here's your transcript with 3 speakers identified.
252
+ Key insights: 5 action items, positive sentiment overall...
253
+ ```
254
+
255
+ ### Research Across Recordings
256
+
257
+ ```
258
+ You: "What themes came up across all our customer interviews this month?"
259
+
260
+ AI: Let me search your media library.
261
+ → list_media(filterName: "interview", from: "2026-03-01")
262
+ → get_media_insights(mediaId) [for each result]
263
+ → ask_magic_prompt(mediaId, "What are the recurring themes?")
264
+
265
+ Across 12 interviews, the top themes were...
266
+ ```
267
+
268
+ ### Meeting Automation
269
+
270
+ ```
271
+ You: "Join my 2pm Zoom call and send me the summary after"
272
+
273
+ AI: → schedule_meeting_event(meetingUrl, scheduledAt: "2026-03-23T14:00:00Z")
274
+
275
+ Done. After the meeting I'll pull the transcript and insights for you.
276
+ ```
277
+
278
+ ---
279
+
280
+ ## For Agent Developers
281
+
282
+ ### Authentication
283
+
284
+ All requests require `x-speakai-key` (API key) and `x-access-token` (JWT) headers. Access tokens expire — refresh using `POST /v1/auth/refreshToken`.
285
+
286
+ ### Rate Limits
287
+
288
+ - Implement exponential backoff on `429` responses
289
+ - Cache stable data (folder lists, field definitions)
290
+ - Use `export_multiple_media` over individual exports
291
+
292
+ ### Error Format
293
+
294
+ ```json
295
+ {
296
+ "content": [{ "type": "text", "text": "Error: HTTP 401: {\"message\": \"Invalid API key\"}" }],
297
+ "isError": true
298
+ }
299
+ ```
300
+
301
+ | Code | Meaning |
302
+ |---|---|
303
+ | `401` | Invalid or missing API key / access token |
304
+ | `403` | Insufficient permissions |
305
+ | `404` | Resource not found |
306
+ | `429` | Rate limit exceeded |
307
+
308
+ ---
309
+
310
+ ## Development
311
+
312
+ ```sh
313
+ git clone https://github.com/speakai/speak-mcp.git
314
+ cd speak-mcp
315
+ npm install
316
+ npm run dev # Run with hot reload
317
+ npm run build # Production build
318
+ ```
319
+
320
+ ## Resources
321
+
322
+ - [Speak AI](https://speakai.co) — Platform
323
+ - [API Documentation](https://docs.speakai.co) — Full API reference
324
+ - [MCP Protocol](https://modelcontextprotocol.io) — Model Context Protocol spec
325
+ - [Support](mailto:accounts@speakai.co) — Email us
326
+
327
+ ## License
328
+
329
+ MIT