PCBWay Studio MCP

Privacy policy

Privacy Policy

PCBWay Studio MCP ("the service") is operated by Manuel Pérez
(@mperez90). This document explains what personal data the service
collects, how it is used, where it is stored, and how to exercise your
rights under the GDPR and similar regimes.

If you have any question about this policy, write to <[email protected]>.

_Last updated: 2026-04-10_


1. What data the service handles

The service is a Model Context Protocol (MCP) server for AI-assisted PCB
design. It is invoked by an upstream LLM client (Claude, ChatGPT, an IDE
plugin, etc.) on behalf of an end user. We collect the minimum data
necessary
to provide the requested functionality.

1.1 Data you actively send

CategoryExamplesWhy we receive it
Design files you upload.kicad_sch, .kicad_pcb, .zip, BOM CSVsRequired to render previews, run validators, generate quotes, place orders.
Natural-language prompts"Design a 5 V LED blinker with an STM32"Forwarded to the upstream LLM client; the server only sees the parameters the client extracts.
API keys you supplyPCBWay, Mouser, DigiKeyStored encrypted at rest in our database, never logged in plaintext. Used to make calls on your behalf.
Email address (optional)If you sign up for order notificationsSent only to Resend, our transactional email provider, when you ask for a notification.

1.2 Data automatically logged

CategoryRetainedHow
HTTP request metadata (path, method, status, latency)30 daysLocal journald + offsite Hetzner Storage Box copy
MCP session record (session id, tool count, timestamps)Indefinite (session) / 30 days (PII)SQLite via better-sqlite3
Client name + version (clientInfo)IndefiniteSQLite
User agent30 daysSQLite — older entries are pruned automatically
IP addressHashed after 30 days (sha256, irreversible)SQLite, see storage/access-log.ts
API key hashIndefinitesha256 fingerprint only — the raw key is never persisted in the access log

We honor the DNT: 1 browser header and the x-mcp-dnt: 1 MCP header.
When DNT is set the IP address is hashed immediately instead of stored
raw, and the session is marked as do-not-track. Operators may also set
MCP_DEFAULT_DNT=1 to make this the default for all sessions.

1.3 Data we do not collect

generate the requested output (e.g. component count for a summary).

2. Where your data is processed

ComponentProviderRegionSubprocessor data
Compute, database, file storageHetzner CloudGermany (Falkenstein / Nürnberg)DPA
Reverse proxy / TLSSelf-hosted Caddy on the same Hetzner boxGermanyn/a
DNS / DDoS edge (optional)CloudflareGlobal anycastDPA
Transactional email (only when you opt in)ResendUS (with EU option)DPA
Component data lookupsMouser API, DigiKey API, JLCPCB searchUS / globalOnly the part numbers you query
Quote and order forwardingPCBWay APIChinaThe design files and BOM you submit for the quote
Optional GitHub App reviewsGitHubUSRepository metadata, commit SHA, file diff
Optional crash trackingSentry (free tier)EUStack traces, error types — no PII

When you call place_order, get_quote, or any other tool that contacts
a third party, the relevant payload (your design files, BOM, contact
details) is transmitted to that third party. Their privacy policies
govern what they do with it.


3. Legal basis for processing (GDPR Art. 6)

ActivityLegal basis
Running the design tools you invokeArt. 6(1)(b) — performance of the contract you initiated
Storing your account and PCBWay keyArt. 6(1)(b) — performance of the contract
Access logging for security and abuse preventionArt. 6(1)(f) — legitimate interest in maintaining the service
Transactional email (opt-in only)Art. 6(1)(a) — your consent
Sending commission attribution to PCBWay (operator-side)Art. 6(1)(f) — legitimate interest, no personal data shared

4. Retention

is active. When you delete your account (see §6), all rows are removed within 30 days. identifiers and aggregate counters. deleted by cleanup_old_renders. reasons).

You can shorten any of these by self-hosting and adjusting the relevant
environment variables. Operators self-hosting the code can tune retention
via the env vars described in the repository README.


5. Security measures

The full security posture is documented in the v0.17.1 CHANGELOG.md
and summarized below:

certificates. The MCP server itself binds on 127.0.0.1 and is not reachable from the internet directly. per-user PCBWay API key kept encrypted at rest. key (MCP_ADMIN_KEY), with non-admin callers receiving a generic "tool not found" response so the existence of admin endpoints is not leaked. magic-byte allowlist on uploads, path containment + symlink rejection on every filesystem read. runs through ssrfGuard(), which DNS-resolves the host and refuses any IP in private, link-local, or loopback ranges. systemd user and not world-readable. API keys are stored encrypted with a key kept in MCP_DATA_ENCRYPTION_KEY (32-byte random). with MemoryMax, CPUQuota, PrivateNetwork=yes, and NoNewPrivileges=yes. known secret prefixes (Resend re_, GitHub PAT ghp_, OpenAI sk-, AWS AKIA, Slack xox*, BEGIN PRIVATE KEY blocks).

We follow the principle of least privilege and patch dependencies on a
weekly Dependabot schedule.


6. Your rights

Under the GDPR you have the right to:

associated rows. The MCP exposes forget_order and forget_observed_components for self-service deletion of those specific stores. For full account deletion, use the Delete account button on the /account page or email the support address. The MCP exposes list_my_orders and list_observed_components which return JSON dumps you can copy. unsubscribe or the unsubscribe link in any email. authority for Hetzner-hosted services in Germany is the Bundesbeauftragte für den Datenschutz und die Informationsfreiheit (BfDI).

To exercise any of these rights, email <[email protected]> with
a brief description and the email or hashed identifier you used. We
respond within 30 days.


7. Children

The service is not directed at children under 16 and we do not knowingly
collect data from them. If you believe we have collected data from a
child, please contact us so we can delete it.


8. Changes to this policy

When we update this policy we bump the date at the top and record the
change in CHANGELOG.md. Material changes (new subprocessors, new data
categories, expanded retention) are announced via the release notes for
the version that introduces them.


9. Contact