screenpipe-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 CHANGED
@@ -123,12 +123,12 @@ const BASE_TOOLS = [
123
123
  start_time: {
124
124
  type: "string",
125
125
  format: "date-time",
126
- description: "ISO 8601 UTC start time (e.g., 2024-01-15T10:00:00Z)",
126
+ description: "Start time: ISO 8601 UTC (e.g., 2024-01-15T10:00:00Z) or relative (e.g., '16h ago', '2d ago', 'now')",
127
127
  },
128
128
  end_time: {
129
129
  type: "string",
130
130
  format: "date-time",
131
- description: "ISO 8601 UTC end time (e.g., 2024-01-15T18:00:00Z)",
131
+ description: "End time: ISO 8601 UTC (e.g., 2024-01-15T18:00:00Z) or relative (e.g., 'now', '1h ago')",
132
132
  },
133
133
  app_name: {
134
134
  type: "string",
@@ -159,6 +159,10 @@ const BASE_TOOLS = [
159
159
  type: "string",
160
160
  description: "Filter audio by speaker name (case-insensitive partial match)",
161
161
  },
162
+ max_content_length: {
163
+ type: "integer",
164
+ description: "Truncate each result's text/transcription to this many characters using middle-truncation (keeps first half + last half). Useful for limiting token usage with small-context models.",
165
+ },
162
166
  },
163
167
  },
164
168
  },
@@ -166,7 +170,7 @@ const BASE_TOOLS = [
166
170
  name: "export-video",
167
171
  description: "Export a video of screen recordings for a specific time range. " +
168
172
  "Creates an MP4 video from the recorded frames between the start and end times.\n\n" +
169
- "IMPORTANT: Use ISO 8601 UTC timestamps (e.g., 2024-01-15T10:00:00Z)\n\n" +
173
+ "IMPORTANT: Use ISO 8601 UTC timestamps (e.g., 2024-01-15T10:00:00Z) or relative times (e.g., '16h ago', 'now')\n\n" +
170
174
  "EXAMPLES:\n" +
171
175
  "- Last 30 minutes: Calculate timestamps from current time\n" +
172
176
  "- Specific meeting: Use the meeting's start and end times in UTC",
@@ -180,12 +184,12 @@ const BASE_TOOLS = [
180
184
  start_time: {
181
185
  type: "string",
182
186
  format: "date-time",
183
- description: "Start time in ISO 8601 format UTC. MUST include timezone (Z for UTC). Example: '2024-01-15T10:00:00Z'",
187
+ description: "Start time: ISO 8601 UTC (e.g., '2024-01-15T10:00:00Z') or relative (e.g., '16h ago', 'now')",
184
188
  },
185
189
  end_time: {
186
190
  type: "string",
187
191
  format: "date-time",
188
- description: "End time in ISO 8601 format UTC. MUST include timezone (Z for UTC). Example: '2024-01-15T10:30:00Z'",
192
+ description: "End time: ISO 8601 UTC (e.g., '2024-01-15T10:30:00Z') or relative (e.g., 'now', '1h ago')",
189
193
  },
190
194
  fps: {
191
195
  type: "number",
@@ -211,12 +215,12 @@ const BASE_TOOLS = [
211
215
  start_time: {
212
216
  type: "string",
213
217
  format: "date-time",
214
- description: "ISO 8601 UTC start filter (e.g., 2024-01-15T10:00:00Z)",
218
+ description: "Start filter: ISO 8601 UTC (e.g., 2024-01-15T10:00:00Z) or relative (e.g., '16h ago', 'now')",
215
219
  },
216
220
  end_time: {
217
221
  type: "string",
218
222
  format: "date-time",
219
- description: "ISO 8601 UTC end filter (e.g., 2024-01-15T18:00:00Z)",
223
+ description: "End filter: ISO 8601 UTC (e.g., 2024-01-15T18:00:00Z) or relative (e.g., 'now', '1h ago')",
220
224
  },
221
225
  limit: {
222
226
  type: "integer",
@@ -234,7 +238,9 @@ const BASE_TOOLS = [
234
238
  {
235
239
  name: "activity-summary",
236
240
  description: "Get a lightweight compressed activity overview for a time range (~200-500 tokens). " +
237
- "Returns app usage (name, frame count, minutes), recent accessibility texts, and audio speaker summary. " +
241
+ "Returns app usage (name, frame count, active minutes, first/last seen), recent accessibility texts, and audio speaker summary. " +
242
+ "Minutes are based on active session time (consecutive frames with gaps < 5min count as active). " +
243
+ "first_seen/last_seen show the wall-clock span per app. " +
238
244
  "Use this FIRST for broad questions like 'what was I doing?' before drilling into search-content or search-elements. " +
239
245
  "Much cheaper than search-content for getting an overview.",
240
246
  annotations: {
@@ -247,12 +253,12 @@ const BASE_TOOLS = [
247
253
  start_time: {
248
254
  type: "string",
249
255
  format: "date-time",
250
- description: "Start of time range in ISO 8601 UTC (e.g., 2024-01-15T10:00:00Z)",
256
+ description: "Start of time range: ISO 8601 UTC (e.g., 2024-01-15T10:00:00Z) or relative (e.g., '16h ago', 'now')",
251
257
  },
252
258
  end_time: {
253
259
  type: "string",
254
260
  format: "date-time",
255
- description: "End of time range in ISO 8601 UTC (e.g., 2024-01-15T18:00:00Z)",
261
+ description: "End of time range: ISO 8601 UTC (e.g., 2024-01-15T18:00:00Z) or relative (e.g., 'now', '1h ago')",
256
262
  },
257
263
  app_name: {
258
264
  type: "string",
@@ -296,12 +302,12 @@ const BASE_TOOLS = [
296
302
  start_time: {
297
303
  type: "string",
298
304
  format: "date-time",
299
- description: "ISO 8601 UTC start time",
305
+ description: "Start time: ISO 8601 UTC or relative (e.g., '16h ago', 'now')",
300
306
  },
301
307
  end_time: {
302
308
  type: "string",
303
309
  format: "date-time",
304
- description: "ISO 8601 UTC end time",
310
+ description: "End time: ISO 8601 UTC or relative (e.g., 'now', '1h ago')",
305
311
  },
306
312
  app_name: {
307
313
  type: "string",
@@ -427,8 +433,8 @@ Screenpipe captures four types of data:
427
433
  | q | Search query | (none - returns all) |
428
434
  | content_type | all/ocr/audio/input/accessibility | all |
429
435
  | limit | Max results | 10 |
430
- | start_time | ISO 8601 UTC | (no filter) |
431
- | end_time | ISO 8601 UTC | (no filter) |
436
+ | start_time | ISO 8601 UTC or relative (e.g. '16h ago') | (no filter) |
437
+ | end_time | ISO 8601 UTC or relative (e.g. 'now') | (no filter) |
432
438
  | app_name | Filter by app | (no filter) |
433
439
  | include_frames | Include screenshots | false |
434
440
 
@@ -928,7 +934,12 @@ server.setRequestHandler(types_js_1.CallToolRequestSchema, async (request) => {
928
934
  }
929
935
  const data = await response.json();
930
936
  // Format apps
931
- const appsLines = (data.apps || []).map((a) => ` ${a.name}: ${a.minutes} min (${a.frame_count} frames)`);
937
+ const appsLines = (data.apps || []).map((a) => {
938
+ const timeSpan = a.first_seen && a.last_seen
939
+ ? `, ${a.first_seen.slice(11, 16)}–${a.last_seen.slice(11, 16)} UTC`
940
+ : "";
941
+ return ` ${a.name}: ${a.minutes} min (${a.frame_count} frames${timeSpan})`;
942
+ });
932
943
  // Format audio
933
944
  const speakerLines = (data.audio_summary?.speakers || []).map((s) => ` ${s.name}: ${s.segment_count} segments`);
934
945
  // Format recent texts
package/manifest.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "manifest_version": "0.3",
3
3
  "name": "screenpipe",
4
4
  "display_name": "Screenpipe",
5
- "version": "0.8.3",
5
+ "version": "0.8.4",
6
6
  "description": "Search your screen recordings and audio transcriptions with AI",
7
7
  "long_description": "Screenpipe is a 24/7 screen and audio recorder that lets you search everything you've seen or heard. This extension connects Claude to your local screenpipe instance, enabling AI-powered search through your digital memory.",
8
8
  "author": {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "screenpipe-mcp",
3
- "version": "0.8.3",
3
+ "version": "0.8.4",
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
@@ -106,12 +106,12 @@ const BASE_TOOLS: Tool[] = [
106
106
  start_time: {
107
107
  type: "string",
108
108
  format: "date-time",
109
- description: "ISO 8601 UTC start time (e.g., 2024-01-15T10:00:00Z)",
109
+ description: "Start time: ISO 8601 UTC (e.g., 2024-01-15T10:00:00Z) or relative (e.g., '16h ago', '2d ago', 'now')",
110
110
  },
111
111
  end_time: {
112
112
  type: "string",
113
113
  format: "date-time",
114
- description: "ISO 8601 UTC end time (e.g., 2024-01-15T18:00:00Z)",
114
+ description: "End time: ISO 8601 UTC (e.g., 2024-01-15T18:00:00Z) or relative (e.g., 'now', '1h ago')",
115
115
  },
116
116
  app_name: {
117
117
  type: "string",
@@ -142,6 +142,10 @@ const BASE_TOOLS: Tool[] = [
142
142
  type: "string",
143
143
  description: "Filter audio by speaker name (case-insensitive partial match)",
144
144
  },
145
+ max_content_length: {
146
+ type: "integer",
147
+ description: "Truncate each result's text/transcription to this many characters using middle-truncation (keeps first half + last half). Useful for limiting token usage with small-context models.",
148
+ },
145
149
  },
146
150
  },
147
151
  },
@@ -150,7 +154,7 @@ const BASE_TOOLS: Tool[] = [
150
154
  description:
151
155
  "Export a video of screen recordings for a specific time range. " +
152
156
  "Creates an MP4 video from the recorded frames between the start and end times.\n\n" +
153
- "IMPORTANT: Use ISO 8601 UTC timestamps (e.g., 2024-01-15T10:00:00Z)\n\n" +
157
+ "IMPORTANT: Use ISO 8601 UTC timestamps (e.g., 2024-01-15T10:00:00Z) or relative times (e.g., '16h ago', 'now')\n\n" +
154
158
  "EXAMPLES:\n" +
155
159
  "- Last 30 minutes: Calculate timestamps from current time\n" +
156
160
  "- Specific meeting: Use the meeting's start and end times in UTC",
@@ -165,13 +169,13 @@ const BASE_TOOLS: Tool[] = [
165
169
  type: "string",
166
170
  format: "date-time",
167
171
  description:
168
- "Start time in ISO 8601 format UTC. MUST include timezone (Z for UTC). Example: '2024-01-15T10:00:00Z'",
172
+ "Start time: ISO 8601 UTC (e.g., '2024-01-15T10:00:00Z') or relative (e.g., '16h ago', 'now')",
169
173
  },
170
174
  end_time: {
171
175
  type: "string",
172
176
  format: "date-time",
173
177
  description:
174
- "End time in ISO 8601 format UTC. MUST include timezone (Z for UTC). Example: '2024-01-15T10:30:00Z'",
178
+ "End time: ISO 8601 UTC (e.g., '2024-01-15T10:30:00Z') or relative (e.g., 'now', '1h ago')",
175
179
  },
176
180
  fps: {
177
181
  type: "number",
@@ -199,12 +203,12 @@ const BASE_TOOLS: Tool[] = [
199
203
  start_time: {
200
204
  type: "string",
201
205
  format: "date-time",
202
- description: "ISO 8601 UTC start filter (e.g., 2024-01-15T10:00:00Z)",
206
+ description: "Start filter: ISO 8601 UTC (e.g., 2024-01-15T10:00:00Z) or relative (e.g., '16h ago', 'now')",
203
207
  },
204
208
  end_time: {
205
209
  type: "string",
206
210
  format: "date-time",
207
- description: "ISO 8601 UTC end filter (e.g., 2024-01-15T18:00:00Z)",
211
+ description: "End filter: ISO 8601 UTC (e.g., 2024-01-15T18:00:00Z) or relative (e.g., 'now', '1h ago')",
208
212
  },
209
213
  limit: {
210
214
  type: "integer",
@@ -223,7 +227,9 @@ const BASE_TOOLS: Tool[] = [
223
227
  name: "activity-summary",
224
228
  description:
225
229
  "Get a lightweight compressed activity overview for a time range (~200-500 tokens). " +
226
- "Returns app usage (name, frame count, minutes), recent accessibility texts, and audio speaker summary. " +
230
+ "Returns app usage (name, frame count, active minutes, first/last seen), recent accessibility texts, and audio speaker summary. " +
231
+ "Minutes are based on active session time (consecutive frames with gaps < 5min count as active). " +
232
+ "first_seen/last_seen show the wall-clock span per app. " +
227
233
  "Use this FIRST for broad questions like 'what was I doing?' before drilling into search-content or search-elements. " +
228
234
  "Much cheaper than search-content for getting an overview.",
229
235
  annotations: {
@@ -236,12 +242,12 @@ const BASE_TOOLS: Tool[] = [
236
242
  start_time: {
237
243
  type: "string",
238
244
  format: "date-time",
239
- description: "Start of time range in ISO 8601 UTC (e.g., 2024-01-15T10:00:00Z)",
245
+ description: "Start of time range: ISO 8601 UTC (e.g., 2024-01-15T10:00:00Z) or relative (e.g., '16h ago', 'now')",
240
246
  },
241
247
  end_time: {
242
248
  type: "string",
243
249
  format: "date-time",
244
- description: "End of time range in ISO 8601 UTC (e.g., 2024-01-15T18:00:00Z)",
250
+ description: "End of time range: ISO 8601 UTC (e.g., 2024-01-15T18:00:00Z) or relative (e.g., 'now', '1h ago')",
245
251
  },
246
252
  app_name: {
247
253
  type: "string",
@@ -286,12 +292,12 @@ const BASE_TOOLS: Tool[] = [
286
292
  start_time: {
287
293
  type: "string",
288
294
  format: "date-time",
289
- description: "ISO 8601 UTC start time",
295
+ description: "Start time: ISO 8601 UTC or relative (e.g., '16h ago', 'now')",
290
296
  },
291
297
  end_time: {
292
298
  type: "string",
293
299
  format: "date-time",
294
- description: "ISO 8601 UTC end time",
300
+ description: "End time: ISO 8601 UTC or relative (e.g., 'now', '1h ago')",
295
301
  },
296
302
  app_name: {
297
303
  type: "string",
@@ -424,8 +430,8 @@ Screenpipe captures four types of data:
424
430
  | q | Search query | (none - returns all) |
425
431
  | content_type | all/ocr/audio/input/accessibility | all |
426
432
  | limit | Max results | 10 |
427
- | start_time | ISO 8601 UTC | (no filter) |
428
- | end_time | ISO 8601 UTC | (no filter) |
433
+ | start_time | ISO 8601 UTC or relative (e.g. '16h ago') | (no filter) |
434
+ | end_time | ISO 8601 UTC or relative (e.g. 'now') | (no filter) |
429
435
  | app_name | Filter by app | (no filter) |
430
436
  | include_frames | Include screenshots | false |
431
437
 
@@ -993,8 +999,12 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
993
999
 
994
1000
  // Format apps
995
1001
  const appsLines = (data.apps || []).map(
996
- (a: { name: string; frame_count: number; minutes: number }) =>
997
- ` ${a.name}: ${a.minutes} min (${a.frame_count} frames)`
1002
+ (a: { name: string; frame_count: number; minutes: number; first_seen?: string; last_seen?: string }) => {
1003
+ const timeSpan = a.first_seen && a.last_seen
1004
+ ? `, ${a.first_seen.slice(11, 16)}–${a.last_seen.slice(11, 16)} UTC`
1005
+ : "";
1006
+ return ` ${a.name}: ${a.minutes} min (${a.frame_count} frames${timeSpan})`;
1007
+ }
998
1008
  );
999
1009
 
1000
1010
  // Format audio