Close Open Privacy Scan

bolt Snapshot: commit f1e6e5b
science engine v1.23
schedule 2026-07-27T12:30:46.723395+00:00

verified_user Application data leak confirmed

High-confidence data exfiltration identified in application code.

smart_toy MCP server detected: @modelcontextprotocol/ext-apps, @modelcontextprotocol/sdk, openai — detected in dependencies, not a safety judgment.

App Privacy Score

22 /100
High privacy risk — application leak confirmed

High risk · 1142 finding(s)

Based on: 2 first-party package(s) · 19/20 deps analyzed

Dependency score: 52 (Medium risk)

bar_chart Score Breakdown

pii_flow −60
egress −15
env_fs −3

list Scan Summary

3 high 15 medium 1124 low
First-party packages: 2
Dependency packages: 11
Ecosystem: npm

swap_horiz Confirmed data exfiltration in application code

External domains: api-staging.n8n.ioapi.github.comapi.n8n.ioapi.npmjs.orgapi.openai.comapps.extensions.modelcontextprotocol.ioassets.anthropic.comauth.openai.comdocs.expo.devdocs.google.comdocs.n8n.ioexpress-rate-limit.github.iofonts.googleapis.comgithub.comhelp.openai.comjson-schema.orgmanagement.azure.commetadata.google.internaln8n-mcp.comn8n.ionpm.implatform.openai.comreact.devreactjs.orgregistry.npmjs.orgwebhook-urlwww.n8n-mcp.comwww.w3.orgydyufsohxdfpopqbubwk.supabase.coyour-api.comyour-n8n-instance.comyour-n8n.com

high first-party (npm) User/PII-bearing data read from the environment or filesystem flows to an external network call. This is potential data exfiltration.
  1. 1sourcerepo/src/services/n8n-api-client.ts:832
  2. 2sinkrepo/src/services/n8n-api-client.ts:845
high first-party (npm) User/PII-bearing data read from the environment or filesystem flows to an external network call. This is potential data exfiltration.
  1. 1sourcerepo/src/triggers/handlers/chat-handler.ts:94
  2. 2sinkrepo/src/triggers/handlers/chat-handler.ts:127
high first-party (npm) User/PII-bearing data read from the environment or filesystem flows to an external network call. This is potential data exfiltration.
  1. 1sourcerepo/src/triggers/handlers/form-handler.ts:272
  2. 2sinkrepo/src/triggers/handlers/form-handler.ts:420
medium first-party (npm) A credential read from the environment/filesystem is applied as authorization on the same outbound request (auth header). This is intentional authentication, not unexpected data exfiltration.
  1. 1sourcerepo/src/community/documentation-generator.ts:99
  2. 2sinkrepo/src/community/documentation-generator.ts:359
medium first-party (npm) PII-bearing data is written to a log sink. Logged PII is a privacy concern even when it does not leave the process.
  1. 1sourcerepo/src/http-server-single-session.ts:459
  2. 2sinkrepo/src/http-server-single-session.ts:459
medium first-party (npm) PII-bearing data is written to a log sink. Logged PII is a privacy concern even when it does not leave the process.
  1. 1sourcerepo/src/http-server-single-session.ts:463
  2. 2sinkrepo/src/http-server-single-session.ts:463
medium first-party (npm) PII-bearing data is written to a log sink. Logged PII is a privacy concern even when it does not leave the process.
  1. 1sourcerepo/src/http-server.ts:61
  2. 2sinkrepo/src/http-server.ts:61
medium first-party (npm) PII-bearing data is written to a log sink. Logged PII is a privacy concern even when it does not leave the process.
  1. 1sourcerepo/src/http-server.ts:65
  2. 2sinkrepo/src/http-server.ts:65
hub Dependency data flows (2)
medium @modelcontextprotocol/ext-apps tooling PII-bearing data is written to a log sink. Logged PII is a privacy concern even when it does not leave the process.
  1. 1sourcepkgs/npm/@[email protected]__reposrc/examples/lazy-auth-server/server.ts:62
  2. 2sinkpkgs/npm/@[email protected]__reposrc/examples/lazy-auth-server/server.ts:505
medium @modelcontextprotocol/ext-apps tooling PII-bearing data is written to a log sink. Logged PII is a privacy concern even when it does not leave the process.
  1. 1sourcepkgs/npm/@[email protected]__reposrc/examples/lazy-auth-server/server.ts:62
  2. 2sinkpkgs/npm/@[email protected]__reposrc/examples/lazy-auth-server/server.ts:582

</> First-Party Code

first-party (npm)

npm first-party
high pii_flow production #10e2cbbaac5c023a User/PII-bearing data read from the environment or filesystem flows to an external network call. This is potential data exfiltration.
repo/src/services/n8n-api-client.ts:845 · flow /tmp/closeopen-7qib2faz/repo/src/services/n8n-api-client.ts:832 → /tmp/closeopen-7qib2faz/repo/src/services/n8n-api-client.ts:845
      const response = await webhookClient.request(config);

User/PII-bearing data flows to an external sink — the classic data-exfiltration shape.

Fix: Confirm no user identifiers reach this sink; redact/hash before sending, or remove the flow.

high pii_flow production #eb2c97a52a03ace9 User/PII-bearing data read from the environment or filesystem flows to an external network call. This is potential data exfiltration.
repo/src/triggers/handlers/chat-handler.ts:127 · flow /tmp/closeopen-7qib2faz/repo/src/triggers/handlers/chat-handler.ts:94 → /tmp/closeopen-7qib2faz/repo/src/triggers/handlers/chat-handler.ts:127
      const response = await axios.request(config);

User/PII-bearing data flows to an external sink — the classic data-exfiltration shape.

Fix: Confirm no user identifiers reach this sink; redact/hash before sending, or remove the flow.

high pii_flow production #f0fade9ec72e320a User/PII-bearing data read from the environment or filesystem flows to an external network call. This is potential data exfiltration.
repo/src/triggers/handlers/form-handler.ts:420 · flow /tmp/closeopen-7qib2faz/repo/src/triggers/handlers/form-handler.ts:272 → /tmp/closeopen-7qib2faz/repo/src/triggers/handlers/form-handler.ts:420
      const response = await axios.request(config);

User/PII-bearing data flows to an external sink — the classic data-exfiltration shape.

Fix: Confirm no user identifiers reach this sink; redact/hash before sending, or remove the flow.

medium telemetry test-only Excluded from app score #ec5318ad89089512 capability detected · no path traced Structural telemetry/analytics emit (event capture or batched event insert). Confirm user consent and what payload is sent to the destination.
repo/scripts/test-telemetry-debug.ts:47
  const { data: eventData, error: eventError } = await supabase
    .from('telemetry_events')
    .insert([testEvent])

A telemetry/analytics SDK is used; event data is sent to a third-party collector.

Fix: Ensure user consent and a lawful basis; strip PII from event payloads.

medium telemetry test-only Excluded from app score #0895cda67f396ade capability detected · no path traced Structural telemetry/analytics emit (event capture or batched event insert). Confirm user consent and what payload is sent to the destination.
repo/scripts/test-telemetry-debug.ts:74
  const { data: workflowData, error: workflowError } = await supabase
    .from('telemetry_workflows')
    .insert([testWorkflow])

A telemetry/analytics SDK is used; event data is sent to a third-party collector.

Fix: Ensure user consent and a lawful basis; strip PII from event payloads.

medium telemetry test-only Excluded from app score #5ccc40ad491cde31 capability detected · no path traced Structural telemetry/analytics emit (event capture or batched event insert). Confirm user consent and what payload is sent to the destination.
repo/scripts/test-telemetry-direct.ts:34
  const { data, error } = await supabase
    .from('telemetry_events')
    .insert([testEvent]);

A telemetry/analytics SDK is used; event data is sent to a third-party collector.

Fix: Ensure user consent and a lawful basis; strip PII from event payloads.

medium telemetry test-only Excluded from app score #abf58a78cf04a3c0 capability detected · no path traced Structural telemetry/analytics emit (event capture or batched event insert). Confirm user consent and what payload is sent to the destination.
repo/scripts/test-telemetry-no-select.ts:33
  const { error } = await supabase
    .from('telemetry_events')
    .insert([testData]);  // No .select() here!

A telemetry/analytics SDK is used; event data is sent to a third-party collector.

Fix: Ensure user consent and a lawful basis; strip PII from event payloads.

medium telemetry test-only Excluded from app score #9f647180835341e4 capability detected · no path traced Structural telemetry/analytics emit (event capture or batched event insert). Confirm user consent and what payload is sent to the destination.
repo/scripts/test-telemetry-no-select.ts:57
  const { error: workflowError } = await supabase
    .from('telemetry_workflows')
    .insert([testWorkflow]);  // No .select() here!

A telemetry/analytics SDK is used; event data is sent to a third-party collector.

Fix: Ensure user consent and a lawful basis; strip PII from event payloads.

medium telemetry test-only Excluded from app score #0561d3731310dd81 capability detected · no path traced Structural telemetry/analytics emit (event capture or batched event insert). Confirm user consent and what payload is sent to the destination.
repo/scripts/test-telemetry-security.ts:32
  const { error: insertError } = await supabase
    .from('telemetry_events')
    .insert([testData]);

A telemetry/analytics SDK is used; event data is sent to a third-party collector.

Fix: Ensure user consent and a lawful basis; strip PII from event payloads.

medium telemetry test-only Excluded from app score #b0c72ac33de0f73f capability detected · no path traced Structural telemetry/analytics emit (event capture or batched event insert). Confirm user consent and what payload is sent to the destination.
repo/scripts/test-telemetry-simple.ts:33
  const { data, error } = await supabase
    .from('telemetry_events')
    .insert([testData])

A telemetry/analytics SDK is used; event data is sent to a third-party collector.

Fix: Ensure user consent and a lawful basis; strip PII from event payloads.

medium telemetry test-only Excluded from app score #eb5828597655f334 capability detected · no path traced Structural telemetry/analytics emit (event capture or batched event insert). Confirm user consent and what payload is sent to the destination.
repo/scripts/test-workflow-insert.ts:41
  const { data, error } = await supabase
    .from('telemetry_workflows')
    .insert([testWorkflow]);

A telemetry/analytics SDK is used; event data is sent to a third-party collector.

Fix: Ensure user consent and a lawful basis; strip PII from event payloads.

medium pii_flow production #0e514dafcd6abb82 A credential read from the environment/filesystem is applied as authorization on the same outbound request (auth header). This is intentional authentication, not unexpected data exfiltration.
repo/src/community/documentation-generator.ts:359 · flow /tmp/closeopen-7qib2faz/repo/src/community/documentation-generator.ts:99 → /tmp/closeopen-7qib2faz/repo/src/community/documentation-generator.ts:359
        headers: {
          'Content-Type': 'application/json',
          ...(this.apiKey !== 'not-needed' ? { Authorization: `Bearer ${this.apiKey}` } : {}),
        },

A credential (read from the environment/filesystem, or parsed from the request URL) is applied as authorization on the same outbound request. This is intentional authentication to the service the credential belongs to, not unexpected data exfiltration.

Fix: Confirm the destination is the credential's own service; scope the credential and avoid logging it. No action if this is the intended authenticated API call.

medium pii_flow production #90b8918ab73c867b PII-bearing data is written to a log sink. Logged PII is a privacy concern even when it does not leave the process.
repo/src/http-server-single-session.ts:459 · flow /tmp/closeopen-7qib2faz/repo/src/http-server-single-session.ts:459 → /tmp/closeopen-7qib2faz/repo/src/http-server-single-session.ts:459
        logger.info(`Loaded AUTH_TOKEN from file: ${process.env.AUTH_TOKEN_FILE}`);

PII-bearing data is written to a log/print sink — it stays in-process and does not leave the application, but logged PII is still a privacy concern.

Fix: Avoid logging user identifiers; redact or omit PII from log/print statements.

medium pii_flow production #e34b3160dd1c760a PII-bearing data is written to a log sink. Logged PII is a privacy concern even when it does not leave the process.
repo/src/http-server-single-session.ts:463 · flow /tmp/closeopen-7qib2faz/repo/src/http-server-single-session.ts:463 → /tmp/closeopen-7qib2faz/repo/src/http-server-single-session.ts:463
        console.error(`ERROR: Failed to read AUTH_TOKEN_FILE: ${process.env.AUTH_TOKEN_FILE}`);

PII-bearing data is written to a log/print sink — it stays in-process and does not leave the application, but logged PII is still a privacy concern.

Fix: Avoid logging user identifiers; redact or omit PII from log/print statements.

medium pii_flow production #eb98070944e3a5bd PII-bearing data is written to a log sink. Logged PII is a privacy concern even when it does not leave the process.
repo/src/http-server.ts:61 · flow /tmp/closeopen-7qib2faz/repo/src/http-server.ts:61 → /tmp/closeopen-7qib2faz/repo/src/http-server.ts:61
      logger.info(`Loaded AUTH_TOKEN from file: ${process.env.AUTH_TOKEN_FILE}`);

PII-bearing data is written to a log/print sink — it stays in-process and does not leave the application, but logged PII is still a privacy concern.

Fix: Avoid logging user identifiers; redact or omit PII from log/print statements.

medium pii_flow production #00eacfcebb202b2e PII-bearing data is written to a log sink. Logged PII is a privacy concern even when it does not leave the process.
repo/src/http-server.ts:65 · flow /tmp/closeopen-7qib2faz/repo/src/http-server.ts:65 → /tmp/closeopen-7qib2faz/repo/src/http-server.ts:65
      console.error(`ERROR: Failed to read AUTH_TOKEN_FILE: ${process.env.AUTH_TOKEN_FILE}`);

PII-bearing data is written to a log/print sink — it stays in-process and does not leave the application, but logged PII is still a privacy concern.

Fix: Avoid logging user identifiers; redact or omit PII from log/print statements.

expand_more 455 low-confidence finding(s)
low env_fs Filesystem access. 131 locations
low env_fs Environment-variable access. 279 locations
low egress Outbound request to a variable or assembled URL on a network client. Review what data is sent to this destination. 41 locations
low pii_flow A credential read from the environment/filesystem flows to an external network call in a non-auth-header position (request body). Review what is sent. Non-production path — not application runtime. 2 locations
low egress Hardcoded external endpoint. Review what data is sent to this destination. 2 locations

first-party (npm): ui-apps

npm first-party
expand_more 1 low-confidence finding(s)
low env_fs test-only Excluded from app score #95f68e30fb51769c capability detected · no path traced Environment-variable access.
repo/ui-apps/vite.config.ts:7
const appName = process.env.APP_NAME || 'operation-result';

Reads environment variables or the filesystem — an inventory-level capability, not a leak on its own.

Fix: Usually benign; confirm any secret read here is not later sent externally.

</> Dependencies

@modelcontextprotocol/ext-apps

npm dependency
medium pii_flow tooling Excluded from app score unknown #ae10d1ad0a775b65 PII-bearing data is written to a log sink. Logged PII is a privacy concern even when it does not leave the process.
pkgs/npm/@[email protected]__reposrc/examples/lazy-auth-server/server.ts:505 · flow /tmp/closeopen-7qib2faz/pkgs/npm/@[email protected]__reposrc/examples/lazy-auth-server/server.ts:62 → /tmp/closeopen-7qib2faz/pkgs/npm/@[email protected]__reposrc/examples/lazy-auth-server/server.ts:505
    console.log(
      `[auth] refreshed access token (sid=${refreshClaims.sid}, ttl=${accessTtl}s)`,
    );

PII-bearing data is written to a log/print sink — it stays in-process and does not leave the application, but logged PII is still a privacy concern.

Fix: Avoid logging user identifiers; redact or omit PII from log/print statements.

medium pii_flow tooling Excluded from app score unknown #947783eb21193c10 PII-bearing data is written to a log sink. Logged PII is a privacy concern even when it does not leave the process.
pkgs/npm/@[email protected]__reposrc/examples/lazy-auth-server/server.ts:582 · flow /tmp/closeopen-7qib2faz/pkgs/npm/@[email protected]__reposrc/examples/lazy-auth-server/server.ts:62 → /tmp/closeopen-7qib2faz/pkgs/npm/@[email protected]__reposrc/examples/lazy-auth-server/server.ts:582
  console.log(
    `[auth] exchanged code → token (client_id=${stored.client_id}, scope=${scope}, sid=${sid}, access_ttl=${accessTtl}s, refresh_ttl=${refreshTtl}s)`,
  );

PII-bearing data is written to a log/print sink — it stays in-process and does not leave the application, but logged PII is still a privacy concern.

Fix: Avoid logging user identifiers; redact or omit PII from log/print statements.

expand_more 187 low-confidence finding(s)
low env_fs Environment-variable access. 94 locations
low env_fs Filesystem access. 77 locations
low egress Outbound request to a variable or assembled URL on a network client. Review what data is sent to this destination. 16 locations

@modelcontextprotocol/sdk

npm dependency
expand_more 38 low-confidence finding(s)
low egress Outbound request to a variable or assembled URL on a network client. Review what data is sent to this destination. 22 locations
low egress tooling Excluded from app score unknown #3cf3e9fe228e252b capability detected · no path traced Hardcoded external endpoint. Review what data is sent to this destination.
pkgs/npm/@[email protected]__reposrc/scripts/fetch-spec-types.ts:16
    const response = await fetch(url);

Data is sent to a hardcoded external endpoint; review what leaves the process.

Fix: Verify the destination and that only non-sensitive data is sent; pin and audit the dependency.

low env_fs tooling Excluded from app score unknown #3878dede7568d1cb capability detected · no path traced Filesystem access.
pkgs/npm/@[email protected]__reposrc/scripts/fetch-spec-types.ts:77
        writeFileSync(outputPath, fullContent, 'utf-8');

Reads environment variables or the filesystem — an inventory-level capability, not a leak on its own.

Fix: Usually benign; confirm any secret read here is not later sent externally.

low env_fs Environment-variable access. 14 locations

@supabase/supabase-js

npm dependency
expand_more 2 low-confidence finding(s)
low egress Outbound request to a variable or assembled URL on a network client. Review what data is sent to this destination. 2 locations

express

npm dependency
expand_more 1 low-confidence finding(s)
low env_fs dependency Excluded from app score #78a724a55156c4dd capability detected · no path traced Environment-variable access.
pkgs/npm/[email protected]/lib/application.js:91
  var env = process.env.NODE_ENV || 'development';

Reads environment variables or the filesystem — an inventory-level capability, not a leak on its own.

Fix: Usually benign; confirm any secret read here is not later sent externally.

form-data

npm dependency
expand_more 3 low-confidence finding(s)
low env_fs dependency Excluded from app score #c9e647026fe721dc capability detected · no path traced Filesystem access.
pkgs/npm/[email protected]/lib/form_data.js:9
var fs = require('fs');

Reads environment variables or the filesystem — an inventory-level capability, not a leak on its own.

Fix: Usually benign; confirm any secret read here is not later sent externally.

low egress Outbound request to a variable or assembled URL on a network client. Review what data is sent to this destination. 2 locations

n8n-core

npm dependency
expand_more 1 low-confidence finding(s)
low env_fs dependency Excluded from app score #27a82689df7952bd capability detected · no path traced Filesystem access.
pkgs/npm/[email protected]/bin/common.js:13
	await writeFile(filePath, payload, { encoding: 'utf-8' });

Reads environment variables or the filesystem — an inventory-level capability, not a leak on its own.

Fix: Usually benign; confirm any secret read here is not later sent externally.

openai

npm dependency
expand_more 369 low-confidence finding(s)
low egress Hardcoded external endpoint. Review what data is sent to this destination. 6 locations
low env_fs Environment-variable access. 3 locations
low egress Outbound request to a variable or assembled URL on a network client. Review what data is sent to this destination. 360 locations

react-dom

npm dependency

Skipped dependencies

Production

  • n8n-workflow prod — dist-only: no readable source