@speakai/mcp-server 1.0.4 → 1.0.6
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 +87 -29
- package/dist/index.js +7 -7
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -2,11 +2,11 @@
|
|
|
2
2
|
<img src="assets/logo.png" alt="Speak AI" width="120" />
|
|
3
3
|
</p>
|
|
4
4
|
|
|
5
|
-
<h1 align="center">Speak AI MCP Server</h1>
|
|
5
|
+
<h1 align="center">Speak AI MCP Server & CLI</h1>
|
|
6
6
|
|
|
7
7
|
<p align="center">
|
|
8
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 —
|
|
9
|
+
Transcribe meetings, analyze media, extract insights — through AI assistants or the command line.
|
|
10
10
|
</p>
|
|
11
11
|
|
|
12
12
|
<p align="center">
|
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
|
|
20
20
|
## What You Can Do
|
|
21
21
|
|
|
22
|
-
|
|
22
|
+
**With AI assistants:**
|
|
23
23
|
|
|
24
24
|
> "Transcribe this audio file and give me the key takeaways"
|
|
25
25
|
|
|
@@ -27,9 +27,14 @@ Ask your AI assistant to work with your Speak AI data:
|
|
|
27
27
|
|
|
28
28
|
> "Export all Q1 interview transcripts as PDFs with speaker names"
|
|
29
29
|
|
|
30
|
-
|
|
30
|
+
**From the command line:**
|
|
31
31
|
|
|
32
|
-
|
|
32
|
+
```sh
|
|
33
|
+
speakai-mcp upload https://example.com/meeting.mp3 --wait
|
|
34
|
+
speakai-mcp transcript abc123 --plain
|
|
35
|
+
speakai-mcp ask abc123 "What were the action items?"
|
|
36
|
+
speakai-mcp export abc123 -f pdf --speakers
|
|
37
|
+
```
|
|
33
38
|
|
|
34
39
|
---
|
|
35
40
|
|
|
@@ -43,37 +48,82 @@ Ask your AI assistant to work with your Speak AI data:
|
|
|
43
48
|
|
|
44
49
|
That's it — the server handles access token management automatically.
|
|
45
50
|
|
|
46
|
-
### 2.
|
|
47
|
-
|
|
48
|
-
There are two ways to connect — choose the one that fits your setup:
|
|
51
|
+
### 2. Choose How to Use It
|
|
49
52
|
|
|
50
53
|
---
|
|
51
54
|
|
|
52
|
-
##
|
|
55
|
+
## CLI (Command Line)
|
|
53
56
|
|
|
54
|
-
|
|
57
|
+
Install globally and configure your API key once:
|
|
55
58
|
|
|
56
|
-
|
|
59
|
+
```sh
|
|
60
|
+
npm install -g @speakai/mcp-server
|
|
61
|
+
speakai-mcp config set-key
|
|
62
|
+
```
|
|
57
63
|
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
64
|
+
Or run without installing:
|
|
65
|
+
|
|
66
|
+
```sh
|
|
67
|
+
npx @speakai/mcp-server config set-key
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
Then use any command:
|
|
71
|
+
|
|
72
|
+
```sh
|
|
73
|
+
speakai-mcp ls # List all media
|
|
74
|
+
speakai-mcp upload https://example.com/call.mp3 # Upload media
|
|
75
|
+
speakai-mcp transcript <id> # Get transcript
|
|
76
|
+
speakai-mcp insights <id> # Get AI insights
|
|
77
|
+
speakai-mcp ask <id> "Summarize this meeting" # Ask AI questions
|
|
78
|
+
speakai-mcp export <id> -f pdf --speakers # Export transcript
|
|
79
|
+
speakai-mcp schedule-meeting <zoom-url> # Join a meeting
|
|
80
|
+
```
|
|
62
81
|
|
|
63
|
-
|
|
82
|
+
### All CLI Commands
|
|
64
83
|
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
84
|
+
| Command | Description |
|
|
85
|
+
|---|---|
|
|
86
|
+
| `config set-key [key]` | Set your API key (interactive if no key given) |
|
|
87
|
+
| `config show` | Show current configuration |
|
|
88
|
+
| `config set-url <url>` | Set custom API base URL |
|
|
89
|
+
| `list-media` / `ls` | List media files with filtering and pagination |
|
|
90
|
+
| `get-transcript` / `transcript <id>` | Get transcript (formatted, `--plain`, or `--json`) |
|
|
91
|
+
| `get-insights` / `insights <id>` | Get AI insights (topics, sentiment, keywords) |
|
|
92
|
+
| `upload <url>` | Upload media from URL (`--wait` to poll until done) |
|
|
93
|
+
| `export <id>` | Export transcript (`-f pdf\|docx\|srt\|vtt\|txt\|csv\|md`) |
|
|
94
|
+
| `status <id>` | Check media processing status |
|
|
95
|
+
| `create-text <name>` | Create text note (`--text` or pipe via stdin) |
|
|
96
|
+
| `list-folders` / `folders` | List all folders |
|
|
97
|
+
| `ask <id> <prompt>` | Ask AI a question about a media file |
|
|
98
|
+
| `schedule-meeting <url>` | Schedule meeting assistant to join a call |
|
|
99
|
+
|
|
100
|
+
### CLI Options
|
|
101
|
+
|
|
102
|
+
Every command supports:
|
|
103
|
+
- `--json` — output raw JSON (for scripting and piping)
|
|
104
|
+
- `--help` — show command-specific help
|
|
105
|
+
|
|
106
|
+
```sh
|
|
107
|
+
# Pipe transcript to a file
|
|
108
|
+
speakai-mcp transcript abc123 --plain > meeting.txt
|
|
109
|
+
|
|
110
|
+
# Upload and wait for processing
|
|
111
|
+
speakai-mcp upload https://example.com/interview.mp3 -n "Q1 Interview" --wait
|
|
112
|
+
|
|
113
|
+
# Create text note from stdin
|
|
114
|
+
cat notes.txt | speakai-mcp create-text "Meeting Notes"
|
|
115
|
+
|
|
116
|
+
# List only video files as JSON
|
|
117
|
+
speakai-mcp ls --type video --json | jq '.mediaList[].name'
|
|
118
|
+
```
|
|
69
119
|
|
|
70
120
|
---
|
|
71
121
|
|
|
72
|
-
##
|
|
122
|
+
## MCP Server (AI Assistants)
|
|
73
123
|
|
|
74
|
-
|
|
124
|
+
### Claude Desktop
|
|
75
125
|
|
|
76
|
-
|
|
126
|
+
Add to your config file:
|
|
77
127
|
|
|
78
128
|
macOS: `~/Library/Application Support/Claude/claude_desktop_config.json`
|
|
79
129
|
Windows: `%APPDATA%\Claude\claude_desktop_config.json`
|
|
@@ -92,16 +142,23 @@ Windows: `%APPDATA%\Claude\claude_desktop_config.json`
|
|
|
92
142
|
}
|
|
93
143
|
```
|
|
94
144
|
|
|
95
|
-
|
|
145
|
+
### Claude Code
|
|
96
146
|
|
|
97
147
|
```sh
|
|
98
148
|
export SPEAK_API_KEY="your-api-key"
|
|
99
|
-
|
|
100
149
|
claude mcp add speak-ai -- npx -y @speakai/mcp-server
|
|
101
|
-
claude
|
|
102
150
|
```
|
|
103
151
|
|
|
104
|
-
|
|
152
|
+
### Claude Web (claude.ai)
|
|
153
|
+
|
|
154
|
+
1. Go to **Settings > Connectors > Add Connector**
|
|
155
|
+
2. Enter the URL: `https://api.speakai.co/v1/mcp`
|
|
156
|
+
3. Add your `x-speakai-key` and `x-access-token` headers
|
|
157
|
+
4. Start chatting with your Speak AI data
|
|
158
|
+
|
|
159
|
+
### Any MCP Client
|
|
160
|
+
|
|
161
|
+
Any STDIO-compatible client can connect:
|
|
105
162
|
|
|
106
163
|
```sh
|
|
107
164
|
SPEAK_API_KEY=your-key npx @speakai/mcp-server
|
|
@@ -310,8 +367,9 @@ All requests require `x-speakai-key` (API key) and `x-access-token` (JWT) header
|
|
|
310
367
|
## Development
|
|
311
368
|
|
|
312
369
|
```sh
|
|
313
|
-
git clone https://github.com/speakai/
|
|
314
|
-
cd
|
|
370
|
+
git clone https://github.com/speakai/speakai-mcp.git
|
|
371
|
+
cd speakai-mcp
|
|
372
|
+
|
|
315
373
|
npm install
|
|
316
374
|
npm run dev # Run with hot reload
|
|
317
375
|
npm run build # Production build
|
package/dist/index.js
CHANGED
|
@@ -47,7 +47,7 @@ function getApiKey() {
|
|
|
47
47
|
async function authenticate() {
|
|
48
48
|
const apiKey = getApiKey();
|
|
49
49
|
if (!apiKey) {
|
|
50
|
-
throw new Error("SPEAK_API_KEY is not set. Run '
|
|
50
|
+
throw new Error("SPEAK_API_KEY is not set. Run 'speakai-mcp config set-key' or set the environment variable.");
|
|
51
51
|
}
|
|
52
52
|
try {
|
|
53
53
|
const res = await import_axios.default.post(
|
|
@@ -64,11 +64,11 @@ async function authenticate() {
|
|
|
64
64
|
accessToken = res.data.data.accessToken;
|
|
65
65
|
refreshToken = res.data.data.refreshToken ?? "";
|
|
66
66
|
tokenExpiresAt = Date.now() + 50 * 60 * 1e3;
|
|
67
|
-
process.stderr.write("[
|
|
67
|
+
process.stderr.write("[speakai-mcp] Authenticated successfully\n");
|
|
68
68
|
}
|
|
69
69
|
} catch (err) {
|
|
70
70
|
process.stderr.write(
|
|
71
|
-
`[
|
|
71
|
+
`[speakai-mcp] Authentication failed: ${err instanceof Error ? err.message : err}
|
|
72
72
|
`
|
|
73
73
|
);
|
|
74
74
|
}
|
|
@@ -93,7 +93,7 @@ async function refreshAccessToken() {
|
|
|
93
93
|
accessToken = res.data.data.accessToken;
|
|
94
94
|
refreshToken = res.data.data.refreshToken ?? refreshToken;
|
|
95
95
|
tokenExpiresAt = Date.now() + 50 * 60 * 1e3;
|
|
96
|
-
process.stderr.write("[
|
|
96
|
+
process.stderr.write("[speakai-mcp] Token refreshed\n");
|
|
97
97
|
}
|
|
98
98
|
} catch {
|
|
99
99
|
return authenticate();
|
|
@@ -1886,14 +1886,14 @@ function requireApiKey() {
|
|
|
1886
1886
|
resolveBaseUrl();
|
|
1887
1887
|
if (!key) {
|
|
1888
1888
|
printError(
|
|
1889
|
-
'No API key configured. Run "
|
|
1889
|
+
'No API key configured. Run "speakai-mcp config set-key" or set SPEAK_API_KEY.'
|
|
1890
1890
|
);
|
|
1891
1891
|
process.exit(1);
|
|
1892
1892
|
}
|
|
1893
1893
|
}
|
|
1894
1894
|
function createCli() {
|
|
1895
1895
|
const program = new import_commander.Command();
|
|
1896
|
-
program.name("
|
|
1896
|
+
program.name("speakai-mcp").description(
|
|
1897
1897
|
"Speak AI CLI & MCP Server \u2014 transcribe, analyze, and manage media from the command line"
|
|
1898
1898
|
).version("1.0.0");
|
|
1899
1899
|
const config = program.command("config").description("Manage configuration");
|
|
@@ -2315,7 +2315,7 @@ if (isCliMode) {
|
|
|
2315
2315
|
const transport = new StdioServerTransport();
|
|
2316
2316
|
server.connect(transport).then(() => {
|
|
2317
2317
|
process.stderr.write(
|
|
2318
|
-
"[
|
|
2318
|
+
"[speakai-mcp] Server started on stdio transport\n"
|
|
2319
2319
|
);
|
|
2320
2320
|
});
|
|
2321
2321
|
});
|
package/package.json
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@speakai/mcp-server",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.6",
|
|
4
4
|
"description": "Official Speak AI MCP Server — connect Claude and other AI assistants to Speak AI's transcription, insights, and media management API",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
7
7
|
"bin": {
|
|
8
|
-
"
|
|
8
|
+
"speakai-mcp": "dist/index.js"
|
|
9
9
|
},
|
|
10
10
|
"scripts": {
|
|
11
11
|
"build": "tsup src/index.ts --format cjs --clean && cp src/types.d.ts dist/index.d.ts",
|