minutes-mcp 0.8.3 → 0.8.4
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/dist/index.js +63 -5
- package/package.json +2 -2
package/dist/index.js
CHANGED
|
@@ -146,8 +146,8 @@ function findMinutesBinary() {
|
|
|
146
146
|
}
|
|
147
147
|
let MINUTES_BIN = findMinutesBinary();
|
|
148
148
|
// ── Expected CLI version (must match this MCP server release) ──
|
|
149
|
-
const EXPECTED_CLI_VERSION = "0.8.
|
|
150
|
-
const RELEASE_TAG = "v0.8.
|
|
149
|
+
const EXPECTED_CLI_VERSION = "0.8.4";
|
|
150
|
+
const RELEASE_TAG = "v0.8.4";
|
|
151
151
|
// ── CLI auto-install ────────────────────────────────────────
|
|
152
152
|
// When installed via MCPB or `npx minutes-mcp`, the Rust CLI binary
|
|
153
153
|
// may not be present. We attempt to install it automatically so
|
|
@@ -370,7 +370,7 @@ function parseJsonOutput(stdout) {
|
|
|
370
370
|
// ── MCP Server ──────────────────────────────────────────────
|
|
371
371
|
const server = new McpServer({
|
|
372
372
|
name: "minutes",
|
|
373
|
-
version: "0.8.
|
|
373
|
+
version: "0.8.4",
|
|
374
374
|
});
|
|
375
375
|
// Declare MCP Apps extension support so hosts classify this server as interactive.
|
|
376
376
|
// The `extensions` field is part of the draft MCP spec (SEP-1724) — not yet in the
|
|
@@ -1282,7 +1282,7 @@ server.resource("recent-ideas", "minutes://ideas/recent", { description: "Recent
|
|
|
1282
1282
|
};
|
|
1283
1283
|
});
|
|
1284
1284
|
// ── Tool: start_dictation ──────────────────────────────────
|
|
1285
|
-
server.tool("start_dictation", "Start dictation mode. Speak naturally — text
|
|
1285
|
+
server.tool("start_dictation", "Start dictation mode. Speak naturally — text accumulates across pauses and the combined result is written when dictation ends. Runs until stop_dictation is called or silence timeout.", {}, { title: "Start Dictation", readOnlyHint: false, destructiveHint: false, idempotentHint: false, openWorldHint: false }, async () => {
|
|
1286
1286
|
if (!(await isCliAvailable())) {
|
|
1287
1287
|
return { content: [{ type: "text", text: CLI_INSTALL_MSG }] };
|
|
1288
1288
|
}
|
|
@@ -1311,7 +1311,7 @@ server.tool("start_dictation", "Start dictation mode. Speak naturally — text g
|
|
|
1311
1311
|
content: [
|
|
1312
1312
|
{
|
|
1313
1313
|
type: "text",
|
|
1314
|
-
text: "Dictation started. Speak naturally — text will be copied
|
|
1314
|
+
text: "Dictation started. Speak naturally — text accumulates across pauses and will be copied when dictation ends. Say \"stop dictation\" when done.",
|
|
1315
1315
|
},
|
|
1316
1316
|
],
|
|
1317
1317
|
};
|
|
@@ -1468,6 +1468,64 @@ server.tool("read_live_transcript", "Read the live transcript. Returns utterance
|
|
|
1468
1468
|
};
|
|
1469
1469
|
}
|
|
1470
1470
|
});
|
|
1471
|
+
// ── Dashboard ───────────────────────────────────────────────
|
|
1472
|
+
server.tool("open_dashboard", "Open the Meeting Intelligence Dashboard in the browser. Shows a visual overview of your conversation memory: metrics, meeting timeline, decisions, recurring topics, action items, and voice memos. Runs a local HTTP server — data never leaves your machine.", {}, { title: "Open Dashboard", readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: false }, async () => {
|
|
1473
|
+
if (!(await isCliAvailable())) {
|
|
1474
|
+
return { content: [{ type: "text", text: CLI_INSTALL_MSG }] };
|
|
1475
|
+
}
|
|
1476
|
+
// Check if dashboard is already running via PID file
|
|
1477
|
+
const pidPath = join(homedir(), ".minutes", "dashboard.pid");
|
|
1478
|
+
try {
|
|
1479
|
+
const pidStr = await readFile(pidPath, "utf-8");
|
|
1480
|
+
const pid = parseInt(pidStr.trim(), 10);
|
|
1481
|
+
if (pid > 0) {
|
|
1482
|
+
// Check if process is alive
|
|
1483
|
+
try {
|
|
1484
|
+
process.kill(pid, 0);
|
|
1485
|
+
return {
|
|
1486
|
+
content: [{
|
|
1487
|
+
type: "text",
|
|
1488
|
+
text: `Dashboard already running (PID ${pid}). Open http://localhost:3141 in your browser.`,
|
|
1489
|
+
}],
|
|
1490
|
+
};
|
|
1491
|
+
}
|
|
1492
|
+
catch {
|
|
1493
|
+
// Process not alive, stale PID — proceed to launch
|
|
1494
|
+
}
|
|
1495
|
+
}
|
|
1496
|
+
}
|
|
1497
|
+
catch {
|
|
1498
|
+
// No PID file — proceed to launch
|
|
1499
|
+
}
|
|
1500
|
+
// Spawn dashboard as detached subprocess
|
|
1501
|
+
const { spawn } = await import("child_process");
|
|
1502
|
+
const child = spawn(MINUTES_BIN, ["dashboard"], {
|
|
1503
|
+
detached: true,
|
|
1504
|
+
stdio: "ignore",
|
|
1505
|
+
});
|
|
1506
|
+
child.unref();
|
|
1507
|
+
// Give it a moment to start
|
|
1508
|
+
await new Promise((resolve) => setTimeout(resolve, 1000));
|
|
1509
|
+
// Count meetings for the response
|
|
1510
|
+
try {
|
|
1511
|
+
const { stdout } = await runMinutes(["list", "--format", "json", "--limit", "999"]);
|
|
1512
|
+
const lines = stdout.trim().split("\n").filter(Boolean);
|
|
1513
|
+
return {
|
|
1514
|
+
content: [{
|
|
1515
|
+
type: "text",
|
|
1516
|
+
text: `Dashboard opened at http://localhost:3141 (${lines.length} meetings loaded).`,
|
|
1517
|
+
}],
|
|
1518
|
+
};
|
|
1519
|
+
}
|
|
1520
|
+
catch {
|
|
1521
|
+
return {
|
|
1522
|
+
content: [{
|
|
1523
|
+
type: "text",
|
|
1524
|
+
text: "Dashboard opened at http://localhost:3141.",
|
|
1525
|
+
}],
|
|
1526
|
+
};
|
|
1527
|
+
}
|
|
1528
|
+
});
|
|
1471
1529
|
// ── Start server ────────────────────────────────────────────
|
|
1472
1530
|
async function main() {
|
|
1473
1531
|
const transport = new StdioServerTransport();
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "minutes-mcp",
|
|
3
|
-
"version": "0.8.
|
|
3
|
+
"version": "0.8.4",
|
|
4
4
|
"description": "MCP server for minutes — conversation memory for AI assistants. Works with Claude Desktop, Mistral Vibe, Cursor, Windsurf, and any MCP client.",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"type": "module",
|
|
@@ -40,7 +40,7 @@
|
|
|
40
40
|
"dependencies": {
|
|
41
41
|
"@modelcontextprotocol/ext-apps": "^1.2.2",
|
|
42
42
|
"@modelcontextprotocol/sdk": "^1.27.1",
|
|
43
|
-
"minutes-sdk": "^0.8.
|
|
43
|
+
"minutes-sdk": "^0.8.3",
|
|
44
44
|
"yaml": "^2.8.3"
|
|
45
45
|
},
|
|
46
46
|
"devDependencies": {
|