BLTSpice MCP Server

Crea circuitos de LTSpice con LLMs. Convierte netlist a LTSpice .asc

Documentación

Qwen 27B generating a circuit

bltspice_mcp

Generate LTSpice Circuits using LLMs

¡Crea cualquier circuito LTSpice usando LLMs!

Converts ltspice netlist .net to ltspice .asc file format!

¡Convierte netlists de ltspice .net al formato .asc de ltspice!

REALTIME LTSpice simulation and export to .csv!

Simulación REALTIME de LTSpice y exportación a .csv!

Estructura del Proyecto

  • src/bltspice_mcp/ código fuente del servidor
  • tests/unit/ pruebas unitarias
  • tests/integration/ pruebas de integración
  • testfiles/ assets de ejemplo copiados (.asc/.log/.raw/.asy/.txt/.net/.kicad_sch)
  • examples/codex/ y examples/opencode/ recetas de llamadas MCP para agentes LLM
  • config.json configuración del servidor
  • bltspice_mcp_for_LLM.md referencia de llamadas a herramientas LLM

Requisitos

  • Python 3.11+
  • LTspice instalado
  • Linux/macOS con Wine para el binario de LTspice en Windows

Configuración Rápida

python3 -m venv .venv
. .venv/bin/activate
pip install -U pip
pip install "PyLTSpice>=6.0.1" "fastmcp==2.14.7" "electronics-design>=0.2.3" pytest pytest-asyncio
pip install -e .

Configuración

config.json (se requieren rutas absolutas):

{
  "mcp_server_name": "My PyLTSpice MCP Server",
  "mcp_server_url": "http://localhost:7543",
  "wine_path": "/usr/bin/wine",
  "ltspice_path": "/home/brosnan/.wine/drive_c/Program Files/ADI/LTspice/LTspice.exe",
  "enable_extra_tools": true,
  "timeout": 600,
  "convert_settings": {
    "ltspice_windows_path": "C:\\users\\brosnan\\AppData\\Local\\LTspice\\",
    "ltspice_wine_path": "~/.wine/drive_c/users/brosnan/AppData/Local/LTspice/",
    "custom_search_paths": ["./valid_asy/"],
    "minimum_dist": 32,
    "wire_pin_out_dist": 16,
    "grid_size": 16,
    "autoplace_iter": 12,
    "ltspice_version": 4.1,
    "voltage_must_have_dc": true,
    "kicad_path": "/usr/share/kicad/"
  }
}

convert_settings es opcional. Cada ajuste es opcional y recibe un valor predeterminado cuando se omite. Las custom_search_paths relativas se resuelven desde la raíz del proyecto del servidor; las rutas de Windows permanecen en sintaxis de Windows para la conversión basada en Wine.

mcp_server_url admite http://, https:// y stdio://.

Ejecutar el Servidor

Transporte Stdio:

. .venv/bin/activate
python -m bltspice_mcp --config /home/brosnan/bltspice_mcp/bltspice_mcp/config.json

Ejemplos de Configuración del Cliente MCP

OpenCode

{
  "mcpServers": {
    "bltspice_mcp": {
      "command": "/home/brosnan/bltspice_mcp/bltspice_mcp/.venv/bin/python",
      "args": [
        "-m",
        "bltspice_mcp",
        "--config",
        "/home/brosnan/bltspice_mcp/bltspice_mcp/config.json"
      ]
    }
  }
}

Claude Code

{
  "mcpServers": {
    "bltspice_mcp": {
      "command": "/home/brosnan/bltspice_mcp/bltspice_mcp/.venv/bin/python",
      "args": [
        "-m",
        "bltspice_mcp",
        "--config",
        "/home/brosnan/bltspice_mcp/bltspice_mcp/config.json"
      ]
    }
  }
}

OpenAI Codex

{
  "mcp_servers": {
    "bltspice_mcp": {
      "command": "/home/brosnan/bltspice_mcp/bltspice_mcp/.venv/bin/python",
      "args": [
        "-m",
        "bltspice_mcp",
        "--config",
        "/home/brosnan/bltspice_mcp/bltspice_mcp/config.json"
      ]
    }
  }
}

Contrato de Respuesta

Estados del servidor:

  • performing LTspice operation in progress
  • LTspice operation completed!
  • invalid input!
  • file not found!
  • unsupported file type!
  • simulator not configured!
  • simulation failed!
  • parser failed!
  • LTspice operation timed out!
  • internal error

Cada payload incluye operation. Las respuestas exitosas incluyen output y, opcionalmente, output_obj_name.

stop_reset aislado por sesión

Cada sesión MCP posee un grupo de procesos de trabajo del sistema operativo dedicado que contiene su registro de despachador, hilos de RunTask de PyLTSpice, subprocesos del simulador y procesos hijos de callback. stop_reset interrumpe esa sesión inmediatamente con SIGKILL, limpia las operaciones que ya estaban en cola para ella y descarta su registro de objetos. No señala grupos de trabajo que pertenezcan a otras sesiones MCP. Debido a que los sistemas operativos aplican SIGKILL a procesos en lugar de hilos individuales, matar el proceso de trabajo de la sesión termina todos sus hilos de forma atómica.

La respuesta inmediata es el payload normal en progreso. Consulta execute_status hasta que tanto status esté completo como operation sea stop_reset. Su salida incluye worker_process_killed, processes_killed, threads_terminated_with_processes y queued_operations_killed. El trabajo enviado después de la llamada de reinicio espera hasta que el reinicio se complete y se ejecuta en un trabajador de sesión nuevo.

traces_to_csv mediante execute

Convierte trazas seleccionadas de un objeto RawRead cargado en un CSV por onda/paso.

Entradas:

  • object_name: nombre de un objeto RawRead almacenado
  • trace_refs: array de nombres de trazas (cualquier longitud), por ejemplo ["V(opamp_input)", "V(opamp_output)"]
  • output_files:
    • prefijo/ruta de cadena, ejemplo ./sim_wave_ -> escribe ./sim_wave_0.csv, ./sim_wave_1.csv, ...
    • o array de rutas .csv explícitas con una entrada por onda

Ejemplo de llamada MCP:

{"tool":"execute","arguments":{"api_name":"traces_to_csv","inputs":{"object_name":"raw","trace_refs":["V(opamp_input)","V(opamp_output)"],"output_files":"./sim_wave_"}}}

Conversión de esquemáticos LTspice mediante execute

Las siguientes APIs de electronics-design están disponibles a través de execute: is_valid_ltspice_netlist_file, ltspice_netlist_to_asc, kicad_sch_to_ltspice_netlist y ltspice_netlist_to_kicad_sch.

Las APIs de conversión reciben el convert_settings configurado automáticamente. Una solicitud puede incluir un objeto inputs.convert_settings para sobrescribir valores individuales para esa llamada. is_valid_ltspice_netlist_file solo requiere su ruta de archivo. voltage_must_have_dc debe ser un booleano JSON y se pasa a ltspice_netlist_to_asc dentro de convert_settings.

Las conversiones de KiCad requieren que kicad_path apunte a un directorio que contenga bibliotecas de símbolos de KiCad (predeterminado /usr/share/kicad/). Se puede configurar en config.json o sobrescribirse por solicitud dentro de inputs.convert_settings. Otras configuraciones de generación de KiCad de electronics-design mantienen sus valores predeterminados del paquete.

Ejemplos de llamadas MCP:

{"tool":"execute","arguments":{"api_name":"kicad_sch_to_ltspice_netlist","inputs":{"kicad_sch_filepath":"/abs/path/input.kicad_sch","ltspice_netlist_filepath_out":"/abs/path/output.net"}}}
{"tool":"execute","arguments":{"api_name":"ltspice_netlist_to_kicad_sch","inputs":{"ltspice_netlist_filepath":"/abs/path/input.net","kicad_sch_filepath_out":"/abs/path/output.kicad_sch"}}}

kicad_sch_to_ltspice_netlist convierte un esquemático de KiCad en una netlist de LTspice validada. ltspice_netlist_to_kicad_sch convierte una netlist de LTspice validada en un esquemático de KiCad validado. Ambas devuelven la tupla de conversión de diseño electrónico [true, "OK", 0] en caso de éxito o [false, "<error code>", <line>] en caso de fallo dentro de output.result.

Flujo MCP Equivalente de run_ltspice_to_csv.py

Se incluyen artefactos equivalentes para el flujo de trabajo de ejemplo del amplificador operacional:

  • fixture de netlist: /home/brosnan/bltspice_mcp/bltspice_mcp/testfiles/opampdouble.net
  • receta de Codex: /home/brosnan/bltspice_mcp/bltspice_mcp/examples/codex/run_ltspice_to_csv.md
  • receta de OpenCode: /home/brosnan/bltspice_mcp/bltspice_mcp/examples/opencode/run_ltspice_to_csv.md
  • prueba de integración: /home/brosnan/bltspice_mcp/bltspice_mcp/tests/integration/test_run_ltspice_to_csv_via_mcp.py

Cobertura de Integración

Las pruebas de integración ahora incluyen:

  • Prueba de flujo MCP principal (runtime_info, execute, execute_status, stop_reset)
  • Cobertura de mapeo para el manifiesto de nombres de ejemplo de PyLTSpice incluido (tests/fixtures/pyltspice_example_manifest.json)
  • Cobertura de mapeo para la lista de nombres de ejemplo del README incluido en ese manifiesto
  • Flujo de trabajo MCP de estilo run_ltspice_to_csv.py de extremo a extremo para opampdouble.net
  • Flujos de trabajo MCP de conversión de KiCad para kicad_sch_to_ltspice_netlist y ltspice_netlist_to_kicad_sch (tests/integration/test_kicad_conversion_via_mcp.py)

Ejecutar Pruebas (Una Por Una)

. .venv/bin/activate
pytest -q tests/unit/test_responses.py
pytest -q tests/unit/test_config.py
pytest -q tests/unit/test_dispatcher.py
pytest -q tests/unit/test_session.py
pytest -q tests/integration/test_mcp_server_integration.py
pytest -q tests/integration/test_examples_via_mcp.py
pytest -q tests/integration/test_readme_examples_via_mcp.py
pytest -q tests/integration/test_run_ltspice_to_csv_via_mcp.py
pytest -q tests/integration/test_kicad_conversion_via_mcp.py

Notas

  • runtime_info es inmediato y no requiere sondeo de execute_status.
  • El servidor pone en cola execute en FIFO por sesión MCP; stop_reset interrumpe solo el grupo de procesos de trabajo de esa sesión y limpia su cola existente.
  • execute_status consulta el estado más reciente de las operaciones en cola.
  • Las notificaciones de finalización/error se emiten a través del canal de notificaciones MCP.