minutes-mcp 0.6.0 → 0.7.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 (2) hide show
  1. package/dist/index.js +41 -1
  2. package/package.json +3 -3
package/dist/index.js CHANGED
@@ -237,7 +237,7 @@ function validatePathInDirectories(path, roots, allowedExts) {
237
237
  // ── MCP Server ──────────────────────────────────────────────
238
238
  const server = new McpServer({
239
239
  name: "minutes",
240
- version: "0.6.0",
240
+ version: "0.7.0",
241
241
  });
242
242
  // Configurable directories — override via env vars in Claude Desktop extension settings
243
243
  const MEETINGS_DIR = process.env.MEETINGS_DIR || join(homedir(), "meetings");
@@ -968,6 +968,46 @@ server.resource("meeting", new ResourceTemplate("minutes://meetings/{slug}", { l
968
968
  }
969
969
  return { contents: [{ uri: uri.href, mimeType: "text/plain", text: `Meeting not found: ${slug}` }] };
970
970
  });
971
+ // ── Resource: recent_ideas (voice memos from last N days) ──
972
+ server.resource("recent-ideas", "minutes://ideas/recent", { description: "Recent voice memos and ideas captured from any device (last 14 days)" }, async (uri) => {
973
+ const meetings = await reader.listMeetings(MEETINGS_DIR, 200);
974
+ const cutoff = new Date();
975
+ cutoff.setDate(cutoff.getDate() - 14);
976
+ const memos = meetings.filter((m) => {
977
+ if (m.frontmatter.type !== "memo")
978
+ return false;
979
+ const date = new Date(m.frontmatter.date);
980
+ return date >= cutoff;
981
+ });
982
+ if (memos.length === 0) {
983
+ return {
984
+ contents: [{
985
+ uri: uri.href,
986
+ mimeType: "text/plain",
987
+ text: "No voice memos in the last 14 days.",
988
+ }],
989
+ };
990
+ }
991
+ const lines = memos
992
+ .sort((a, b) => new Date(b.frontmatter.date).getTime() - new Date(a.frontmatter.date).getTime())
993
+ .slice(0, 20)
994
+ .map((m) => {
995
+ const date = new Date(m.frontmatter.date).toLocaleDateString("en-US", {
996
+ month: "short",
997
+ day: "numeric",
998
+ });
999
+ const device = m.frontmatter.device ? ` (${m.frontmatter.device})` : "";
1000
+ return `- [${date}] ${m.frontmatter.title}${device} — ${m.frontmatter.duration}`;
1001
+ })
1002
+ .join("\n");
1003
+ return {
1004
+ contents: [{
1005
+ uri: uri.href,
1006
+ mimeType: "text/plain",
1007
+ text: `Recent voice memos (${memos.length} in last 14 days):\n\n${lines}`,
1008
+ }],
1009
+ };
1010
+ });
971
1011
  // ── Tool: start_dictation ──────────────────────────────────
972
1012
  server.tool("start_dictation", "Start dictation mode. Speak naturally — text goes to clipboard and daily note after each pause. Runs until stop_dictation is called or silence timeout.", {}, { title: "Start Dictation", readOnlyHint: false, destructiveHint: false, idempotentHint: false, openWorldHint: false }, async () => {
973
1013
  if (!(await isCliAvailable())) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "minutes-mcp",
3
- "version": "0.6.0",
3
+ "version": "0.7.0",
4
4
  "description": "MCP server for minutes — conversation memory for AI assistants. Works with Claude Desktop, Cursor, Windsurf, and any MCP client.",
5
5
  "main": "dist/index.js",
6
6
  "type": "module",
@@ -38,9 +38,9 @@
38
38
  "dev": "tsx src/index.ts"
39
39
  },
40
40
  "dependencies": {
41
- "@modelcontextprotocol/sdk": "^1.27.1",
42
41
  "@modelcontextprotocol/ext-apps": "^1.2.2",
43
- "minutes-sdk": "^0.6.0",
42
+ "@modelcontextprotocol/sdk": "^1.27.1",
43
+ "minutes-sdk": "^0.7.0",
44
44
  "yaml": "^2.8.3"
45
45
  },
46
46
  "devDependencies": {