{
  "name": "easyeda-mcp-pro",
  "version": "1.0.0",
  "mcpName": "io.github.oaslananka/easyeda-mcp-pro",
  "description": "MCP server for EasyEDA Pro: PCB inspection, BOM, exports, and hardware review.",
  "keywords": [
    "mcp",
    "model-context-protocol",
    "easyeda",
    "easyeda-pro",
    "pcb",
    "eda",
    "jlcpcb",
    "lcsc",
    "hardware",
    "schematic",
    "bom"
  ],
  "author": "oaslananka",
  "license": "MIT",
  "repository": {
    "type": "git",
    "url": "git+https://github.com/oaslananka/easyeda-mcp-pro.git"
  },
  "bugs": {
    "url": "https://github.com/oaslananka/easyeda-mcp-pro/issues"
  },
  "homepage": "https://github.com/oaslananka/easyeda-mcp-pro#readme",
  "type": "module",
  "main": "dist/index.js",
  "bin": {
    "easyeda-mcp-pro": "dist/index.js"
  },
  "files": [
    "dist",
    "easyeda-bridge-extension.eext",
    "easyeda-bridge-extension.checksums.json",
    "README.md",
    "LICENSE",
    "THIRD_PARTY_NOTICES.md",
    "config/runtime-policy.json",
    "scripts/check-runtime.mjs"
  ],
  "packageManager": "pnpm@11.5.1",
  "engines": {
    "node": ">=24 <25",
    "pnpm": "11.5.1"
  },
  "scripts": {
    "dev": "tsx watch src/index.ts",
    "dev:extension": "pnpm --filter @easyeda-mcp-pro/bridge-extension build:watch",
    "dev:hotloop": "BRIDGE_HOT_SWAP_ENABLED=true BRIDGE_HOT_SWAP_WATCH=easyeda-bridge-extension/dist/dispatcher.js TOOL_PROFILE=dev tsx watch src/index.ts",
    "clean": "node scripts/clean.mjs",
    "prebuild": "pnpm runtime:check && node scripts/sync-versions.mjs",
    "build": "pnpm clean && tsc -p tsconfig.build.json",
    "build:extension": "pnpm --filter @easyeda-mcp-pro/bridge-extension build",
    "setup:local": "pnpm build && pnpm build:extension && node dist/index.js --setup-local",
    "doctor": "pnpm build && node dist/index.js --doctor",
    "start": "node dist/index.js",
    "typecheck": "tsc --noEmit",
    "typecheck:extension": "pnpm --filter @easyeda-mcp-pro/bridge-extension typecheck",
    "lint": "pnpm lint:server && pnpm lint:extension && pnpm lint:scripts && pnpm lint:tools",
    "check:complexity": "node scripts/check-complexity-ratchet.mjs",
    "complexity:update": "node scripts/check-complexity-ratchet.mjs --write",
    "lint:tools": "tsx scripts/lint-tool-metadata.mts",
    "format": "prettier --write .",
    "format:check": "prettier --check .",
    "test": "vitest run",
    "test:watch": "vitest",
    "test:coverage": "vitest run --coverage",
    "test:extension": "pnpm --filter @easyeda-mcp-pro/bridge-extension test",
    "smoke:easyeda": "tsx scripts/live-easyeda-smoke.mts",
    "smoke:ngspice": "tsx scripts/live-ngspice-smoke.mts",
    "verify:extension": "pnpm --filter @easyeda-mcp-pro/bridge-extension verify",
    "inspector": "pnpm build && npx @modelcontextprotocol/inspector node dist/index.js",
    "generate:tools-doc": "tsx scripts/generate-tools-doc.ts",
    "generate:compatibility": "node scripts/generate-easyeda-compatibility.mjs",
    "check:compatibility": "node scripts/generate-easyeda-compatibility.mjs --check",
    "verify:tool-coverage": "tsx scripts/verify-tool-coverage.mts",
    "docs:dev": "vitepress dev docs",
    "docs:build": "pnpm check:compatibility && vitepress build docs",
    "docs:preview": "vitepress preview docs",
    "check:metadata": "pnpm check:environment-metadata && node scripts/check-metadata.mjs",
    "inventory:capture": "tsx scripts/capture-runtime-inventory.mts",
    "inventory:diff": "tsx scripts/diff-runtime-inventory.mts",
    "eval:golden": "tsx scripts/run-evals.mts",
    "eval:golden:update": "tsx scripts/run-evals.mts --update-baseline",
    "verify": "pnpm format:check && pnpm typecheck && pnpm typecheck:extension && pnpm lint && pnpm check:complexity && pnpm check:package-scripts && pnpm check:capability-docs && pnpm verify:tool-coverage && pnpm test && pnpm test:extension && pnpm package:prepare && pnpm security:secrets && pnpm check:metadata && pnpm docs:build",
    "smoke:schematic-transactions": "tsx scripts/live-schematic-transaction-smoke.mts",
    "security:audit": "node scripts/check-dependency-audit.mjs",
    "security:semgrep": "semgrep scan --config .semgrep.yml --error --metrics=off .",
    "security:semgrep:test": "node scripts/test-semgrep-rules.mjs",
    "security:snyk:oss": "corepack pnpm dlx snyk@1.1306.1 test --all-projects --severity-threshold=high",
    "security:snyk:code": "corepack pnpm dlx snyk@1.1306.1 code test --severity-threshold=high",
    "security:snyk": "pnpm security:snyk:oss && pnpm security:snyk:code",
    "test:coverage:ci": "node -e \"require('node:fs').mkdirSync('reports',{recursive:true})\" && vitest run --coverage --reporter=default --reporter=junit --outputFile.junit=reports/server.junit.xml",
    "test:extension:ci": "node -e \"require('node:fs').mkdirSync('reports',{recursive:true})\" && pnpm --filter @easyeda-mcp-pro/bridge-extension exec vitest run --coverage --reporter=default --reporter=junit --outputFile.junit=../reports/extension.junit.xml",
    "check:extension-size": "node scripts/check-extension-size-budget.mjs",
    "validate:codecov": "curl --fail-with-body --silent --show-error --retry 3 --retry-all-errors --data-binary @codecov.yml https://codecov.io/validate",
    "runtime:check": "node scripts/check-runtime.mjs --require-pnpm",
    "preverify": "pnpm runtime:check",
    "prepack": "pnpm runtime:check && node scripts/prepare-package.mjs",
    "pretest": "pnpm runtime:check",
    "pretest:extension": "pnpm runtime:check",
    "predev": "pnpm runtime:check",
    "predev:extension": "pnpm runtime:check",
    "predev:hotloop": "pnpm runtime:check",
    "presetup:local": "pnpm runtime:check",
    "pretest:watch": "pnpm runtime:check",
    "pretest:coverage": "pnpm runtime:check",
    "pretest:coverage:ci": "pnpm runtime:check",
    "pretest:extension:ci": "pnpm runtime:check",
    "security:secrets": "node scripts/check-secret-hygiene.mjs",
    "generate:capability-docs": "tsx scripts/update-capability-counts.mts",
    "check:capability-docs": "tsx scripts/update-capability-counts.mts --check",
    "release:readiness": "node scripts/check-release-readiness.mjs",
    "release:readiness:compatibility": "node scripts/check-release-readiness.mjs --compatibility-only",
    "release:verify-published": "node scripts/verify-published-release.mjs",
    "package:prepare": "node scripts/prepare-package.mjs",
    "package:check": "node scripts/check-package-artifacts.mjs",
    "package:check-pack-list": "node scripts/check-packed-file-list.mjs",
    "check:package-scripts": "node scripts/check-package-script-targets.mjs",
    "generate:environment-metadata": "tsx scripts/generate-server-environment.mts",
    "check:environment-metadata": "tsx scripts/generate-server-environment.mts --check",
    "lint:server": "eslint src tests vitest.config.ts --max-warnings 0",
    "lint:extension": "eslint easyeda-bridge-extension/src easyeda-bridge-extension/tests easyeda-bridge-extension/scripts --max-warnings 0",
    "lint:scripts": "eslint scripts eslint.config.js --max-warnings 0"
  },
  "dependencies": {
    "@modelcontextprotocol/node": "^2.0.0",
    "@modelcontextprotocol/server": "^2.0.0",
    "dotenv": "^17.4.2",
    "express": "^5.2.1",
    "jose": "^6.2.3",
    "pino": "^10.3.1",
    "undici": "8.9.0",
    "ws": "^8.21.0",
    "zod": "^4.4.3"
  },
  "devDependencies": {
    "@codecov/bundle-analyzer": "2.0.1",
    "@eslint/js": "^10.0.1",
    "@modelcontextprotocol/client": "^2.0.0",
    "@types/express": "^5.0.6",
    "@types/node": "^24.13.2",
    "@types/ws": "^8.18.1",
    "@vitest/coverage-v8": "^4.1.9",
    "eslint": "^10.6.0",
    "fast-check": "4.9.0",
    "globals": "^17.7.0",
    "prettier": "^3.9.4",
    "tsx": "^4.22.4",
    "typescript": "^6.0.3",
    "typescript-eslint": "^8.62.1",
    "vitepress": "^1.6.4",
    "vitest": "^4.1.9"
  }
}
