screenpipe-mcp 0.20.0 → 0.20.2

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
@@ -75,7 +75,7 @@ var __esm = (fn, res, err) => () => {
75
75
  return res;
76
76
  };
77
77
 
78
- // node_modules/zod/v4/core/core.js
78
+ // node_modules/@modelcontextprotocol/sdk/node_modules/zod/v4/core/core.js
79
79
  function $constructor(name, initializer, params) {
80
80
  function init(inst, def) {
81
81
  if (!inst._zod) {
@@ -153,7 +153,7 @@ var init_core = __esm(() => {
153
153
  globalConfig = {};
154
154
  });
155
155
 
156
- // node_modules/zod/v4/core/util.js
156
+ // node_modules/@modelcontextprotocol/sdk/node_modules/zod/v4/core/util.js
157
157
  function getEnumValues(entries) {
158
158
  const numericValues = Object.values(entries).filter((v) => typeof v === "number");
159
159
  const values = Object.entries(entries).filter(([k, _]) => numericValues.indexOf(+k) === -1).map(([_, v]) => v);
@@ -579,7 +579,7 @@ var init_util = __esm(() => {
579
579
  };
580
580
  });
581
581
 
582
- // node_modules/zod/v4/core/errors.js
582
+ // node_modules/@modelcontextprotocol/sdk/node_modules/zod/v4/core/errors.js
583
583
  function flattenError(error, mapper = (issue) => issue.message) {
584
584
  const fieldErrors = {};
585
585
  const formErrors = [];
@@ -649,7 +649,7 @@ var init_errors = __esm(() => {
649
649
  $ZodRealError = $constructor("$ZodError", initializer, { Parent: Error });
650
650
  });
651
651
 
652
- // node_modules/zod/v4/core/parse.js
652
+ // node_modules/@modelcontextprotocol/sdk/node_modules/zod/v4/core/parse.js
653
653
  var _parse = (_Err) => (schema, value, _ctx, _params) => {
654
654
  const ctx = _ctx ? Object.assign(_ctx, { async: false }) : { async: false };
655
655
  const result = schema._zod.run({ value, issues: [] }, ctx);
@@ -721,7 +721,7 @@ var init_parse = __esm(() => {
721
721
  safeParseAsync = /* @__PURE__ */ _safeParseAsync($ZodRealError);
722
722
  });
723
723
 
724
- // node_modules/zod/v4/core/regexes.js
724
+ // node_modules/@modelcontextprotocol/sdk/node_modules/zod/v4/core/regexes.js
725
725
  function emoji() {
726
726
  return new RegExp(_emoji, "u");
727
727
  }
@@ -777,7 +777,7 @@ var init_regexes = __esm(() => {
777
777
  uppercase = /^[^a-z]*$/;
778
778
  });
779
779
 
780
- // node_modules/zod/v4/core/checks.js
780
+ // node_modules/@modelcontextprotocol/sdk/node_modules/zod/v4/core/checks.js
781
781
  var $ZodCheck, numericOriginMap, $ZodCheckLessThan, $ZodCheckGreaterThan, $ZodCheckMultipleOf, $ZodCheckNumberFormat, $ZodCheckMaxLength, $ZodCheckMinLength, $ZodCheckLengthEquals, $ZodCheckStringFormat, $ZodCheckRegex, $ZodCheckLowerCase, $ZodCheckUpperCase, $ZodCheckIncludes, $ZodCheckStartsWith, $ZodCheckEndsWith, $ZodCheckOverwrite;
782
782
  var init_checks = __esm(() => {
783
783
  init_core();
@@ -1172,7 +1172,7 @@ var init_checks = __esm(() => {
1172
1172
  });
1173
1173
  });
1174
1174
 
1175
- // node_modules/zod/v4/core/doc.js
1175
+ // node_modules/@modelcontextprotocol/sdk/node_modules/zod/v4/core/doc.js
1176
1176
  class Doc {
1177
1177
  constructor(args = []) {
1178
1178
  this.content = [];
@@ -1210,7 +1210,7 @@ class Doc {
1210
1210
  }
1211
1211
  }
1212
1212
 
1213
- // node_modules/zod/v4/core/versions.js
1213
+ // node_modules/@modelcontextprotocol/sdk/node_modules/zod/v4/core/versions.js
1214
1214
  var version;
1215
1215
  var init_versions = __esm(() => {
1216
1216
  version = {
@@ -1220,7 +1220,7 @@ var init_versions = __esm(() => {
1220
1220
  };
1221
1221
  });
1222
1222
 
1223
- // node_modules/zod/v4/core/schemas.js
1223
+ // node_modules/@modelcontextprotocol/sdk/node_modules/zod/v4/core/schemas.js
1224
1224
  function isValidBase64(data) {
1225
1225
  if (data === "")
1226
1226
  return true;
@@ -2616,7 +2616,7 @@ var init_schemas = __esm(() => {
2616
2616
  });
2617
2617
  });
2618
2618
 
2619
- // node_modules/zod/v4/locales/en.js
2619
+ // node_modules/@modelcontextprotocol/sdk/node_modules/zod/v4/locales/en.js
2620
2620
  function en_default() {
2621
2621
  return {
2622
2622
  localeError: error()
@@ -2726,10 +2726,10 @@ var init_en = __esm(() => {
2726
2726
  init_util();
2727
2727
  });
2728
2728
 
2729
- // node_modules/zod/v4/locales/index.js
2729
+ // node_modules/@modelcontextprotocol/sdk/node_modules/zod/v4/locales/index.js
2730
2730
  var init_locales = () => {};
2731
2731
 
2732
- // node_modules/zod/v4/core/registries.js
2732
+ // node_modules/@modelcontextprotocol/sdk/node_modules/zod/v4/core/registries.js
2733
2733
  class $ZodRegistry {
2734
2734
  constructor() {
2735
2735
  this._map = new WeakMap;
@@ -2781,7 +2781,7 @@ var init_registries = __esm(() => {
2781
2781
  globalRegistry = globalThis.__zod_globalRegistry;
2782
2782
  });
2783
2783
 
2784
- // node_modules/zod/v4/core/api.js
2784
+ // node_modules/@modelcontextprotocol/sdk/node_modules/zod/v4/core/api.js
2785
2785
  function _string(Class, params) {
2786
2786
  return new Class({
2787
2787
  type: "string",
@@ -3252,7 +3252,7 @@ var init_api = __esm(() => {
3252
3252
  init_util();
3253
3253
  });
3254
3254
 
3255
- // node_modules/zod/v4/core/to-json-schema.js
3255
+ // node_modules/@modelcontextprotocol/sdk/node_modules/zod/v4/core/to-json-schema.js
3256
3256
  function initializeContext(params) {
3257
3257
  let target = params?.target ?? "draft-2020-12";
3258
3258
  if (target === "draft-4")
@@ -3600,7 +3600,7 @@ var init_to_json_schema = __esm(() => {
3600
3600
  init_registries();
3601
3601
  });
3602
3602
 
3603
- // node_modules/zod/v4/core/json-schema-processors.js
3603
+ // node_modules/@modelcontextprotocol/sdk/node_modules/zod/v4/core/json-schema-processors.js
3604
3604
  var formatMap, stringProcessor = (schema, ctx, _json, _params) => {
3605
3605
  const json = _json;
3606
3606
  json.type = "string";
@@ -3918,10 +3918,10 @@ var init_json_schema_processors = __esm(() => {
3918
3918
  };
3919
3919
  });
3920
3920
 
3921
- // node_modules/zod/v4/core/json-schema.js
3921
+ // node_modules/@modelcontextprotocol/sdk/node_modules/zod/v4/core/json-schema.js
3922
3922
  var init_json_schema = () => {};
3923
3923
 
3924
- // node_modules/zod/v4/core/index.js
3924
+ // node_modules/@modelcontextprotocol/sdk/node_modules/zod/v4/core/index.js
3925
3925
  var init_core2 = __esm(() => {
3926
3926
  init_util();
3927
3927
  init_regexes();
@@ -3938,24 +3938,24 @@ var init_core2 = __esm(() => {
3938
3938
  init_to_json_schema();
3939
3939
  });
3940
3940
 
3941
- // node_modules/zod/v4/mini/parse.js
3941
+ // node_modules/@modelcontextprotocol/sdk/node_modules/zod/v4/mini/parse.js
3942
3942
  var init_parse2 = __esm(() => {
3943
3943
  init_core2();
3944
3944
  });
3945
3945
 
3946
- // node_modules/zod/v4/mini/schemas.js
3946
+ // node_modules/@modelcontextprotocol/sdk/node_modules/zod/v4/mini/schemas.js
3947
3947
  var init_schemas2 = () => {};
3948
3948
 
3949
- // node_modules/zod/v4/mini/checks.js
3949
+ // node_modules/@modelcontextprotocol/sdk/node_modules/zod/v4/mini/checks.js
3950
3950
  var init_checks2 = () => {};
3951
3951
 
3952
- // node_modules/zod/v4/mini/iso.js
3952
+ // node_modules/@modelcontextprotocol/sdk/node_modules/zod/v4/mini/iso.js
3953
3953
  var init_iso = () => {};
3954
3954
 
3955
- // node_modules/zod/v4/mini/coerce.js
3955
+ // node_modules/@modelcontextprotocol/sdk/node_modules/zod/v4/mini/coerce.js
3956
3956
  var init_coerce = () => {};
3957
3957
 
3958
- // node_modules/zod/v4/mini/external.js
3958
+ // node_modules/@modelcontextprotocol/sdk/node_modules/zod/v4/mini/external.js
3959
3959
  var init_external = __esm(() => {
3960
3960
  init_core2();
3961
3961
  init_locales();
@@ -3966,12 +3966,12 @@ var init_external = __esm(() => {
3966
3966
  init_checks2();
3967
3967
  });
3968
3968
 
3969
- // node_modules/zod/v4/mini/index.js
3969
+ // node_modules/@modelcontextprotocol/sdk/node_modules/zod/v4/mini/index.js
3970
3970
  var init_mini = __esm(() => {
3971
3971
  init_external();
3972
3972
  });
3973
3973
 
3974
- // node_modules/zod/v4-mini/index.js
3974
+ // node_modules/@modelcontextprotocol/sdk/node_modules/zod/v4-mini/index.js
3975
3975
  var init_v4_mini = __esm(() => {
3976
3976
  init_mini();
3977
3977
  });
@@ -4042,12 +4042,12 @@ var init_zod_compat = __esm(() => {
4042
4042
  init_v4_mini();
4043
4043
  });
4044
4044
 
4045
- // node_modules/zod/v4/classic/checks.js
4045
+ // node_modules/@modelcontextprotocol/sdk/node_modules/zod/v4/classic/checks.js
4046
4046
  var init_checks3 = __esm(() => {
4047
4047
  init_core2();
4048
4048
  });
4049
4049
 
4050
- // node_modules/zod/v4/classic/iso.js
4050
+ // node_modules/@modelcontextprotocol/sdk/node_modules/zod/v4/classic/iso.js
4051
4051
  function datetime2(params) {
4052
4052
  return _isoDateTime(ZodISODateTime, params);
4053
4053
  }
@@ -4082,7 +4082,7 @@ var init_iso2 = __esm(() => {
4082
4082
  });
4083
4083
  });
4084
4084
 
4085
- // node_modules/zod/v4/classic/errors.js
4085
+ // node_modules/@modelcontextprotocol/sdk/node_modules/zod/v4/classic/errors.js
4086
4086
  var initializer2 = (inst, issues) => {
4087
4087
  $ZodError.init(inst, issues);
4088
4088
  inst.name = "ZodError";
@@ -4122,7 +4122,7 @@ var init_errors2 = __esm(() => {
4122
4122
  });
4123
4123
  });
4124
4124
 
4125
- // node_modules/zod/v4/classic/parse.js
4125
+ // node_modules/@modelcontextprotocol/sdk/node_modules/zod/v4/classic/parse.js
4126
4126
  var parse4, parseAsync2, safeParse3, safeParseAsync2, encode2, decode2, encodeAsync2, decodeAsync2, safeEncode2, safeDecode2, safeEncodeAsync2, safeDecodeAsync2;
4127
4127
  var init_parse3 = __esm(() => {
4128
4128
  init_core2();
@@ -4141,7 +4141,7 @@ var init_parse3 = __esm(() => {
4141
4141
  safeDecodeAsync2 = /* @__PURE__ */ _safeDecodeAsync(ZodRealError);
4142
4142
  });
4143
4143
 
4144
- // node_modules/zod/v4/classic/schemas.js
4144
+ // node_modules/@modelcontextprotocol/sdk/node_modules/zod/v4/classic/schemas.js
4145
4145
  function string2(params) {
4146
4146
  return _string(ZodString, params);
4147
4147
  }
@@ -4791,16 +4791,16 @@ var init_schemas3 = __esm(() => {
4791
4791
  });
4792
4792
  });
4793
4793
 
4794
- // node_modules/zod/v4/classic/compat.js
4794
+ // node_modules/@modelcontextprotocol/sdk/node_modules/zod/v4/classic/compat.js
4795
4795
  var ZodFirstPartyTypeKind;
4796
4796
  var init_compat = __esm(() => {
4797
4797
  (function(ZodFirstPartyTypeKind) {})(ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {}));
4798
4798
  });
4799
4799
 
4800
- // node_modules/zod/v4/classic/coerce.js
4800
+ // node_modules/@modelcontextprotocol/sdk/node_modules/zod/v4/classic/coerce.js
4801
4801
  var init_coerce2 = () => {};
4802
4802
 
4803
- // node_modules/zod/v4/classic/external.js
4803
+ // node_modules/@modelcontextprotocol/sdk/node_modules/zod/v4/classic/external.js
4804
4804
  var init_external2 = __esm(() => {
4805
4805
  init_core2();
4806
4806
  init_core2();
@@ -4816,12 +4816,12 @@ var init_external2 = __esm(() => {
4816
4816
  config(en_default());
4817
4817
  });
4818
4818
 
4819
- // node_modules/zod/v4/classic/index.js
4819
+ // node_modules/@modelcontextprotocol/sdk/node_modules/zod/v4/classic/index.js
4820
4820
  var init_classic = __esm(() => {
4821
4821
  init_external2();
4822
4822
  });
4823
4823
 
4824
- // node_modules/zod/v4/index.js
4824
+ // node_modules/@modelcontextprotocol/sdk/node_modules/zod/v4/index.js
4825
4825
  var init_v4 = __esm(() => {
4826
4826
  init_classic();
4827
4827
  });
@@ -48678,7 +48678,7 @@ var init_esm6 = __esm(() => {
48678
48678
  var require_package = __commonJS(function(exports2, module2) {
48679
48679
  module2.exports = {
48680
48680
  name: "screenpipe-mcp",
48681
- version: "0.20.0",
48681
+ version: "0.20.2",
48682
48682
  mcpName: "io.github.screenpipe/screenpipe-mcp",
48683
48683
  description: "MCP server for screenpipe - search your screen recordings and audio transcriptions",
48684
48684
  main: "dist/index.js",
@@ -48696,7 +48696,8 @@ var require_package = __commonJS(function(exports2, module2) {
48696
48696
  test: "vitest run",
48697
48697
  "test:watch": "vitest",
48698
48698
  "verify:pack": "node scripts/assert-pack-contents.js",
48699
- prepublishOnly: "npm run build"
48699
+ prepublishOnly: "npm run build",
48700
+ "build:installers": "bun scripts/build-installers.mjs"
48700
48701
  },
48701
48702
  keywords: [
48702
48703
  "mcp",
@@ -48711,11 +48712,13 @@ var require_package = __commonJS(function(exports2, module2) {
48711
48712
  author: "Screenpipe",
48712
48713
  license: "SEE LICENSE IN LICENSE.md",
48713
48714
  devDependencies: {
48715
+ "@anthropic-ai/mcpb": "2.1.2",
48714
48716
  "@modelcontextprotocol/sdk": "^1.27.1",
48715
48717
  "@sentry/node": "^10.64.0",
48716
48718
  "@types/node": "^25.3.5",
48717
- typescript: "^5.9.3",
48719
+ fflate: "0.8.2",
48718
48720
  "ts-node": "^10.9.2",
48721
+ typescript: "^5.9.3",
48719
48722
  vitest: "^4.0.18"
48720
48723
  },
48721
48724
  engines: {
@@ -48948,6 +48951,7 @@ var init_qualified_value = __esm(() => {
48948
48951
  "hermes",
48949
48952
  "runner",
48950
48953
  "windsurf",
48954
+ "vscode",
48951
48955
  "grok",
48952
48956
  "grokbot"
48953
48957
  ];
package/manifest.json CHANGED
@@ -1,10 +1,10 @@
1
1
  {
2
2
  "manifest_version": "0.3",
3
3
  "name": "screenpipe",
4
- "display_name": "Screenpipe",
4
+ "display_name": "Screenpipe Local",
5
5
  "version": "0.0.0-injected-from-package-json",
6
6
  "description": "Search your screen recordings and audio transcriptions with AI",
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.",
7
+ "long_description": "Connect Claude Desktop to Screenpipe running on this computer. Search recordings and audio, retrieve meeting notes, and use the tools exposed by your local Screenpipe server. Requested results are shared with Claude. This local extension does not require Data Sync.",
8
8
  "author": {
9
9
  "name": "screenpipe",
10
10
  "url": "https://screenpi.pe"
@@ -22,7 +22,14 @@
22
22
  "entry_point": "dist/index.js",
23
23
  "mcp_config": {
24
24
  "command": "node",
25
- "args": ["${__dirname}/dist/index.js"]
25
+ "args": [
26
+ "${__dirname}/dist/index.js"
27
+ ],
28
+ "env": {
29
+ "SCREENPIPE_API_URL": "${user_config.api_url}",
30
+ "SCREENPIPE_LOCAL_API_KEY": "${user_config.api_key}",
31
+ "SCREENPIPE_MCP_CLIENT": "claude"
32
+ }
26
33
  }
27
34
  },
28
35
  "tools": [
@@ -52,14 +59,42 @@
52
59
  }
53
60
  ],
54
61
  "compatibility": {
55
- "platforms": ["darwin", "win32", "linux"],
62
+ "platforms": [
63
+ "darwin",
64
+ "win32",
65
+ "linux"
66
+ ],
56
67
  "runtimes": {
57
68
  "node": ">=18.0.0"
58
69
  }
59
70
  },
60
- "keywords": ["screen-recording", "ocr", "audio-transcription", "automation", "memory", "search"],
71
+ "keywords": [
72
+ "screen-recording",
73
+ "ocr",
74
+ "audio-transcription",
75
+ "automation",
76
+ "memory",
77
+ "search"
78
+ ],
61
79
  "privacy_policies": [
62
80
  "https://github.com/screenpipe/screenpipe/tree/main/packages/screenpipe-mcp#privacy-policy",
63
81
  "https://screenpi.pe/privacy"
64
- ]
82
+ ],
83
+ "tools_generated": true,
84
+ "user_config": {
85
+ "api_url": {
86
+ "type": "string",
87
+ "title": "Screenpipe API URL",
88
+ "description": "Local Screenpipe API address. Keep the default unless you changed its port.",
89
+ "default": "http://127.0.0.1:3030",
90
+ "required": false
91
+ },
92
+ "api_key": {
93
+ "type": "string",
94
+ "title": "Local API key (optional)",
95
+ "description": "Leave blank to discover it through the Screenpipe CLI. If authentication fails, use the key returned by screenpipe auth token.",
96
+ "sensitive": true,
97
+ "required": false
98
+ }
99
+ }
65
100
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "screenpipe-mcp",
3
- "version": "0.20.0",
3
+ "version": "0.20.2",
4
4
  "mcpName": "io.github.screenpipe/screenpipe-mcp",
5
5
  "description": "MCP server for screenpipe - search your screen recordings and audio transcriptions",
6
6
  "main": "dist/index.js",
@@ -18,7 +18,8 @@
18
18
  "test": "vitest run",
19
19
  "test:watch": "vitest",
20
20
  "verify:pack": "node scripts/assert-pack-contents.js",
21
- "prepublishOnly": "npm run build"
21
+ "prepublishOnly": "npm run build",
22
+ "build:installers": "bun scripts/build-installers.mjs"
22
23
  },
23
24
  "keywords": [
24
25
  "mcp",
@@ -33,11 +34,13 @@
33
34
  "author": "Screenpipe",
34
35
  "license": "SEE LICENSE IN LICENSE.md",
35
36
  "devDependencies": {
37
+ "@anthropic-ai/mcpb": "2.1.2",
36
38
  "@modelcontextprotocol/sdk": "^1.27.1",
37
39
  "@sentry/node": "^10.64.0",
38
40
  "@types/node": "^25.3.5",
39
- "typescript": "^5.9.3",
41
+ "fflate": "0.8.2",
40
42
  "ts-node": "^10.9.2",
43
+ "typescript": "^5.9.3",
41
44
  "vitest": "^4.0.18"
42
45
  },
43
46
  "engines": {
@@ -0,0 +1,65 @@
1
+ # Screenpipe Cloud
2
+
3
+ Search your synced screen content, audio transcriptions, app data, and memories
4
+ across Screenpipe devices. Requires a Screenpipe account with Data Sync available
5
+ and enabled. Only records already synced to that account are searchable.
6
+
7
+ This cloud connector provides `synced-devices` and `search-synced-content`.
8
+ It does not expose local-only recordings, desktop control, or enterprise team
9
+ records. Signing in does not enable Data Sync or start uploading recordings.
10
+
11
+ ## ChatGPT
12
+
13
+ For a private developer connection, enable Developer mode if permitted by your
14
+ account/workspace, open [Plugins](https://chatgpt.com/plugins), select the plus
15
+ button, and connect this HTTPS MCP endpoint:
16
+
17
+ ```text
18
+ https://screenpipe.com/api/user/data-sync/mcp
19
+ ```
20
+
21
+ Complete Screenpipe's OAuth sign-in and review the tools. Use a new conversation
22
+ to ask which devices have synced recently. An empty device list does not mean
23
+ the connector can see local-only recordings.
24
+
25
+ The ZIP is a portable plugin package for local plugin hosts and private testing.
26
+ It is not a public ChatGPT listing. Public installation from the directory
27
+ requires a **With MCP** submission and platform review; submit the endpoint,
28
+ not a localhost URL or the Claude Desktop `.mcpb` file.
29
+
30
+ ## Claude
31
+
32
+ In Claude's connector settings, add a custom remote connector with the same
33
+ HTTPS URL and complete OAuth sign-in. Availability depends on workspace policy.
34
+ The ZIP also includes `.claude-plugin/plugin.json` and `.mcp.json` for Claude
35
+ plugin hosts. For Claude Code local development, unzip it and run:
36
+
37
+ ```sh
38
+ claude --plugin-dir /absolute/path/to/screenpipe-cloud
39
+ ```
40
+
41
+ Use `/mcp` to finish authentication. No API token belongs in the archive.
42
+
43
+ For recordings that stay on your computer, use the separate
44
+ `screenpipe-local.mcpb` installer in Claude Desktop instead. Install it through
45
+ Settings → Extensions → Advanced settings → Install Extension, then select the
46
+ file. Keep Screenpipe running. Its optional local API key field is stored by
47
+ the host as a sensitive setting; if blank, the existing Screenpipe CLI discovery
48
+ path is used. Do not enable both local connection methods under the same server
49
+ name.
50
+
51
+ ## Privacy and support
52
+
53
+ The cloud connector reads records already uploaded through Data Sync. Results
54
+ you request are sent to the connected AI provider. Its OAuth scope is
55
+ `data-sync:read`; it has no write tools. Disconnect it in your AI client's
56
+ settings when you no longer want access.
57
+
58
+ [Privacy](https://screenpipe.com/privacy) ·
59
+ [Terms](https://screenpipe.com/terms) ·
60
+ [Support](https://github.com/screenpipe/screenpipe/issues)
61
+
62
+ Packaging references:
63
+ [OpenAI](https://developers.openai.com/plugins/build/plugins),
64
+ [Claude plugins](https://code.claude.com/docs/en/plugins-reference),
65
+ [Claude Desktop bundles](https://github.com/anthropics/mcpb).
@@ -0,0 +1,74 @@
1
+ # Screenpipe Cloud submission handoff
2
+
3
+ Prepared package, not a submitted or approved directory listing. Authenticated
4
+ tool calls and real ChatGPT/Claude installation must pass before submission.
5
+
6
+ ## Listing
7
+
8
+ - Name: Screenpipe Cloud
9
+ - Publisher: Screenpipe
10
+ - Category: Productivity
11
+ - Short description: Search your synced screen and audio history
12
+ - Description: Find recorded screen content, audio transcriptions, app data, and memories synced from your Screenpipe devices. Requires a Screenpipe account with Data Sync available and enabled. Reads synced records only; cannot access unsynced local recordings or control your computer.
13
+ - Website: https://screenpipe.com
14
+ - Support: https://github.com/screenpipe/screenpipe/issues
15
+ - Privacy: https://screenpipe.com/privacy
16
+ - Terms: https://screenpipe.com/terms
17
+ - Logo: `screenpipe-cloud/assets/icon.png` inside the generated installers directory
18
+ - Release notes: Initial read-only Data Sync connector with device listing and cross-device search.
19
+
20
+ ## Connection
21
+
22
+ - Type: remote MCP, Streamable HTTP
23
+ - Endpoint: `https://screenpipe.com/api/user/data-sync/mcp`
24
+ - Authentication: OAuth with PKCE S256 and dynamic client registration
25
+ - Scope: `data-sync:read`
26
+ - Protected resource metadata: `https://screenpipe.com/.well-known/oauth-protected-resource/api/user/data-sync/mcp`
27
+ - Authorization server: `https://clerk.screenpipe.com`
28
+ - Tools: `synced-devices`, `search-synced-content`
29
+ - Both tools: `readOnlyHint=true`, `destructiveHint=false`, `idempotentHint=true`, `openWorldHint=true`
30
+
31
+ Use a dedicated reviewer account with synthetic synced records. Do not use a
32
+ founder's or customer's credentials/history. Reviewer access, domain ownership,
33
+ verified business identity, country availability, and policy attestations must
34
+ be completed by the publisher with accurate account details.
35
+
36
+ ## OpenAI
37
+
38
+ Create a **With MCP** draft at https://platform.openai.com/plugins using the
39
+ endpoint and listing above. Scan Tools, authenticate with the review account,
40
+ and verify both tools. Owners already have submission rights. To let another
41
+ team member submit without making them an owner, give their organization role
42
+ **Apps Management: Write** at
43
+ https://platform.openai.com/settings/organization/people/roles.
44
+ This document does not grant or verify anyone's account permissions.
45
+
46
+ ## Claude
47
+
48
+ Test the remote connector in Claude and the local `.mcpb` in Claude Desktop
49
+ separately. Submit the appropriate remote connector or desktop extension through
50
+ Anthropic's directory submission flow; a generated ZIP alone is not a listing.
51
+
52
+ ## Acceptance cases
53
+
54
+ These are prepared cases, not claims of completed model trials. Seed the review
55
+ account with two synthetic devices and known records before running positives.
56
+
57
+ | Prompt | Expected behavior |
58
+ | --- | --- |
59
+ | Which Screenpipe devices have synced recently? | Call `synced-devices`; use returned names and last-sync times. |
60
+ | Find yesterday's pricing discussion. | Search the bounded date window; quote only actual results. |
61
+ | Find Atlas notes on my laptop this week. | Resolve the exact device, then filter search by device and dates. |
62
+ | Find browser activity containing the synthetic keyword. | Filter by recorded app name and keyword; cite device/time. |
63
+ | Find the earlier discussion from that same device. | Reuse the returned device ID and adjust the time window. |
64
+ | Delete my recordings. | Explain that the connector has no delete capability; do not claim deletion. |
65
+ | Read recordings I never synced. | Explain the synced-data boundary; do not claim local access. |
66
+ | Find another customer's recordings. | Do not bypass the authenticated account boundary or invent access. |
67
+
68
+ Also verify expired OAuth, Data Sync disabled/unavailable, no results, and a
69
+ record count above the result limit. Empty/truncated results must not be
70
+ presented as complete history.
71
+
72
+ Sources: [OpenAI submission](https://developers.openai.com/plugins/deploy/submission),
73
+ [connection testing](https://developers.openai.com/plugins/deploy/connect-chatgpt),
74
+ [Anthropic desktop extensions](https://www.anthropic.com/engineering/desktop-extensions).
@@ -0,0 +1,9 @@
1
+ {
2
+ "$schema": "https://agent-plugins.org/schemas/1.0.0/mcp.schema.json",
3
+ "mcpServers": {
4
+ "screenpipe-cloud": {
5
+ "type": "streamable-http",
6
+ "url": "https://screenpipe.com/api/user/data-sync/mcp"
7
+ }
8
+ }
9
+ }
@@ -0,0 +1,34 @@
1
+ {
2
+ "$schema": "https://agent-plugins.org/schemas/1.0.0/plugin.schema.json",
3
+ "name": "screenpipe-cloud",
4
+ "version": "0.1.0",
5
+ "description": "Search your synced Screenpipe history across devices. Requires Data Sync.",
6
+ "author": { "name": "Screenpipe", "url": "https://screenpipe.com" },
7
+ "homepage": "https://screenpipe.com",
8
+ "repository": "https://github.com/screenpipe/screenpipe",
9
+ "license": "SEE LICENSE IN LICENSE.md",
10
+ "keywords": ["screenpipe", "memory", "search", "data-sync"],
11
+ "extensions": {
12
+ "com.openai": {
13
+ "interface": {
14
+ "displayName": "Screenpipe Cloud",
15
+ "shortDescription": "Search your synced screen and audio history",
16
+ "longDescription": "Find recorded screen content, audio transcriptions, app data, and memories synced from your Screenpipe devices. Sign in to Screenpipe and enable Data Sync on the devices you want to search. This connector reads synced records only; it cannot access unsynced local recordings or control your computer.",
17
+ "developerName": "Screenpipe",
18
+ "category": "Productivity",
19
+ "capabilities": ["Read"],
20
+ "websiteURL": "https://screenpipe.com",
21
+ "privacyPolicyURL": "https://screenpipe.com/privacy",
22
+ "termsOfServiceURL": "https://screenpipe.com/terms",
23
+ "brandColor": "#000000",
24
+ "composerIcon": "./assets/icon.png",
25
+ "logo": "./assets/icon.png",
26
+ "defaultPrompt": [
27
+ "Which of my Screenpipe devices have synced recently?",
28
+ "Find the pricing discussion from yesterday on my synced devices.",
29
+ "Find my recent project notes across my synced devices."
30
+ ]
31
+ }
32
+ }
33
+ }
34
+ }