@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.
- package/README.md +329 -0
- package/dist/index.js +1688 -0
- 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
|