{ "name": "easyeda-mcp-pro", "version": "1.1.0-rc.1", "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": "PolyForm-Noncommercial-1.0.0", "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", "COMMERCIAL-LICENSING.md", "LICENSING.md", "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", "check:architecture": "node scripts/check-architecture-boundaries.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:fast": "pnpm format:check && pnpm typecheck && pnpm typecheck:extension && pnpm lint && pnpm check:architecture && pnpm check:complexity && pnpm check:package-scripts && pnpm check:capability-docs && pnpm verify:tool-coverage && pnpm check:metadata && pnpm security:secrets", "verify": "pnpm verify:fast && pnpm test && pnpm test:extension && pnpm eval:golden && 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", "preverify:fast": "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.11", "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.11" } }