@speakai/mcp-server 1.0.5 → 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 +19 -18
- package/dist/index.js +7 -7
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -30,10 +30,10 @@
|
|
|
30
30
|
**From the command line:**
|
|
31
31
|
|
|
32
32
|
```sh
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
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
37
|
```
|
|
38
38
|
|
|
39
39
|
---
|
|
@@ -58,7 +58,7 @@ Install globally and configure your API key once:
|
|
|
58
58
|
|
|
59
59
|
```sh
|
|
60
60
|
npm install -g @speakai/mcp-server
|
|
61
|
-
|
|
61
|
+
speakai-mcp config set-key
|
|
62
62
|
```
|
|
63
63
|
|
|
64
64
|
Or run without installing:
|
|
@@ -70,13 +70,13 @@ npx @speakai/mcp-server config set-key
|
|
|
70
70
|
Then use any command:
|
|
71
71
|
|
|
72
72
|
```sh
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
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
80
|
```
|
|
81
81
|
|
|
82
82
|
### All CLI Commands
|
|
@@ -105,16 +105,16 @@ Every command supports:
|
|
|
105
105
|
|
|
106
106
|
```sh
|
|
107
107
|
# Pipe transcript to a file
|
|
108
|
-
|
|
108
|
+
speakai-mcp transcript abc123 --plain > meeting.txt
|
|
109
109
|
|
|
110
110
|
# Upload and wait for processing
|
|
111
|
-
|
|
111
|
+
speakai-mcp upload https://example.com/interview.mp3 -n "Q1 Interview" --wait
|
|
112
112
|
|
|
113
113
|
# Create text note from stdin
|
|
114
|
-
cat notes.txt |
|
|
114
|
+
cat notes.txt | speakai-mcp create-text "Meeting Notes"
|
|
115
115
|
|
|
116
116
|
# List only video files as JSON
|
|
117
|
-
|
|
117
|
+
speakai-mcp ls --type video --json | jq '.mediaList[].name'
|
|
118
118
|
```
|
|
119
119
|
|
|
120
120
|
---
|
|
@@ -367,8 +367,9 @@ All requests require `x-speakai-key` (API key) and `x-access-token` (JWT) header
|
|
|
367
367
|
## Development
|
|
368
368
|
|
|
369
369
|
```sh
|
|
370
|
-
git clone https://github.com/speakai/
|
|
371
|
-
cd
|
|
370
|
+
git clone https://github.com/speakai/speakai-mcp.git
|
|
371
|
+
cd speakai-mcp
|
|
372
|
+
|
|
372
373
|
npm install
|
|
373
374
|
npm run dev # Run with hot reload
|
|
374
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",
|