Koskamo

easyeda-mcp-pro

A production-grade MCP server for EasyEDA Pro that connects AI agents to schematic and PCB workflows. It enables safe PCB design inspection, BOM sourcing, manufacturing export, and AI-assisted hardware review with profile-gated tools and safety controls.

Package and access

Local package with source-attributed installation metadata. Koskamo does not execute packages during review.

easyeda-mcp-pro logo, by oaslanankaCommunity listingLocal stdioSource reviewed; not executedPublished by oaslananka
Vendor documentation

What you can do with it

  • Perform schematic and PCB workflow inspection
  • Source Bill of Materials (BOM)
  • Export designs for manufacturing
  • Conduct AI-assisted hardware review

Source and maintenance

Community listingRegistry 1.6.0
Maintenance checked

Packages and installation

Source-provided package data. Koskamo has not executed or live-probed this package.

easyeda-mcp-pro 1.6.0

npm
easyeda-mcp-pro package definition
{
  "version": "1.6.0",
  "transport": "stdio",
  "identifier": "easyeda-mcp-pro",
  "registryType": "npm",
  "environmentVariables": [
    {
      "name": "NODE_ENV",
      "format": "string",
      "choices": [
        "development",
        "test",
        "production"
      ],
      "default": "development",
      "description": "Environment mode"
    },
    {
      "name": "LOG_LEVEL",
      "format": "string",
      "choices": [
        "trace",
        "debug",
        "info",
        "warn",
        "error",
        "fatal",
        "silent"
      ],
      "default": "info",
      "description": "Pino log level"
    },
    {
      "name": "TOOL_PROFILE",
      "format": "string",
      "choices": [
        "core",
        "pro",
        "full",
        "dev",
        "experimental"
      ],
      "default": "core",
      "description": "Active tool profile (core, pro, full, dev, experimental)"
    },
    {
      "name": "TOOL_SCOPES",
      "format": "string",
      "description": "Optional comma- or space-separated capability scope allowlist; empty enables all scopes allowed by the active tool profile."
    },
    {
      "name": "MCP_PROTOCOL_VERSION",
      "format": "string",
      "default": "2025-11-25",
      "description": "MCP protocol version string"
    },
    {
      "name": "MCP_BRIDGE_BACKEND",
      "format": "string",
      "choices": [
        "local_bridge",
        "remote_relay"
      ],
      "default": "local_bridge",
      "description": "Bridge backend: local_bridge or experimental remote_relay"
    },
    {
      "name": "MCP_REMOTE_SESSION_ID",
      "format": "string",
      "description": "Optional fixed Remote Relay session id for the remote_relay backend"
    },
    {
      "name": "TRANSPORT",
      "format": "string",
      "choices": [
        "stdio",
        "http"
      ],
      "default": "stdio",
      "description": "Server transport mode (stdio or http)"
    },
    {
      "name": "HTTP_HOST",
      "format": "string",
      "default": "127.0.0.1",
      "description": "HTTP bind address"
    },
    {
      "name": "HTTP_PORT",
      "format": "number",
      "default": "3000",
      "description": "HTTP port"
    },
    {
      "name": "HTTP_AUTH_DISABLED",
      "format": "boolean",
      "default": "false",
      "description": "Disable HTTP transport authentication"
    },
    {
      "name": "HTTP_RATE_LIMIT_MAX",
      "format": "number",
      "default": "100",
      "description": "Max requests per minute per IP"
    },
    {
      "name": "CORS_ORIGIN",
      "format": "string",
      "description": "Allowed CORS origin for HTTP transport"
    },
    {
      "name": "ALLOWED_ORIGINS",
      "format": "string",
      "description": "Comma-separated list of allowed origins for HTTP transport (use * for wildcard)"
    },
    {
      "name": "MCP_TASKS_ENABLED",
      "format": "boolean",
      "default": "false",
      "description": "Reserved; currently non-functional: parsed for compatibility, but the server does not advertise or execute MCP Tasks."
    },
    {
      "name": "MCP_APPS_ENABLED",
      "format": "boolean",
      "default": "false",
      "description": "Experimental; enables sandboxed read-only MCP Apps project review UI; off by default."
    },
    {
      "name": "MCP_SKILLS_ENABLED",
      "format": "boolean",
      "default": "false",
      "description": "Experimental; serves packaged read-oriented Skills over MCP; off by default."
    },
    {
      "name": "MCP_V2_EXPERIMENTAL",
      "format": "boolean",
      "default": "false",
      "description": "Experimental; enables opt-in dual-era HTTP and stdio support for MCP 2026-07-28 while legacy behavior remains the default."
    },
    {
      "name": "MCP_RAW_EXEC_EXPERIMENTAL",
      "format": "boolean",
      "default": "false",
      "description": "Experimental second gate for raw EasyEDA runtime execution; requires BRIDGE_RAW_EXEC_ENABLED."
    },
    {
      "name": "BRIDGE_HOST",
      "format": "string",
      "default": "127.0.0.1",
      "description": "Bridge WebSocket host for EasyEDA Pro connection"
    },
    {
      "name": "BRIDGE_PORT",
      "format": "number",
      "default": "49620",
      "description": "Bridge primary port"
    },
    {
      "name": "BRIDGE_PORT_SCAN",
      "format": "string",
      "default": "49620-49629",
      "description": "Port scan specification (comma-separated ports or ranges)"
    },
    {
      "name": "BRIDGE_TIMEOUT_MS",
      "format": "number",
      "default": "15000",
      "description": "Bridge call timeout in ms"
    },
    {
      "name": "BRIDGE_HEARTBEAT_MS",
      "format": "number",
      "default": "10000",
      "description": "Bridge heartbeat interval in ms"
    },
    {
      "name": "BRIDGE_WAIT_FOR_EDA_MS",
      "format": "number",
      "default": "30000",
      "description": "How long to wait for EasyEDA Pro to become available on startup (ms)"
    },
    {
      "name": "BRIDGE_MAX_PAYLOAD_SIZE",
      "format": "number",
      "default": "1048576",
      "description": "Max bridge payload size in bytes"
    },
    {
      "name": "BRIDGE_TOKEN",
      "format": "string",
      "description": "Session token for extension auth"
    },
    {
      "name": "EASYEDA_DEV_BRIDGE",
      "format": "boolean",
      "default": "false",
      "description": "Enable EasyEDA dev bridge mode"
    },
    {
      "name": "BRIDGE_RAW_EXEC_ENABLED",
      "format": "boolean",
      "default": "false",
      "description": "Experimental first gate for raw EasyEDA runtime execution; requires MCP_RAW_EXEC_EXPERIMENTAL."
    },
    {
      "name": "DATA_DIR",
      "format": "filepath",
      "description": "Base directory for writable local state; defaults beneath the operating-system user home directory.",
      "placeholder": "Defaults to the operating-system user home directory under .easyeda-mcp-pro."
    },
    {
      "name": "SQLITE_PATH",
      "format": "filepath",
      "description": "SQLite database path; derived from DATA_DIR unless explicitly configured.",
      "placeholder": "Derived from DATA_DIR as easyeda-mcp-pro.sqlite unless explicitly configured."
    },
    {
      "name": "ARTIFACT_DIR",
      "format": "filepath",
      "description": "Artifact export directory; derived from DATA_DIR unless explicitly configured.",
      "placeholder": "Derived from DATA_DIR as artifacts unless explicitly configured."
    },
    {
      "name": "CACHE_DIR",
      "format": "filepath",
      "description": "Cache directory; derived from DATA_DIR unless explicitly configured.",
      "placeholder": "Derived from DATA_DIR as cache unless explicitly configured."
    },
    {
      "name": "AI_PROVIDER",
      "format": "string",
      "choices": [
        "none",
        "anthropic",
        "openai",
        "openrouter",
        "local"
      ],
      "default": "none",
      "description": "Reserved; currently non-functional: no in-process AI provider client is invoked."
    },
    {
      "name": "AI_MODEL",
      "format": "string",
      "description": "Reserved; currently non-functional: no model is selected or invoked."
    },
    {
      "name": "AI_API_KEY",
      "format": "string",
      "description": "Reserved; currently non-functional: do not supply credentials because no provider client consumes them."
    },
    {
      "name": "AI_MAX_TOKENS",
      "format": "number",
      "default": "8000",
      "description": "Reserved; currently non-functional: retained only for future provider compatibility."
    },
    {
      "name": "AI_TIMEOUT_MS",
      "format": "number",
      "default": "60000",
      "description": "Reserved; currently non-functional: retained only for future provider compatibility."
    },
    {
      "name": "AI_ALLOW_DESIGN_MUTATIONS",
      "format": "boolean",
      "default": "false",
      "description": "Reserved; currently non-functional: cannot enable AI-originated design mutation."
    },
    {
      "name": "JLCPCB_MODE",
      "format": "string",
      "choices": [
        "disabled",
        "mock",
        "approved_api"
      ],
      "default": "disabled",
      "description": "JLCPCB API mode (disabled, mock, approved_api)"
    },
    {
      "name": "JLCPCB_CLIENT_ID",
      "format": "string",
      "description": "JLCPCB API client identifier."
    },
    {
      "name": "JLCPCB_CLIENT_SECRET",
      "format": "string",
      "description": "JLCPCB API client secret"
    },
    {
      "name": "JLCPCB_API_BASE_URL",
      "format": "string",
      "default": "https://api.jlcpcb.com",
      "description": "JLCPCB API base URL"
    },
    {
      "name": "JLCPCB_ENABLE_ORDERING",
      "format": "boolean",
      "default": "false",
      "description": "Enable JLCPCB ordering"
    },
    {
      "name": "JLCSEARCH_ENABLED",
      "format": "boolean",
      "default": "true",
      "description": "Enable LCSC component search"
    },
    {
      "name": "JLCSEARCH_BASE_URL",
      "format": "string",
      "default": "https://jlcsearch.tscircuit.com",
      "description": "LCSC search API base URL"
    },
    {
      "name": "LCSC_API_KEY",
      "format": "string",
      "description": "LCSC API key"
    },
    {
      "name": "KEYLESS_SOURCING_ENABLED",
      "format": "boolean",
      "default": "true",
      "description": "Allow supported public keyless component-sourcing fallbacks when vendor credentials are unavailable."
    },
    {
      "name": "SOURCING_CACHE_TTL_SECONDS",
      "format": "number",
      "default": "21600",
      "description": "Component-sourcing cache lifetime in seconds (0 disables cache reuse)."
    },
    {
      "name": "VENDOR_MIN_REQUEST_INTERVAL_MS",
      "format": "number",
      "default": "150",
      "description": "Minimum delay in milliseconds between outbound requests to the same sourcing vendor."
    },
    {
      "name": "MOUSER_ENABLED",
      "format": "boolean",
      "default": "false",
      "description": "Enable Mouser integration"
    },
    {
      "name": "MOUSER_API_KEY",
      "format": "string",
      "description": "Mouser API key"
    },
    {
      "name": "MOUSER_API_BASE_URL",
      "format": "string",
      "default": "https://api.mouser.com",
      "description": "Mouser API base URL"
    },
    {
      "name": "DIGIKEY_ENABLED",
      "format": "boolean",
      "default": "false",
      "description": "Enable DigiKey integration"
    },
    {
      "name": "DIGIKEY_CLIENT_ID",
      "format": "string",
      "description": "DigiKey OAuth2 client identifier."
    },
    {
      "name": "DIGIKEY_CLIENT_SECRET",
      "format": "string",
      "description": "DigiKey OAuth2 client secret"
    },
    {
      "name": "DIGIKEY_SANDBOX",
      "format": "boolean",
      "default": "true",
      "description": "Use DigiKey sandbox environment"
    },
    {
      "name": "DIGIKEY_LOCALE",
      "format": "string",
      "default": "en-US",
      "description": "DigiKey locale"
    },
    {
      "name": "DIGIKEY_CURRENCY",
      "format": "string",
      "default": "USD",
      "description": "DigiKey pricing currency"
    },
    {
      "name": "OAUTH_ENABLED",
      "format": "boolean",
      "default": "false",
      "description": "Enable OAuth for HTTP mode"
    },
    {
      "name": "OAUTH_ISSUER",
      "format": "string",
      "description": "Expected OAuth token issuer"
    },
    {
      "name": "OAUTH_AUDIENCE",
      "format": "string",
      "default": "easyeda-mcp-pro",
      "description": "Expected OAuth token audience"
    },
    {
      "name": "OAUTH_JWKS_URI",
      "format": "string",
      "description": "JWKS endpoint for token signature validation"
    },
    {
      "name": "OAUTH_REQUIRED_SCOPES",
      "format": "string",
      "default": "easyeda:read",
      "description": "Required OAuth token scope"
    },
    {
      "name": "OTEL_ENABLED",
      "format": "boolean",
      "default": "false",
      "description": "Reserved; currently non-functional: no OTLP exporter is started."
    },
    {
      "name": "OTEL_SERVICE_NAME",
      "format": "string",
      "default": "easyeda-mcp-pro",
      "description": "Reserved; currently non-functional: retained for a future OTLP exporter."
    },
    {
      "name": "OTEL_EXPORTER_OTLP_ENDPOINT",
      "format": "string",
      "description": "Reserved; currently non-functional: retained for a future OTLP exporter."
    },
    {
      "name": "TRACE_SAMPLE_RATE",
      "format": "number",
      "default": "1",
      "description": "Reserved; currently non-functional: no OTLP traces are emitted."
    }
  ]
}

Tools

Reported by the attributed source; not independently observed by Koskamo.

No tool definitions available.

Connect from your client

Each snippet configures the same source-provided package; replace placeholders before use.

This server is operated by the named third party. Listing and endpoint checks are not an endorsement or a security audit. Review the operator's permissions, terms, and data handling before connecting. How listings are checked and corrected.

Cursor

Merge this local stdio configuration, replace every placeholder environment value, and restart Cursor. Koskamo has not executed this package.
Cursor configuration
{
  "mcpServers": {
    "easyeda-mcp-pro": {
      "command": "npx",
      "args": [
        "-y",
        "easyeda-mcp-pro@1.6.0"
      ],
      "env": {
        "NODE_ENV": "<YOUR_NODE_ENV>",
        "LOG_LEVEL": "<YOUR_LOG_LEVEL>",
        "TOOL_PROFILE": "<YOUR_TOOL_PROFILE>",
        "TOOL_SCOPES": "<YOUR_TOOL_SCOPES>",
        "MCP_PROTOCOL_VERSION": "<YOUR_MCP_PROTOCOL_VERSION>",
        "MCP_BRIDGE_BACKEND": "<YOUR_MCP_BRIDGE_BACKEND>",
        "MCP_REMOTE_SESSION_ID": "<YOUR_MCP_REMOTE_SESSION_ID>",
        "TRANSPORT": "<YOUR_TRANSPORT>",
        "HTTP_HOST": "<YOUR_HTTP_HOST>",
        "HTTP_PORT": "<YOUR_HTTP_PORT>",
        "HTTP_AUTH_DISABLED": "<YOUR_HTTP_AUTH_DISABLED>",
        "HTTP_RATE_LIMIT_MAX": "<YOUR_HTTP_RATE_LIMIT_MAX>",
        "CORS_ORIGIN": "<YOUR_CORS_ORIGIN>",
        "ALLOWED_ORIGINS": "<YOUR_ALLOWED_ORIGINS>",
        "MCP_TASKS_ENABLED": "<YOUR_MCP_TASKS_ENABLED>",
        "MCP_APPS_ENABLED": "<YOUR_MCP_APPS_ENABLED>",
        "MCP_SKILLS_ENABLED": "<YOUR_MCP_SKILLS_ENABLED>",
        "MCP_V2_EXPERIMENTAL": "<YOUR_MCP_V2_EXPERIMENTAL>",
        "MCP_RAW_EXEC_EXPERIMENTAL": "<YOUR_MCP_RAW_EXEC_EXPERIMENTAL>",
        "BRIDGE_HOST": "<YOUR_BRIDGE_HOST>",
        "BRIDGE_PORT": "<YOUR_BRIDGE_PORT>",
        "BRIDGE_PORT_SCAN": "<YOUR_BRIDGE_PORT_SCAN>",
        "BRIDGE_TIMEOUT_MS": "<YOUR_BRIDGE_TIMEOUT_MS>",
        "BRIDGE_HEARTBEAT_MS": "<YOUR_BRIDGE_HEARTBEAT_MS>",
        "BRIDGE_WAIT_FOR_EDA_MS": "<YOUR_BRIDGE_WAIT_FOR_EDA_MS>",
        "BRIDGE_MAX_PAYLOAD_SIZE": "<YOUR_BRIDGE_MAX_PAYLOAD_SIZE>",
        "BRIDGE_TOKEN": "<YOUR_BRIDGE_TOKEN>",
        "EASYEDA_DEV_BRIDGE": "<YOUR_EASYEDA_DEV_BRIDGE>",
        "BRIDGE_RAW_EXEC_ENABLED": "<YOUR_BRIDGE_RAW_EXEC_ENABLED>",
        "DATA_DIR": "<YOUR_DATA_DIR>",
        "SQLITE_PATH": "<YOUR_SQLITE_PATH>",
        "ARTIFACT_DIR": "<YOUR_ARTIFACT_DIR>",
        "CACHE_DIR": "<YOUR_CACHE_DIR>",
        "AI_PROVIDER": "<YOUR_AI_PROVIDER>",
        "AI_MODEL": "<YOUR_AI_MODEL>",
        "AI_API_KEY": "<YOUR_AI_API_KEY>",
        "AI_MAX_TOKENS": "<YOUR_AI_MAX_TOKENS>",
        "AI_TIMEOUT_MS": "<YOUR_AI_TIMEOUT_MS>",
        "AI_ALLOW_DESIGN_MUTATIONS": "<YOUR_AI_ALLOW_DESIGN_MUTATIONS>",
        "JLCPCB_MODE": "<YOUR_JLCPCB_MODE>",
        "JLCPCB_CLIENT_ID": "<YOUR_JLCPCB_CLIENT_ID>",
        "JLCPCB_CLIENT_SECRET": "<YOUR_JLCPCB_CLIENT_SECRET>",
        "JLCPCB_API_BASE_URL": "<YOUR_JLCPCB_API_BASE_URL>",
        "JLCPCB_ENABLE_ORDERING": "<YOUR_JLCPCB_ENABLE_ORDERING>",
        "JLCSEARCH_ENABLED": "<YOUR_JLCSEARCH_ENABLED>",
        "JLCSEARCH_BASE_URL": "<YOUR_JLCSEARCH_BASE_URL>",
        "LCSC_API_KEY": "<YOUR_LCSC_API_KEY>",
        "KEYLESS_SOURCING_ENABLED": "<YOUR_KEYLESS_SOURCING_ENABLED>",
        "SOURCING_CACHE_TTL_SECONDS": "<YOUR_SOURCING_CACHE_TTL_SECONDS>",
        "VENDOR_MIN_REQUEST_INTERVAL_MS": "<YOUR_VENDOR_MIN_REQUEST_INTERVAL_MS>",
        "MOUSER_ENABLED": "<YOUR_MOUSER_ENABLED>",
        "MOUSER_API_KEY": "<YOUR_MOUSER_API_KEY>",
        "MOUSER_API_BASE_URL": "<YOUR_MOUSER_API_BASE_URL>",
        "DIGIKEY_ENABLED": "<YOUR_DIGIKEY_ENABLED>",
        "DIGIKEY_CLIENT_ID": "<YOUR_DIGIKEY_CLIENT_ID>",
        "DIGIKEY_CLIENT_SECRET": "<YOUR_DIGIKEY_CLIENT_SECRET>",
        "DIGIKEY_SANDBOX": "<YOUR_DIGIKEY_SANDBOX>",
        "DIGIKEY_LOCALE": "<YOUR_DIGIKEY_LOCALE>",
        "DIGIKEY_CURRENCY": "<YOUR_DIGIKEY_CURRENCY>",
        "OAUTH_ENABLED": "<YOUR_OAUTH_ENABLED>",
        "OAUTH_ISSUER": "<YOUR_OAUTH_ISSUER>",
        "OAUTH_AUDIENCE": "<YOUR_OAUTH_AUDIENCE>",
        "OAUTH_JWKS_URI": "<YOUR_OAUTH_JWKS_URI>",
        "OAUTH_REQUIRED_SCOPES": "<YOUR_OAUTH_REQUIRED_SCOPES>",
        "OTEL_ENABLED": "<YOUR_OTEL_ENABLED>",
        "OTEL_SERVICE_NAME": "<YOUR_OTEL_SERVICE_NAME>",
        "OTEL_EXPORTER_OTLP_ENDPOINT": "<YOUR_OTEL_EXPORTER_OTLP_ENDPOINT>",
        "TRACE_SAMPLE_RATE": "<YOUR_TRACE_SAMPLE_RATE>"
      }
    }
  }
}

Cline

Merge this local stdio configuration, replace every placeholder environment value, and restart Cline. Koskamo has not executed this package.
Cline configuration
{
  "mcpServers": {
    "easyeda-mcp-pro": {
      "command": "npx",
      "args": [
        "-y",
        "easyeda-mcp-pro@1.6.0"
      ],
      "env": {
        "NODE_ENV": "<YOUR_NODE_ENV>",
        "LOG_LEVEL": "<YOUR_LOG_LEVEL>",
        "TOOL_PROFILE": "<YOUR_TOOL_PROFILE>",
        "TOOL_SCOPES": "<YOUR_TOOL_SCOPES>",
        "MCP_PROTOCOL_VERSION": "<YOUR_MCP_PROTOCOL_VERSION>",
        "MCP_BRIDGE_BACKEND": "<YOUR_MCP_BRIDGE_BACKEND>",
        "MCP_REMOTE_SESSION_ID": "<YOUR_MCP_REMOTE_SESSION_ID>",
        "TRANSPORT": "<YOUR_TRANSPORT>",
        "HTTP_HOST": "<YOUR_HTTP_HOST>",
        "HTTP_PORT": "<YOUR_HTTP_PORT>",
        "HTTP_AUTH_DISABLED": "<YOUR_HTTP_AUTH_DISABLED>",
        "HTTP_RATE_LIMIT_MAX": "<YOUR_HTTP_RATE_LIMIT_MAX>",
        "CORS_ORIGIN": "<YOUR_CORS_ORIGIN>",
        "ALLOWED_ORIGINS": "<YOUR_ALLOWED_ORIGINS>",
        "MCP_TASKS_ENABLED": "<YOUR_MCP_TASKS_ENABLED>",
        "MCP_APPS_ENABLED": "<YOUR_MCP_APPS_ENABLED>",
        "MCP_SKILLS_ENABLED": "<YOUR_MCP_SKILLS_ENABLED>",
        "MCP_V2_EXPERIMENTAL": "<YOUR_MCP_V2_EXPERIMENTAL>",
        "MCP_RAW_EXEC_EXPERIMENTAL": "<YOUR_MCP_RAW_EXEC_EXPERIMENTAL>",
        "BRIDGE_HOST": "<YOUR_BRIDGE_HOST>",
        "BRIDGE_PORT": "<YOUR_BRIDGE_PORT>",
        "BRIDGE_PORT_SCAN": "<YOUR_BRIDGE_PORT_SCAN>",
        "BRIDGE_TIMEOUT_MS": "<YOUR_BRIDGE_TIMEOUT_MS>",
        "BRIDGE_HEARTBEAT_MS": "<YOUR_BRIDGE_HEARTBEAT_MS>",
        "BRIDGE_WAIT_FOR_EDA_MS": "<YOUR_BRIDGE_WAIT_FOR_EDA_MS>",
        "BRIDGE_MAX_PAYLOAD_SIZE": "<YOUR_BRIDGE_MAX_PAYLOAD_SIZE>",
        "BRIDGE_TOKEN": "<YOUR_BRIDGE_TOKEN>",
        "EASYEDA_DEV_BRIDGE": "<YOUR_EASYEDA_DEV_BRIDGE>",
        "BRIDGE_RAW_EXEC_ENABLED": "<YOUR_BRIDGE_RAW_EXEC_ENABLED>",
        "DATA_DIR": "<YOUR_DATA_DIR>",
        "SQLITE_PATH": "<YOUR_SQLITE_PATH>",
        "ARTIFACT_DIR": "<YOUR_ARTIFACT_DIR>",
        "CACHE_DIR": "<YOUR_CACHE_DIR>",
        "AI_PROVIDER": "<YOUR_AI_PROVIDER>",
        "AI_MODEL": "<YOUR_AI_MODEL>",
        "AI_API_KEY": "<YOUR_AI_API_KEY>",
        "AI_MAX_TOKENS": "<YOUR_AI_MAX_TOKENS>",
        "AI_TIMEOUT_MS": "<YOUR_AI_TIMEOUT_MS>",
        "AI_ALLOW_DESIGN_MUTATIONS": "<YOUR_AI_ALLOW_DESIGN_MUTATIONS>",
        "JLCPCB_MODE": "<YOUR_JLCPCB_MODE>",
        "JLCPCB_CLIENT_ID": "<YOUR_JLCPCB_CLIENT_ID>",
        "JLCPCB_CLIENT_SECRET": "<YOUR_JLCPCB_CLIENT_SECRET>",
        "JLCPCB_API_BASE_URL": "<YOUR_JLCPCB_API_BASE_URL>",
        "JLCPCB_ENABLE_ORDERING": "<YOUR_JLCPCB_ENABLE_ORDERING>",
        "JLCSEARCH_ENABLED": "<YOUR_JLCSEARCH_ENABLED>",
        "JLCSEARCH_BASE_URL": "<YOUR_JLCSEARCH_BASE_URL>",
        "LCSC_API_KEY": "<YOUR_LCSC_API_KEY>",
        "KEYLESS_SOURCING_ENABLED": "<YOUR_KEYLESS_SOURCING_ENABLED>",
        "SOURCING_CACHE_TTL_SECONDS": "<YOUR_SOURCING_CACHE_TTL_SECONDS>",
        "VENDOR_MIN_REQUEST_INTERVAL_MS": "<YOUR_VENDOR_MIN_REQUEST_INTERVAL_MS>",
        "MOUSER_ENABLED": "<YOUR_MOUSER_ENABLED>",
        "MOUSER_API_KEY": "<YOUR_MOUSER_API_KEY>",
        "MOUSER_API_BASE_URL": "<YOUR_MOUSER_API_BASE_URL>",
        "DIGIKEY_ENABLED": "<YOUR_DIGIKEY_ENABLED>",
        "DIGIKEY_CLIENT_ID": "<YOUR_DIGIKEY_CLIENT_ID>",
        "DIGIKEY_CLIENT_SECRET": "<YOUR_DIGIKEY_CLIENT_SECRET>",
        "DIGIKEY_SANDBOX": "<YOUR_DIGIKEY_SANDBOX>",
        "DIGIKEY_LOCALE": "<YOUR_DIGIKEY_LOCALE>",
        "DIGIKEY_CURRENCY": "<YOUR_DIGIKEY_CURRENCY>",
        "OAUTH_ENABLED": "<YOUR_OAUTH_ENABLED>",
        "OAUTH_ISSUER": "<YOUR_OAUTH_ISSUER>",
        "OAUTH_AUDIENCE": "<YOUR_OAUTH_AUDIENCE>",
        "OAUTH_JWKS_URI": "<YOUR_OAUTH_JWKS_URI>",
        "OAUTH_REQUIRED_SCOPES": "<YOUR_OAUTH_REQUIRED_SCOPES>",
        "OTEL_ENABLED": "<YOUR_OTEL_ENABLED>",
        "OTEL_SERVICE_NAME": "<YOUR_OTEL_SERVICE_NAME>",
        "OTEL_EXPORTER_OTLP_ENDPOINT": "<YOUR_OTEL_EXPORTER_OTLP_ENDPOINT>",
        "TRACE_SAMPLE_RATE": "<YOUR_TRACE_SAMPLE_RATE>"
      }
    }
  }
}

VS Code

Merge this local stdio configuration, replace every placeholder environment value, and restart VS Code. Koskamo has not executed this package.
VS Code configuration
{
  "servers": {
    "easyeda-mcp-pro": {
      "type": "stdio",
      "command": "npx",
      "args": [
        "-y",
        "easyeda-mcp-pro@1.6.0"
      ],
      "env": {
        "NODE_ENV": "<YOUR_NODE_ENV>",
        "LOG_LEVEL": "<YOUR_LOG_LEVEL>",
        "TOOL_PROFILE": "<YOUR_TOOL_PROFILE>",
        "TOOL_SCOPES": "<YOUR_TOOL_SCOPES>",
        "MCP_PROTOCOL_VERSION": "<YOUR_MCP_PROTOCOL_VERSION>",
        "MCP_BRIDGE_BACKEND": "<YOUR_MCP_BRIDGE_BACKEND>",
        "MCP_REMOTE_SESSION_ID": "<YOUR_MCP_REMOTE_SESSION_ID>",
        "TRANSPORT": "<YOUR_TRANSPORT>",
        "HTTP_HOST": "<YOUR_HTTP_HOST>",
        "HTTP_PORT": "<YOUR_HTTP_PORT>",
        "HTTP_AUTH_DISABLED": "<YOUR_HTTP_AUTH_DISABLED>",
        "HTTP_RATE_LIMIT_MAX": "<YOUR_HTTP_RATE_LIMIT_MAX>",
        "CORS_ORIGIN": "<YOUR_CORS_ORIGIN>",
        "ALLOWED_ORIGINS": "<YOUR_ALLOWED_ORIGINS>",
        "MCP_TASKS_ENABLED": "<YOUR_MCP_TASKS_ENABLED>",
        "MCP_APPS_ENABLED": "<YOUR_MCP_APPS_ENABLED>",
        "MCP_SKILLS_ENABLED": "<YOUR_MCP_SKILLS_ENABLED>",
        "MCP_V2_EXPERIMENTAL": "<YOUR_MCP_V2_EXPERIMENTAL>",
        "MCP_RAW_EXEC_EXPERIMENTAL": "<YOUR_MCP_RAW_EXEC_EXPERIMENTAL>",
        "BRIDGE_HOST": "<YOUR_BRIDGE_HOST>",
        "BRIDGE_PORT": "<YOUR_BRIDGE_PORT>",
        "BRIDGE_PORT_SCAN": "<YOUR_BRIDGE_PORT_SCAN>",
        "BRIDGE_TIMEOUT_MS": "<YOUR_BRIDGE_TIMEOUT_MS>",
        "BRIDGE_HEARTBEAT_MS": "<YOUR_BRIDGE_HEARTBEAT_MS>",
        "BRIDGE_WAIT_FOR_EDA_MS": "<YOUR_BRIDGE_WAIT_FOR_EDA_MS>",
        "BRIDGE_MAX_PAYLOAD_SIZE": "<YOUR_BRIDGE_MAX_PAYLOAD_SIZE>",
        "BRIDGE_TOKEN": "<YOUR_BRIDGE_TOKEN>",
        "EASYEDA_DEV_BRIDGE": "<YOUR_EASYEDA_DEV_BRIDGE>",
        "BRIDGE_RAW_EXEC_ENABLED": "<YOUR_BRIDGE_RAW_EXEC_ENABLED>",
        "DATA_DIR": "<YOUR_DATA_DIR>",
        "SQLITE_PATH": "<YOUR_SQLITE_PATH>",
        "ARTIFACT_DIR": "<YOUR_ARTIFACT_DIR>",
        "CACHE_DIR": "<YOUR_CACHE_DIR>",
        "AI_PROVIDER": "<YOUR_AI_PROVIDER>",
        "AI_MODEL": "<YOUR_AI_MODEL>",
        "AI_API_KEY": "<YOUR_AI_API_KEY>",
        "AI_MAX_TOKENS": "<YOUR_AI_MAX_TOKENS>",
        "AI_TIMEOUT_MS": "<YOUR_AI_TIMEOUT_MS>",
        "AI_ALLOW_DESIGN_MUTATIONS": "<YOUR_AI_ALLOW_DESIGN_MUTATIONS>",
        "JLCPCB_MODE": "<YOUR_JLCPCB_MODE>",
        "JLCPCB_CLIENT_ID": "<YOUR_JLCPCB_CLIENT_ID>",
        "JLCPCB_CLIENT_SECRET": "<YOUR_JLCPCB_CLIENT_SECRET>",
        "JLCPCB_API_BASE_URL": "<YOUR_JLCPCB_API_BASE_URL>",
        "JLCPCB_ENABLE_ORDERING": "<YOUR_JLCPCB_ENABLE_ORDERING>",
        "JLCSEARCH_ENABLED": "<YOUR_JLCSEARCH_ENABLED>",
        "JLCSEARCH_BASE_URL": "<YOUR_JLCSEARCH_BASE_URL>",
        "LCSC_API_KEY": "<YOUR_LCSC_API_KEY>",
        "KEYLESS_SOURCING_ENABLED": "<YOUR_KEYLESS_SOURCING_ENABLED>",
        "SOURCING_CACHE_TTL_SECONDS": "<YOUR_SOURCING_CACHE_TTL_SECONDS>",
        "VENDOR_MIN_REQUEST_INTERVAL_MS": "<YOUR_VENDOR_MIN_REQUEST_INTERVAL_MS>",
        "MOUSER_ENABLED": "<YOUR_MOUSER_ENABLED>",
        "MOUSER_API_KEY": "<YOUR_MOUSER_API_KEY>",
        "MOUSER_API_BASE_URL": "<YOUR_MOUSER_API_BASE_URL>",
        "DIGIKEY_ENABLED": "<YOUR_DIGIKEY_ENABLED>",
        "DIGIKEY_CLIENT_ID": "<YOUR_DIGIKEY_CLIENT_ID>",
        "DIGIKEY_CLIENT_SECRET": "<YOUR_DIGIKEY_CLIENT_SECRET>",
        "DIGIKEY_SANDBOX": "<YOUR_DIGIKEY_SANDBOX>",
        "DIGIKEY_LOCALE": "<YOUR_DIGIKEY_LOCALE>",
        "DIGIKEY_CURRENCY": "<YOUR_DIGIKEY_CURRENCY>",
        "OAUTH_ENABLED": "<YOUR_OAUTH_ENABLED>",
        "OAUTH_ISSUER": "<YOUR_OAUTH_ISSUER>",
        "OAUTH_AUDIENCE": "<YOUR_OAUTH_AUDIENCE>",
        "OAUTH_JWKS_URI": "<YOUR_OAUTH_JWKS_URI>",
        "OAUTH_REQUIRED_SCOPES": "<YOUR_OAUTH_REQUIRED_SCOPES>",
        "OTEL_ENABLED": "<YOUR_OTEL_ENABLED>",
        "OTEL_SERVICE_NAME": "<YOUR_OTEL_SERVICE_NAME>",
        "OTEL_EXPORTER_OTLP_ENDPOINT": "<YOUR_OTEL_EXPORTER_OTLP_ENDPOINT>",
        "TRACE_SAMPLE_RATE": "<YOUR_TRACE_SAMPLE_RATE>"
      }
    }
  }
}

Claude Desktop

Merge this local stdio configuration, replace every placeholder environment value, and restart Claude Desktop. Koskamo has not executed this package.
Claude Desktop configuration
{
  "mcpServers": {
    "easyeda-mcp-pro": {
      "command": "npx",
      "args": [
        "-y",
        "easyeda-mcp-pro@1.6.0"
      ],
      "env": {
        "NODE_ENV": "<YOUR_NODE_ENV>",
        "LOG_LEVEL": "<YOUR_LOG_LEVEL>",
        "TOOL_PROFILE": "<YOUR_TOOL_PROFILE>",
        "TOOL_SCOPES": "<YOUR_TOOL_SCOPES>",
        "MCP_PROTOCOL_VERSION": "<YOUR_MCP_PROTOCOL_VERSION>",
        "MCP_BRIDGE_BACKEND": "<YOUR_MCP_BRIDGE_BACKEND>",
        "MCP_REMOTE_SESSION_ID": "<YOUR_MCP_REMOTE_SESSION_ID>",
        "TRANSPORT": "<YOUR_TRANSPORT>",
        "HTTP_HOST": "<YOUR_HTTP_HOST>",
        "HTTP_PORT": "<YOUR_HTTP_PORT>",
        "HTTP_AUTH_DISABLED": "<YOUR_HTTP_AUTH_DISABLED>",
        "HTTP_RATE_LIMIT_MAX": "<YOUR_HTTP_RATE_LIMIT_MAX>",
        "CORS_ORIGIN": "<YOUR_CORS_ORIGIN>",
        "ALLOWED_ORIGINS": "<YOUR_ALLOWED_ORIGINS>",
        "MCP_TASKS_ENABLED": "<YOUR_MCP_TASKS_ENABLED>",
        "MCP_APPS_ENABLED": "<YOUR_MCP_APPS_ENABLED>",
        "MCP_SKILLS_ENABLED": "<YOUR_MCP_SKILLS_ENABLED>",
        "MCP_V2_EXPERIMENTAL": "<YOUR_MCP_V2_EXPERIMENTAL>",
        "MCP_RAW_EXEC_EXPERIMENTAL": "<YOUR_MCP_RAW_EXEC_EXPERIMENTAL>",
        "BRIDGE_HOST": "<YOUR_BRIDGE_HOST>",
        "BRIDGE_PORT": "<YOUR_BRIDGE_PORT>",
        "BRIDGE_PORT_SCAN": "<YOUR_BRIDGE_PORT_SCAN>",
        "BRIDGE_TIMEOUT_MS": "<YOUR_BRIDGE_TIMEOUT_MS>",
        "BRIDGE_HEARTBEAT_MS": "<YOUR_BRIDGE_HEARTBEAT_MS>",
        "BRIDGE_WAIT_FOR_EDA_MS": "<YOUR_BRIDGE_WAIT_FOR_EDA_MS>",
        "BRIDGE_MAX_PAYLOAD_SIZE": "<YOUR_BRIDGE_MAX_PAYLOAD_SIZE>",
        "BRIDGE_TOKEN": "<YOUR_BRIDGE_TOKEN>",
        "EASYEDA_DEV_BRIDGE": "<YOUR_EASYEDA_DEV_BRIDGE>",
        "BRIDGE_RAW_EXEC_ENABLED": "<YOUR_BRIDGE_RAW_EXEC_ENABLED>",
        "DATA_DIR": "<YOUR_DATA_DIR>",
        "SQLITE_PATH": "<YOUR_SQLITE_PATH>",
        "ARTIFACT_DIR": "<YOUR_ARTIFACT_DIR>",
        "CACHE_DIR": "<YOUR_CACHE_DIR>",
        "AI_PROVIDER": "<YOUR_AI_PROVIDER>",
        "AI_MODEL": "<YOUR_AI_MODEL>",
        "AI_API_KEY": "<YOUR_AI_API_KEY>",
        "AI_MAX_TOKENS": "<YOUR_AI_MAX_TOKENS>",
        "AI_TIMEOUT_MS": "<YOUR_AI_TIMEOUT_MS>",
        "AI_ALLOW_DESIGN_MUTATIONS": "<YOUR_AI_ALLOW_DESIGN_MUTATIONS>",
        "JLCPCB_MODE": "<YOUR_JLCPCB_MODE>",
        "JLCPCB_CLIENT_ID": "<YOUR_JLCPCB_CLIENT_ID>",
        "JLCPCB_CLIENT_SECRET": "<YOUR_JLCPCB_CLIENT_SECRET>",
        "JLCPCB_API_BASE_URL": "<YOUR_JLCPCB_API_BASE_URL>",
        "JLCPCB_ENABLE_ORDERING": "<YOUR_JLCPCB_ENABLE_ORDERING>",
        "JLCSEARCH_ENABLED": "<YOUR_JLCSEARCH_ENABLED>",
        "JLCSEARCH_BASE_URL": "<YOUR_JLCSEARCH_BASE_URL>",
        "LCSC_API_KEY": "<YOUR_LCSC_API_KEY>",
        "KEYLESS_SOURCING_ENABLED": "<YOUR_KEYLESS_SOURCING_ENABLED>",
        "SOURCING_CACHE_TTL_SECONDS": "<YOUR_SOURCING_CACHE_TTL_SECONDS>",
        "VENDOR_MIN_REQUEST_INTERVAL_MS": "<YOUR_VENDOR_MIN_REQUEST_INTERVAL_MS>",
        "MOUSER_ENABLED": "<YOUR_MOUSER_ENABLED>",
        "MOUSER_API_KEY": "<YOUR_MOUSER_API_KEY>",
        "MOUSER_API_BASE_URL": "<YOUR_MOUSER_API_BASE_URL>",
        "DIGIKEY_ENABLED": "<YOUR_DIGIKEY_ENABLED>",
        "DIGIKEY_CLIENT_ID": "<YOUR_DIGIKEY_CLIENT_ID>",
        "DIGIKEY_CLIENT_SECRET": "<YOUR_DIGIKEY_CLIENT_SECRET>",
        "DIGIKEY_SANDBOX": "<YOUR_DIGIKEY_SANDBOX>",
        "DIGIKEY_LOCALE": "<YOUR_DIGIKEY_LOCALE>",
        "DIGIKEY_CURRENCY": "<YOUR_DIGIKEY_CURRENCY>",
        "OAUTH_ENABLED": "<YOUR_OAUTH_ENABLED>",
        "OAUTH_ISSUER": "<YOUR_OAUTH_ISSUER>",
        "OAUTH_AUDIENCE": "<YOUR_OAUTH_AUDIENCE>",
        "OAUTH_JWKS_URI": "<YOUR_OAUTH_JWKS_URI>",
        "OAUTH_REQUIRED_SCOPES": "<YOUR_OAUTH_REQUIRED_SCOPES>",
        "OTEL_ENABLED": "<YOUR_OTEL_ENABLED>",
        "OTEL_SERVICE_NAME": "<YOUR_OTEL_SERVICE_NAME>",
        "OTEL_EXPORTER_OTLP_ENDPOINT": "<YOUR_OTEL_EXPORTER_OTLP_ENDPOINT>",
        "TRACE_SAMPLE_RATE": "<YOUR_TRACE_SAMPLE_RATE>"
      }
    }
  }
}

Let your agent find its tools

Find servers like easyeda-mcp-pro from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.