Safety and Permissions Statement¶
This statement is the formal safety answer for public directory reviewers.
Summary¶
- KiCad MCP Pro is a local MCP server for KiCad workflows.
- Default transport is stdio.
- The server does not require a hosted backend.
- Telemetry is disabled by default; OpenTelemetry export requires explicit operator configuration.
- The server does not phone home.
- The server does not store user data remotely.
Filesystem Scope¶
- [ ] Allowed scope is the selected KiCad project directory.
- [ ] Allowed scope is additionally constrained by
KICAD_MCP_WORKSPACE_ROOTwhen set. - [ ]
path_safety.pyenforces safe path handling. - [ ] Path traversal outside workspace root must be rejected.
- [ ] Reviewer tests should use
tests/fixtures/benchmark_projects/pass_sensor_node/demo.kicad_pro. - [ ] Private board files are not required for review.
- [ ] Read-only inspections should not write to project files.
- [ ] Destructive operations require explicit tool calls and metadata annotations.
- [ ] Manufacturing package export is gated by project quality checks.
- [ ] Output directories should be separate from source fixtures when possible.
Subprocess Surface¶
- [ ] Required subprocess:
kicad-cli. - [ ] Optional subprocess surface: Freerouting through Docker when configured.
- [ ] No shell command execution tool is exposed as a general MCP capability.
- [ ] KiCad CLI path may be configured through
KICAD_CLI_PATH. - [ ] Health checks can run when KiCad IPC is unavailable.
- [ ] IPC-dependent tools report unavailable state instead of crashing.
- [ ] Docker-based Freerouting is opt-in.
- [ ] Reviewers can skip optional integrations for directory review.
Network and Telemetry¶
- [ ] Default stdio mode opens no network listener.
- [ ] Default stdio mode has no server network egress requirement.
- [ ] HTTP mode is optional.
- [ ] HTTP mode requires bearer auth for production use.
- [ ] HTTP mode requires explicit CORS allowlist for production use.
- [ ] Wildcard CORS is not an acceptable production configuration.
- [ ] No cookies are set by the local stdio server.
- [ ] No IP addresses are collected by the local stdio server.
- [ ] Usage telemetry is disabled by default and optional OpenTelemetry export is explicit.
- [ ] Optional third-party integrations follow their own privacy policies.
Reproducible Builds¶
- [ ] PyPI Trusted Publisher is the intended package publish path.
- [ ] GitHub OIDC is used for trusted release identity.
- [ ] Sigstore signatures are required release evidence.
- [ ] GHCR provenance attestations are required release evidence.
- [ ] CycloneDX SBOM is required release evidence.
- [ ] SHA-256 checksums are required release evidence.
- [ ] Release workflow is protected by a
releaseenvironment. - [ ] Docs workflow publishes to
https://oaslananka.github.io/kicad-mcp.
Independent Verification Commands¶
pnpm run metadata:check
pnpm run mcp:manifest:check
pnpm run assets:icons:check
pnpm run submission:check
pnpm run docs:tools:check
uv run --all-extras properdocs build -f mkdocs.yml --strict
Container Verification Commands¶
VERSION=$(python -c "import tomllib; print(tomllib.load(open('pyproject.toml', 'rb'))['project']['version'])")
cosign verify ghcr.io/oaslananka/kicad-mcp-pro:${VERSION} \
--certificate-identity-regexp "https://github.com/oaslananka/kicad-mcp/.github/workflows/publish-mcp-container.yml@refs/tags/mcp-server-v.*" \
--certificate-oidc-issuer https://token.actions.githubusercontent.com
Reviewer Safety Assertions¶
- [ ] A reviewer can run health checks without KiCad running.
- [ ] A reviewer can run fixture quality gates without private data.
- [ ] A reviewer can inspect tool annotations in
src/kicad_mcp/tools/metadata.py. - [ ] A reviewer can inspect privacy guarantees in
docs/privacy.md. - [ ] A reviewer can inspect threat model details in
docs/security/threat-model.md. - [ ] A reviewer can inspect release integrity details in
docs/security/release-integrity.md. - [ ] A reviewer can inspect Docker behavior in
docs/deployment/docker.md. - [ ] A reviewer can inspect HTTP mode behavior in
docs/deployment/http-mode.md.
Denied Content¶
- [ ] Do not include
.envcontent in submissions. - [ ] Do not include bearer token values in submissions.
- [ ] Do not include API key values in submissions.
- [ ] Do not include OAuth secret values in submissions.
- [ ] Do not include auth cookie values in submissions.
- [ ] Do not include private key files in submissions.
- [ ] Do not include customer board files in submissions.
- [ ] Do not include private screenshots with local usernames.
Final Safety Review Controls¶
- [ ] Confirm stdio mode is described as local-only.
- [ ] Confirm the server itself is described as not collecting telemetry.
- [ ] Confirm the server itself is described as not storing remote user data.
- [ ] Confirm the server itself is described as not setting cookies.
- [ ] Confirm the server itself is described as not collecting IP addresses.
- [ ] Confirm filesystem scope references the selected project directory.
- [ ] Confirm filesystem scope references
KICAD_MCP_WORKSPACE_ROOTwhen set. - [ ] Confirm path traversal is described as rejected by
path_safety.py. - [ ] Confirm read-only inspection tools are distinguished from write tools.
- [ ] Confirm destructive tools require explicit user intent through MCP calls.
- [ ] Confirm manufacturing package export is described as quality-gated.
- [ ] Confirm
kicad-cliis the required subprocess surface. - [ ] Confirm Docker/Freerouting is described as optional and opt-in.
- [ ] Confirm no general shell execution capability is claimed or exposed.
- [ ] Confirm HTTP mode is described separately from local stdio mode.
- [ ] Confirm HTTP mode production notes mention bearer authentication.
- [ ] Confirm HTTP mode production notes mention explicit CORS allowlists.
- [ ] Confirm optional Nexar usage is described as third-party governed.
- [ ] Confirm optional third-party integrations are not described as default behavior.
- [ ] Confirm no reviewer evidence includes
.envcontent. - [ ] Confirm no reviewer evidence includes bearer token values.
- [ ] Confirm no reviewer evidence includes API key values.
- [ ] Confirm no reviewer evidence includes OAuth client secrets.
- [ ] Confirm no reviewer evidence includes auth cookies.
- [ ] Confirm no reviewer evidence includes private key files.
- [ ] Confirm no reviewer evidence includes customer board files.
- [ ] Confirm no screenshots include local usernames or private paths.
- [ ] Confirm release evidence references PyPI Trusted Publisher.
- [ ] Confirm release evidence references GitHub OIDC.
- [ ] Confirm release evidence references Sigstore signing.
- [ ] Confirm release evidence references GHCR provenance.
- [ ] Confirm release evidence references CycloneDX SBOM output.
- [ ] Confirm release evidence references SHA-256 checksums.
- [ ] Confirm reviewers can run
pnpm run submission:checkindependently. - [ ] Confirm reviewers can run
pnpm run mcp:manifest:checkindependently. - [ ] Confirm reviewers can run
pnpm run docs:tools:checkindependently. - [ ] Confirm reviewers can inspect
docs/privacy.mdfor data handling. - [ ] Confirm reviewers can inspect
docs/security/threat-model.mdfor trust boundaries. - [ ] Confirm reviewers can inspect
docs/security/release-integrity.mdfor provenance. - [ ] Confirm reviewers can inspect
docs/deployment/docker.mdfor container behavior. - [ ] Confirm reviewers can inspect
docs/deployment/http-mode.mdfor remote mode behavior. - [ ] Confirm reviewer fixture instructions avoid private project files.
- [ ] Confirm wrong-path failures are documented as client setup errors.
- [ ] Confirm safety language is not diluted by marketing claims.
- [ ] Confirm safety language does not promise controls not implemented in code.
- [ ] Confirm every optional integration is explicitly named as optional.
- [ ] Confirm production deployment notes do not weaken local stdio guarantees.
- [ ] Confirm post-review fixes update this statement and the privacy page together.
- [ ] Confirm final submission uses the exact current version and commit SHA.
- [ ] Confirm the current repository state is clean before safety evidence is captured.