screenpipe-mcp 0.18.10 → 0.18.12
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/LICENSE.md +90 -0
- package/README.md +4 -2
- package/dist/index.js +13 -5
- package/manifest.json +1 -1
- package/package.json +3 -2
- package/server.json +23 -0
- package/src/index.ts +14 -5
package/LICENSE.md
ADDED
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
# Screenpipe Commercial License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2024-2026 Mediar, Inc. (dba Screenpipe). All rights reserved.
|
|
4
|
+
|
|
5
|
+
## 1. Definitions
|
|
6
|
+
|
|
7
|
+
"Licensed Work" means the Screenpipe software covered by this license,
|
|
8
|
+
including its source code and documentation, and any binaries built from
|
|
9
|
+
that source code.
|
|
10
|
+
|
|
11
|
+
"Licensor" means Mediar, Inc. (dba Screenpipe).
|
|
12
|
+
|
|
13
|
+
"You" means the individual or entity exercising rights under this license.
|
|
14
|
+
|
|
15
|
+
"Commercial Use" means any use of the Licensed Work:
|
|
16
|
+
(a) in a business or production environment;
|
|
17
|
+
(b) to generate revenue or to support revenue-generating activity; or
|
|
18
|
+
(c) by or on behalf of a for-profit entity, after the Evaluation period.
|
|
19
|
+
|
|
20
|
+
## 2. Free Use
|
|
21
|
+
|
|
22
|
+
You may use, copy, modify, and run the Licensed Work at no charge for:
|
|
23
|
+
- Personal, non-commercial use;
|
|
24
|
+
- Non-profit, educational, or research use;
|
|
25
|
+
- Evaluation, development, and testing for up to seven (7) days,
|
|
26
|
+
at any organization size.
|
|
27
|
+
|
|
28
|
+
## 3. Official Builds and Subscriptions
|
|
29
|
+
|
|
30
|
+
This license governs the source code of the Licensed Work and any binaries
|
|
31
|
+
built from it by you or by third parties. It does not govern official
|
|
32
|
+
prebuilt builds of Screenpipe distributed by the Licensor. Use of official
|
|
33
|
+
builds is governed by the Screenpipe Terms of Service at
|
|
34
|
+
https://screenpi.pe/terms and by the terms of your subscription or other
|
|
35
|
+
app license.
|
|
36
|
+
|
|
37
|
+
For clarity: one subscription or lifetime license per person, covering
|
|
38
|
+
that person's own devices, including that person's own work use. Up to
|
|
39
|
+
four (4) individual licenses may be used within a single company; five
|
|
40
|
+
(5) or more users at one company require a Screenpipe Team or Enterprise
|
|
41
|
+
plan, regardless of who pays for the individual licenses. Machines not
|
|
42
|
+
tied to an individual licensed user (servers, shared or unattended
|
|
43
|
+
machines) require a commercial agreement with the Licensor.
|
|
44
|
+
|
|
45
|
+
## 4. Commercial Use Requires a Paid License
|
|
46
|
+
|
|
47
|
+
Any Commercial Use of the Licensed Work requires a separate paid commercial
|
|
48
|
+
license from the Licensor. This applies regardless of company size,
|
|
49
|
+
headcount, revenue, or funding. Contact louis@screenpi.pe or visit
|
|
50
|
+
https://screenpi.pe/commercial-license.
|
|
51
|
+
|
|
52
|
+
## 5. Prohibited Without a Commercial License
|
|
53
|
+
|
|
54
|
+
Without a valid commercial license you may not:
|
|
55
|
+
- Sell, sublicense, or distribute the Licensed Work as part of a
|
|
56
|
+
commercial product or service;
|
|
57
|
+
- Provide the Licensed Work as a hosted or managed service to third parties;
|
|
58
|
+
- Embed or integrate the Licensed Work into a product offered to customers;
|
|
59
|
+
- Use the Licensed Work to build, offer, or operate a competing product
|
|
60
|
+
or service.
|
|
61
|
+
|
|
62
|
+
## 6. Ownership
|
|
63
|
+
|
|
64
|
+
The Licensor and its licensors retain all right, title, and interest in the
|
|
65
|
+
Licensed Work, including any modifications or patches you make. No rights are
|
|
66
|
+
granted except those expressly stated in this license.
|
|
67
|
+
|
|
68
|
+
## 7. Termination
|
|
69
|
+
|
|
70
|
+
Any use outside the terms of this license terminates your rights
|
|
71
|
+
automatically. On termination you must cease all use and destroy all copies
|
|
72
|
+
in your possession.
|
|
73
|
+
|
|
74
|
+
## 8. Warranty Disclaimer
|
|
75
|
+
|
|
76
|
+
THE LICENSED WORK IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
|
77
|
+
OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
78
|
+
FITNESS FOR A PARTICULAR PURPOSE, AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
79
|
+
LICENSOR BE LIABLE FOR ANY CLAIM, DAMAGES, OR OTHER LIABILITY, WHETHER IN AN
|
|
80
|
+
ACTION OF CONTRACT, TORT, OR OTHERWISE, ARISING FROM, OUT OF, OR IN
|
|
81
|
+
CONNECTION WITH THE LICENSED WORK OR THE USE OR OTHER DEALINGS IN THE
|
|
82
|
+
LICENSED WORK.
|
|
83
|
+
|
|
84
|
+
---
|
|
85
|
+
|
|
86
|
+
This license applies to all code in this repository.
|
|
87
|
+
|
|
88
|
+
Versions of Screenpipe previously released under the MIT license remain
|
|
89
|
+
available under the MIT license. This license applies to this version and
|
|
90
|
+
all later versions of the Licensed Work.
|
package/README.md
CHANGED
|
@@ -179,6 +179,7 @@ Get accessibility text, parsed tree nodes, and extracted URLs for a specific fra
|
|
|
179
179
|
- All timestamps are handled in UTC
|
|
180
180
|
- Results are formatted for readability in Claude's interface
|
|
181
181
|
- macOS automation features require accessibility permissions
|
|
182
|
+
- The MCP tools already return compact, readable text. If you instead call the underlying screenpipe REST API directly (e.g. via `curl`), the list endpoints (`/search`, `/elements`, `/frames/{id}/elements`) accept `?format=csv|tsv` for a columnar table (column names written once) and `?fields=a,b,c` to select only the columns you need (dotted paths like `content.text`). On list-shaped results that is roughly a 70% token cut versus the default JSON, which stays unchanged when neither param is set.
|
|
182
183
|
|
|
183
184
|
## Privacy Policy
|
|
184
185
|
|
|
@@ -220,8 +221,9 @@ captures is retained according to your Screenpipe storage configuration
|
|
|
220
221
|
and is deletable at any time (`rm -rf ~/.screenpipe` removes everything).
|
|
221
222
|
|
|
222
223
|
### Source code
|
|
223
|
-
The Screenpipe MCP server is
|
|
224
|
-
public at
|
|
224
|
+
The Screenpipe MCP server is source-available under the Screenpipe
|
|
225
|
+
Commercial License and the entire source is public at
|
|
226
|
+
<https://github.com/screenpipe/screenpipe/tree/main/packages/screenpipe-mcp>.
|
|
225
227
|
Every line is auditable.
|
|
226
228
|
|
|
227
229
|
### Contact
|
package/dist/index.js
CHANGED
|
@@ -315,6 +315,10 @@ const TOOLS = [
|
|
|
315
315
|
},
|
|
316
316
|
speaker_ids: { type: "string", description: "Comma-separated speaker IDs to filter audio" },
|
|
317
317
|
speaker_name: { type: "string", description: "Filter audio by speaker name (case-insensitive partial match)" },
|
|
318
|
+
tags: {
|
|
319
|
+
type: "string",
|
|
320
|
+
description: "Comma-separated tags; returns only items carrying ALL of them (e.g. 'person:ada,project:atlas'). Works for screen + audio (content_type 'ocr'/'audio'/'all', tags written by add-tags) AND memories (content_type 'memory', tags written by update-memory). Same tag string links across all three, so two items sharing a tag are connected. Use namespaced tags (person:, project:, topic:) to link people/projects/topics. content_type 'input' and 'accessibility' have no tags and return nothing when this is set.",
|
|
321
|
+
},
|
|
318
322
|
max_content_length: {
|
|
319
323
|
type: "integer",
|
|
320
324
|
description: "Truncate each result's text via middle-truncation. Use 200-500 to keep responses compact.",
|
|
@@ -426,7 +430,7 @@ const TOOLS = [
|
|
|
426
430
|
properties: {
|
|
427
431
|
id: { type: "integer", description: "Memory ID — omit to create new, provide to update/delete" },
|
|
428
432
|
content: { type: "string", description: "Memory text (required for creation)" },
|
|
429
|
-
tags: { type: "array", items: { type: "string" }, description: "
|
|
433
|
+
tags: { type: "array", items: { type: "string" }, description: "Tags. Prefer namespaced (person:ada, project:atlas, topic:pricing) so this memory links to the same people/projects you tag on frames/audio. Retrieve with search-content content_type='memory' tags='person:ada'." },
|
|
430
434
|
importance: { type: "number", description: "0.0 (trivial) to 1.0 (critical). Default 0.5." },
|
|
431
435
|
source_context: { type: "object", description: "Optional metadata linking to source (app, timestamp, etc.)" },
|
|
432
436
|
delete: { type: "boolean", description: "Set true to delete the memory identified by id" },
|
|
@@ -486,14 +490,18 @@ const TOOLS = [
|
|
|
486
490
|
},
|
|
487
491
|
{
|
|
488
492
|
name: "add-tags",
|
|
489
|
-
description: "
|
|
493
|
+
description: "Tag a screen frame (vision) or audio chunk (audio) so it can be retrieved later. " +
|
|
494
|
+
"Tags are a shared linking layer: use namespaced tags (person:ada, project:atlas, topic:pricing) to connect a capture to a person, project, or topic. " +
|
|
495
|
+
"The SAME tag string also works on memories (via update-memory), so tagging a frame and a memory with person:ada links them. " +
|
|
496
|
+
"Retrieve later with search-content tags='person:ada' (add content_type+start_time/end_time to scope to a timeframe). " +
|
|
497
|
+
"Note: frames are pruned by retention, so for durable links prefer tagging a memory; tag frames/audio for shorter-term recall.",
|
|
490
498
|
annotations: { title: "Add Tags", readOnlyHint: false, destructiveHint: false, openWorldHint: false },
|
|
491
499
|
inputSchema: {
|
|
492
500
|
type: "object",
|
|
493
501
|
properties: {
|
|
494
|
-
content_type: { type: "string", enum: ["vision", "audio"], description: "
|
|
495
|
-
id: { type: "integer", description: "Content item ID" },
|
|
496
|
-
tags: { type: "array", items: { type: "string" }, description: "Tags to add" },
|
|
502
|
+
content_type: { type: "string", enum: ["vision", "audio"], description: "vision = screen frame, audio = audio chunk. Get the id from search-content results (frame_id / chunk_id)." },
|
|
503
|
+
id: { type: "integer", description: "Content item ID (OCR result frame_id, or audio result chunk_id)" },
|
|
504
|
+
tags: { type: "array", items: { type: "string" }, description: "Tags to add. Prefer namespaced: person:<name>, project:<name>, topic:<name>." },
|
|
497
505
|
},
|
|
498
506
|
required: ["content_type", "id", "tags"],
|
|
499
507
|
},
|
package/manifest.json
CHANGED
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
"homepage": "https://screenpi.pe",
|
|
17
17
|
"documentation": "https://github.com/screenpipe/screenpipe/tree/main/packages/screenpipe-mcp",
|
|
18
18
|
"support": "https://github.com/screenpipe/screenpipe/issues",
|
|
19
|
-
"license": "
|
|
19
|
+
"license": "SEE LICENSE IN LICENSE.md",
|
|
20
20
|
"server": {
|
|
21
21
|
"type": "node",
|
|
22
22
|
"entry_point": "dist/index.js",
|
package/package.json
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "screenpipe-mcp",
|
|
3
|
-
"version": "0.18.
|
|
3
|
+
"version": "0.18.12",
|
|
4
|
+
"mcpName": "io.github.screenpipe/screenpipe-mcp",
|
|
4
5
|
"description": "MCP server for screenpipe - search your screen recordings and audio transcriptions",
|
|
5
6
|
"main": "dist/index.js",
|
|
6
7
|
"bin": {
|
|
@@ -28,7 +29,7 @@
|
|
|
28
29
|
"audio-transcription"
|
|
29
30
|
],
|
|
30
31
|
"author": "Screenpipe",
|
|
31
|
-
"license": "
|
|
32
|
+
"license": "SEE LICENSE IN LICENSE.md",
|
|
32
33
|
"dependencies": {
|
|
33
34
|
"@modelcontextprotocol/sdk": "^1.27.1"
|
|
34
35
|
},
|
package/server.json
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json",
|
|
3
|
+
"name": "io.github.screenpipe/screenpipe-mcp",
|
|
4
|
+
"title": "screenpipe",
|
|
5
|
+
"description": "Search your local screen recordings, audio transcriptions, and computer activity captured by screenpipe.",
|
|
6
|
+
"repository": {
|
|
7
|
+
"url": "https://github.com/screenpipe/screenpipe",
|
|
8
|
+
"source": "github",
|
|
9
|
+
"subfolder": "packages/screenpipe-mcp"
|
|
10
|
+
},
|
|
11
|
+
"version": "0.18.12",
|
|
12
|
+
"packages": [
|
|
13
|
+
{
|
|
14
|
+
"registryType": "npm",
|
|
15
|
+
"registryBaseUrl": "https://registry.npmjs.org",
|
|
16
|
+
"identifier": "screenpipe-mcp",
|
|
17
|
+
"version": "0.18.12",
|
|
18
|
+
"transport": {
|
|
19
|
+
"type": "stdio"
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
]
|
|
23
|
+
}
|
package/src/index.ts
CHANGED
|
@@ -302,6 +302,11 @@ const TOOLS: Tool[] = [
|
|
|
302
302
|
},
|
|
303
303
|
speaker_ids: { type: "string", description: "Comma-separated speaker IDs to filter audio" },
|
|
304
304
|
speaker_name: { type: "string", description: "Filter audio by speaker name (case-insensitive partial match)" },
|
|
305
|
+
tags: {
|
|
306
|
+
type: "string",
|
|
307
|
+
description:
|
|
308
|
+
"Comma-separated tags; returns only items carrying ALL of them (e.g. 'person:ada,project:atlas'). Works for screen + audio (content_type 'ocr'/'audio'/'all', tags written by add-tags) AND memories (content_type 'memory', tags written by update-memory). Same tag string links across all three, so two items sharing a tag are connected. Use namespaced tags (person:, project:, topic:) to link people/projects/topics. content_type 'input' and 'accessibility' have no tags and return nothing when this is set.",
|
|
309
|
+
},
|
|
305
310
|
max_content_length: {
|
|
306
311
|
type: "integer",
|
|
307
312
|
description: "Truncate each result's text via middle-truncation. Use 200-500 to keep responses compact.",
|
|
@@ -420,7 +425,7 @@ const TOOLS: Tool[] = [
|
|
|
420
425
|
properties: {
|
|
421
426
|
id: { type: "integer", description: "Memory ID — omit to create new, provide to update/delete" },
|
|
422
427
|
content: { type: "string", description: "Memory text (required for creation)" },
|
|
423
|
-
tags: { type: "array", items: { type: "string" }, description: "
|
|
428
|
+
tags: { type: "array", items: { type: "string" }, description: "Tags. Prefer namespaced (person:ada, project:atlas, topic:pricing) so this memory links to the same people/projects you tag on frames/audio. Retrieve with search-content content_type='memory' tags='person:ada'." },
|
|
424
429
|
importance: { type: "number", description: "0.0 (trivial) to 1.0 (critical). Default 0.5." },
|
|
425
430
|
source_context: { type: "object", description: "Optional metadata linking to source (app, timestamp, etc.)" },
|
|
426
431
|
delete: { type: "boolean", description: "Set true to delete the memory identified by id" },
|
|
@@ -483,14 +488,18 @@ const TOOLS: Tool[] = [
|
|
|
483
488
|
{
|
|
484
489
|
name: "add-tags",
|
|
485
490
|
description:
|
|
486
|
-
"
|
|
491
|
+
"Tag a screen frame (vision) or audio chunk (audio) so it can be retrieved later. " +
|
|
492
|
+
"Tags are a shared linking layer: use namespaced tags (person:ada, project:atlas, topic:pricing) to connect a capture to a person, project, or topic. " +
|
|
493
|
+
"The SAME tag string also works on memories (via update-memory), so tagging a frame and a memory with person:ada links them. " +
|
|
494
|
+
"Retrieve later with search-content tags='person:ada' (add content_type+start_time/end_time to scope to a timeframe). " +
|
|
495
|
+
"Note: frames are pruned by retention, so for durable links prefer tagging a memory; tag frames/audio for shorter-term recall.",
|
|
487
496
|
annotations: { title: "Add Tags", readOnlyHint: false, destructiveHint: false, openWorldHint: false },
|
|
488
497
|
inputSchema: {
|
|
489
498
|
type: "object",
|
|
490
499
|
properties: {
|
|
491
|
-
content_type: { type: "string", enum: ["vision", "audio"], description: "
|
|
492
|
-
id: { type: "integer", description: "Content item ID" },
|
|
493
|
-
tags: { type: "array", items: { type: "string" }, description: "Tags to add" },
|
|
500
|
+
content_type: { type: "string", enum: ["vision", "audio"], description: "vision = screen frame, audio = audio chunk. Get the id from search-content results (frame_id / chunk_id)." },
|
|
501
|
+
id: { type: "integer", description: "Content item ID (OCR result frame_id, or audio result chunk_id)" },
|
|
502
|
+
tags: { type: "array", items: { type: "string" }, description: "Tags to add. Prefer namespaced: person:<name>, project:<name>, topic:<name>." },
|
|
494
503
|
},
|
|
495
504
|
required: ["content_type", "id", "tags"],
|
|
496
505
|
},
|