kicad:EasyEDA→KiCad 工程(Board1/Board2)、库、脚本与评审文档(IC 引脚、风扇、热、EDL 供电、布局规则)

Co-Authored-By: Claude Opus 5.5 <[email protected]>
这个提交包含在:
zhou yang
2026-10-04 19:24:42 +08:00
共同撰写人 Claude Opus 5.5
父节点 1d842cf45f
当前提交 bfe094a5d7
共修改 173 个文件,包含 401864 行新增和 0 行删除
+65
查看文件
@@ -0,0 +1,65 @@
"""Check the installed server over stdio without modifying design files."""
import asyncio
import json
import os
from pathlib import Path
import pcbnew
from mcp import ClientSession, StdioServerParameters
from mcp.client.stdio import stdio_client
ROOT = Path(__file__).resolve().parents[1]
PYTHON = Path('D:/kicad-mcp/.venv/Scripts/python.exe')
async def verify():
env = dict(os.environ)
env.update(
KICAD_CLI='D:/KiCad/bin/kicad-cli.exe',
KICAD_PROJECT_PATHS=str(ROOT),
PYTHONIOENCODING='utf-8',
PYTHONDONTWRITEBYTECODE='1',
)
parameters = StdioServerParameters(
command=str(PYTHON), args=['-B', '-m', 'kicad_mcp_server'],
cwd=str(ROOT), env=env,
)
async with stdio_client(parameters) as (read, write):
async with ClientSession(read, write) as session:
info = await session.initialize()
available = []
cursor = None
while True:
page = await session.list_tools(cursor=cursor)
available.extend(tool.name for tool in page.tools)
cursor = page.nextCursor
if not cursor:
break
required = {'list_schematic_components', 'run_erc', 'run_drc'}
if not required.issubset(available):
raise RuntimeError(f'Missing tools: {required - set(available)}')
resource = await session.read_resource('kicad://config')
configuration = json.loads(resource.contents[0].text)
if configuration['project_paths'] != [str(ROOT)]:
raise RuntimeError('Project search path was not applied')
schematic = ROOT / 'PhoneRail-Board1' / 'P1-INPUT.kicad_sch'
result = await session.call_tool(
'list_schematic_components', {'file_path': str(schematic)}
)
output = '\n'.join(getattr(part, 'text', '') for part in result.content)
if result.isError or 'Total:' not in output:
raise RuntimeError(f'Schematic read failed: {output}')
print(json.dumps({
'server': info.serverInfo.name,
'pcbnew': pcbnew.Version(),
'tool_count': len(available),
'project_paths': configuration['project_paths'],
'schematic': str(schematic),
'components': next(line for line in output.splitlines() if line.startswith('Total:')),
'status': 'PASS',
}, indent=2))
if __name__ == '__main__':
asyncio.run(asyncio.wait_for(verify(), timeout=60))