MCP server para KiCad 10 — IPC API (kipy) + kicad-cli, com regras de fabricação JLCPCB embutidas
Server has 15 tools with consistent naming (verb_noun pattern: pcb_drc, sch_erc, jlcpcb_apply_rules) and detailed descriptions in Portuguese. All tools have input schemas with type definitions and parameter descriptions. However, output schemas are not formally documented, responses are inferred from code (e.g., pcb_drc returns {error} or JSON report, but structure not declared). Error handling uses a _guard wrapper that converts McpKicadError to {error: str}, but lacks recovery guidance or error classification. No tool annotations (readOnlyHint/destructiveHint) despite clear risk levels (READ_ONLY vs WRITE). Parameter descriptions are good (72 chars avg baseline met), but some tools lack enum constraints (e.g., jlcpcb_apply_rules profile param accepts string without listing valid profiles in schema). Output field naming is inconsistent: some tools return {outdir}, others {path}, others {version}, forces LLM to parse varied response shapes.
Contagem de footprints, tracks, vias e nets no board ABERTO no PCB Editor. Requer o KiCad rodando com um board aberto. Falha com MK-IPC-001 se não houver sessão — nesse caso use as tools de arquivo (pcb_*).
Grava o perfil JLCPCB como <projeto>.kicad_dru ao lado do .kicad_pcb. ATENÇÃO: sobrescreve custom rules existentes do projeto — o KiCad só lê de um arquivo com esse nome exato. O anterior é salvo como .kicad_dru.bak. Rode pcb_drc depois para ver o resultado.
Gera o BOM de SMT assembly da JLCPCB a partir do esquemático. Colunas: `Designator,Footprint,Quantity,Value,LCSC Part #`. O código LCSC é consolidado a partir dos vários nomes de campo que bibliotecas diferentes usam (LCSC, LCSC Part #, LCSC#, JLCPCB Part #) — a primeira não-vazia vence. `missing_lcsc` no retorno diz quantas linhas ficaram sem código: a JLCPCB rejeita SMT assembly sem ele.
Gera o CPL (posições de montagem) da JLCPCB a partir do PCB. Colunas: `Designator,Mid X,Mid Y,Rotation,Layer`. Aplica a correção de rotação por encapsulamento (SOT-23, DFN, QFN...) usando a tabela baixada por jlcpcb_fetch_rotations. Se a tabela não estiver em cache, o CPL sai SEM correção nenhuma e o retorno vem com `warning` explícito — rode jlcpcb_fetch_rotations antes de mandar para a fábrica. `corrections_applied` no retorno é o antes/depois por designator, para auditoria.
Output schemas not formally documented. Tools return structured dicts (e.g., {error}, {outdir}, {path}, {version}, {profiles}, {rules}) but no JSON Schema definitions provided. LLMs cannot plan downstream tool calls or validate response structure.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint). Tools clearly marked READ_ONLY vs WRITE in metadata but not exposed via MCP schema. Agents cannot distinguish safe from destructive operations without reading descriptions.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 59 | 2026-07-28+ | v2 |
Gera Gerber + Excellon e empacota no zip de upload da JLCPCB. Não inclui BOM/CPL — use jlcpcb_export_bom e jlcpcb_export_cpl.
Baixa a tabela de correção de rotação de footprint para o cache local. Fonte: matthewlai/JLCKicadTools (GPL-3.0), não embarcada neste repo MIT — ver docs/rotacoes-cpl.md. Fica em `$XDG_CACHE_HOME/mcp-kicad/` (ou `~/.cache/mcp-kicad/`). `force=True` rebaixa mesmo se já houver cache. Rode antes de jlcpcb_export_cpl para que a correção seja aplicada.
Perfis de design rules JLCPCB disponíveis, com o que cada um assume.
Conteúdo de um perfil, sem escrever nada. Para inspecionar antes de aplicar.
Versão do KiCad que o servidor está usando, via kicad-cli. Primeira coisa a chamar quando algo não funciona: confirma que o binário foi encontrado e qual instalação está em uso.
Roda DRC no .kicad_pcb e devolve o relatório JSON do KiCad. Por padrão só erros. `all_severities=True` inclui warnings e exclusões. Usa as custom rules do projeto (.kicad_dru) — aplique um perfil com jlcpcb_apply_rules antes, se quiser validar contra a fábrica.
Exporta arquivos de furação (Excellon) do .kicad_pcb.
Exporta Gerbers do .kicad_pcb para um diretório.
Roda ERC no .kicad_sch e devolve o relatório JSON do KiCad.
Exporta BOM do esquemático em CSV. Formato genérico do KiCad, não o layout de colunas da JLCPCB.
Exporta netlist do esquemático.
Inconsistent output field naming. Tools return {outdir}, {path}, {version}, {profiles}, {rules}, {error}, no consistent pattern. Forces LLM to parse varied response shapes and increases hallucination risk when chaining tools.
jlcpcb_apply_rules profile parameter lacks enum constraint. Accepts string but valid profiles (2layer, 4layer, 6layer, etc.) not declared in schema. LLM must infer valid values from description or jlcpcb_list_profiles call.
Error handling lacks recovery guidance. _guard wrapper converts exceptions to {error: str} but does not classify errors (retryable, user-fixable, fatal) or suggest next steps. E.g., 'File not found' does not suggest checking path or listing directory.