screenpipe-mcp 0.13.0 → 0.14.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/dist/index.js CHANGED
@@ -136,9 +136,10 @@ const TOOLS = [
136
136
  },
137
137
  {
138
138
  name: "activity-summary",
139
- description: "Lightweight activity overview (~200-500 tokens): app usage with active minutes, audio speakers, recent texts. " +
139
+ description: "Rich activity overview: app usage, window/tab titles with URLs and time spent, key text per context, audio transcriptions. " +
140
140
  "USE THIS FIRST for broad questions: 'what was I doing?', 'how long on X?', 'which apps?'. " +
141
- "Only escalate to search-content if you need specific text content.",
141
+ "The 'windows' field shows exactly what the user worked on (e.g. 'Debug crash issue — 20 min', 'Stripe pricing page — 5 min'). " +
142
+ "Usually sufficient without further searches.",
142
143
  annotations: { title: "Activity Summary", readOnlyHint: true, openWorldHint: false, idempotentHint: true },
143
144
  inputSchema: {
144
145
  type: "object",
@@ -661,8 +662,19 @@ server.setRequestHandler(types_js_1.CallToolRequestSchema, async (request) => {
661
662
  : "";
662
663
  return ` ${a.name}: ${a.minutes} min (${a.frame_count} frames${timeSpan})`;
663
664
  });
665
+ // Window/tab activity — what pages/documents were open
666
+ const windowLines = (data.windows || []).map((w) => {
667
+ const url = w.browser_url ? ` (${w.browser_url})` : "";
668
+ return ` [${w.app_name}] ${w.window_name}${url} — ${w.minutes} min`;
669
+ });
664
670
  const speakerLines = (data.audio_summary?.speakers || []).map((s) => ` ${s.name}: ${s.segment_count} segments`);
665
- const textLines = (data.recent_texts || []).map((t) => ` [${t.app_name}] ${t.text}`);
671
+ // Actual audio transcriptions (not just counts)
672
+ const transcriptLines = (data.audio_summary?.top_transcriptions || []).map((t) => ` [${t.speaker}, ${t.timestamp.slice(11, 19)}] ${t.transcription}`);
673
+ // Key text content sampled across the time range
674
+ const textLines = (data.key_texts || data.recent_texts || []).map((t) => {
675
+ const win = t.window_name ? ` | ${t.window_name}` : "";
676
+ return ` [${t.app_name}${win}, ${t.timestamp.slice(11, 19)}] ${t.text}`;
677
+ });
666
678
  const summary = [
667
679
  `Activity Summary (${data.time_range?.start} → ${data.time_range?.end})`,
668
680
  `Total frames: ${data.total_frames}`,
@@ -670,11 +682,15 @@ server.setRequestHandler(types_js_1.CallToolRequestSchema, async (request) => {
670
682
  "Apps:",
671
683
  ...(appsLines.length ? appsLines : [" (none)"]),
672
684
  "",
685
+ "Windows & Tabs:",
686
+ ...(windowLines.length ? windowLines.slice(0, 20) : [" (none)"]),
687
+ "",
673
688
  `Audio: ${data.audio_summary?.segment_count || 0} segments`,
674
689
  ...(speakerLines.length ? speakerLines : []),
690
+ ...(transcriptLines.length ? ["", "Audio transcriptions:", ...transcriptLines.slice(0, 15)] : []),
675
691
  "",
676
- "Recent texts:",
677
- ...(textLines.length ? textLines.slice(0, 10) : [" (none)"]),
692
+ "Key content (sampled across time range):",
693
+ ...(textLines.length ? textLines.slice(0, 20) : [" (none)"]),
678
694
  ].join("\n");
679
695
  return { content: [{ type: "text", text: summary }] };
680
696
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "screenpipe-mcp",
3
- "version": "0.13.0",
3
+ "version": "0.14.0",
4
4
  "description": "MCP server for screenpipe - search your screen recordings and audio transcriptions",
5
5
  "main": "dist/index.js",
6
6
  "bin": {
package/src/index.ts CHANGED
@@ -119,9 +119,10 @@ const TOOLS: Tool[] = [
119
119
  {
120
120
  name: "activity-summary",
121
121
  description:
122
- "Lightweight activity overview (~200-500 tokens): app usage with active minutes, audio speakers, recent texts. " +
122
+ "Rich activity overview: app usage, window/tab titles with URLs and time spent, key text per context, audio transcriptions. " +
123
123
  "USE THIS FIRST for broad questions: 'what was I doing?', 'how long on X?', 'which apps?'. " +
124
- "Only escalate to search-content if you need specific text content.",
124
+ "The 'windows' field shows exactly what the user worked on (e.g. 'Debug crash issue — 20 min', 'Stripe pricing page — 5 min'). " +
125
+ "Usually sufficient without further searches.",
125
126
  annotations: { title: "Activity Summary", readOnlyHint: true, openWorldHint: false, idempotentHint: true },
126
127
  inputSchema: {
127
128
  type: "object",
@@ -709,14 +710,37 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
709
710
  }
710
711
  );
711
712
 
713
+ // Window/tab activity — what pages/documents were open
714
+ const windowLines = (data.windows || []).map(
715
+ (w: {
716
+ app_name: string;
717
+ window_name: string;
718
+ browser_url: string;
719
+ minutes: number;
720
+ frame_count: number;
721
+ }) => {
722
+ const url = w.browser_url ? ` (${w.browser_url})` : "";
723
+ return ` [${w.app_name}] ${w.window_name}${url} — ${w.minutes} min`;
724
+ }
725
+ );
726
+
712
727
  const speakerLines = (data.audio_summary?.speakers || []).map(
713
728
  (s: { name: string; segment_count: number }) =>
714
729
  ` ${s.name}: ${s.segment_count} segments`
715
730
  );
716
731
 
717
- const textLines = (data.recent_texts || []).map(
718
- (t: { text: string; app_name: string; timestamp: string }) =>
719
- ` [${t.app_name}] ${t.text}`
732
+ // Actual audio transcriptions (not just counts)
733
+ const transcriptLines = (data.audio_summary?.top_transcriptions || []).map(
734
+ (t: { transcription: string; speaker: string; device: string; timestamp: string }) =>
735
+ ` [${t.speaker}, ${t.timestamp.slice(11, 19)}] ${t.transcription}`
736
+ );
737
+
738
+ // Key text content sampled across the time range
739
+ const textLines = (data.key_texts || data.recent_texts || []).map(
740
+ (t: { text: string; app_name: string; window_name?: string; timestamp: string }) => {
741
+ const win = t.window_name ? ` | ${t.window_name}` : "";
742
+ return ` [${t.app_name}${win}, ${t.timestamp.slice(11, 19)}] ${t.text}`;
743
+ }
720
744
  );
721
745
 
722
746
  const summary = [
@@ -726,11 +750,15 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
726
750
  "Apps:",
727
751
  ...(appsLines.length ? appsLines : [" (none)"]),
728
752
  "",
753
+ "Windows & Tabs:",
754
+ ...(windowLines.length ? windowLines.slice(0, 20) : [" (none)"]),
755
+ "",
729
756
  `Audio: ${data.audio_summary?.segment_count || 0} segments`,
730
757
  ...(speakerLines.length ? speakerLines : []),
758
+ ...(transcriptLines.length ? ["", "Audio transcriptions:", ...transcriptLines.slice(0, 15)] : []),
731
759
  "",
732
- "Recent texts:",
733
- ...(textLines.length ? textLines.slice(0, 10) : [" (none)"]),
760
+ "Key content (sampled across time range):",
761
+ ...(textLines.length ? textLines.slice(0, 20) : [" (none)"]),
734
762
  ].join("\n");
735
763
 
736
764
  return { content: [{ type: "text", text: summary }] };