schematic-mcp
schematic-mcp
MCP를 통한 AI 에이전트용 하드웨어 회로도 컨텍스트.
schematic-mcp는 MCP 호환 에이전트가 하드웨어 회로도를 스크린샷이나 긴 텍스트 블롭으로 취급하는 대신 구조화된 전기 데이터로 검사할 수 있게 해줍니다.
상태: V0.1 / 알파. 첫 번째 어댑터는 최신 KiCad
.kicad_sch파일을 대상으로 합니다.
이 프로젝트가 존재하는 이유
펌웨어를 작성하는 AI 코딩 에이전트는 종종 다음과 같은 질문에 대한 답이 필요합니다:
어떤 ESP32 핀이
SENSOR_OUT에 연결되어 있나요?U4.GPIO12에는 무엇이 연결되어 있나요?이 I2C 넷을 공유하는 장치는 무엇인가요?
MCU의 모든 핀과 해석된 넷은 무엇인가요?
펌웨어가 가정하는 GPIO 맵이 실제로 회로도와 일치하나요?
이 서버는 EDA 파일을 결정론적으로 파싱하고, 표준 컴포넌트/핀/넷 모델을 구축하며, 해당 모델을 MCP 도구와 리소스를 통해 노출합니다.
설계 원칙은 보수적입니다. 연결성이 확실하게 해석될 수 없는 경우 전기적 연결을 임의로 만들지 않고 경고를 표시합니다.
설계 초점
schematic-mcp는 의도적으로 파일 기반 하드웨어 컨텍스트 계층이며 범용 EDA GUI 자동화 서버가 아닙니다. 일반적인 KiCad 읽기/쿼리 워크플로우에는 실행 중인 KiCad 애플리케이션이 필요하지 않습니다. EDA별 어댑터는 표준 전기 그래프를 생성하는 반면, 에이전트용 MCP 계약은 형식 중립적으로 유지됩니다.
이를 통해 이 프로젝트는 편집기/IPC 자동화를 보완합니다. 편집기 도구는 대화형 설계 변경에 유용하지만, schematic-mcp는 코딩 에이전트, CI 시스템 및 향후 크로스 EDA 어댑터가 사용할 수 있는 결정론적 하드웨어 사실에 중점을 둡니다. 펌웨어 ↔ 회로도 검증이 첫 번째 구체적인 사용 사례입니다.
프로젝트 경계와 에코시스템 관점은 docs/project-positioning.md를 참조하세요.
Related MCP server: KiCad MCP Server
V0.1 기능
최신 KiCad
.kicad_schS-표현식 파일 파싱컴포넌트, 참조자, 값 및 라이브러리 ID 읽기
라이브러리 핀 지오메트리를 회로도 좌표로 해석
다중 유닛 심볼에 대해 활성 KiCad 유닛으로 핀 선택
와이어, 레이블 및 접점에서 연결성 구축
명명된 넷과 익명 넷 해석
단일 컴포넌트 또는 핀 검사
동일한 전기 넷의 모든 엔드포인트로 핀 추적
간결한 MCU 핀 맵 생성
펌웨어 핀 기대치를 실제 핀 번호 또는 기호 핀 이름으로 회로도 넷과 비교
현재 표준 모델을 MCP 리소스로 노출
SCHEMATIC_MCP_ROOT또는--root로 파일시스템 액세스 제한stdio 또는 Streamable HTTP를 통한 로컬 실행
GitHub Actions에서 자동화된 파서, 그래프 및 파일시스템 경계 테스트
MCP 도구
도구 | 용도 |
|
|
| 개수, 형식 정보 및 파서 경고 반환 |
| 컴포넌트 검색 |
| 컴포넌트 속성 및 핀 반환 |
| 핀 하나와 해당 넷 반환 |
| 해석된 넷 검색 |
| 넷의 레이블 및 엔드포인트 반환 |
| 전기 넷 전체에서 핀 하나 추적 |
| 간결한 핀-넷 맵 반환 |
| 펌웨어 핀 기대치를 해석된 회로도 넷과 비교 |
리소스:
schematic://current/summaryschematic://current/model
GitHub에서 설치
Python 3.10+이 필요합니다. 첫 번째 패키지 레지스트리 릴리스가 게시될 때까지 현재 main 브랜치를 GitHub에서 직접 설치할 수 있습니다:
python -m pip install "git+https://github.com/vonpanda/schematic-mcp.git"
schematic-mcp --help재현 가능한 프로덕션 사용을 위해 고정되지 않은 개발 브랜치를 추적하는 대신 릴리스 태그나 커밋을 고정하세요. 첫 번째 패키지 릴리스는 이슈 #8에서 추적됩니다.
개발용 설치
git clone https://github.com/vonpanda/schematic-mcp.git
cd schematic-mcp
python -m venv .venv
source .venv/bin/activate
pip install -e ".[dev]"
pytest이 프로젝트는 공식 MCP Python SDK의 안정적인 v2 라인을 사용합니다.
실행
로컬 stdio
schematic-mcp또는:
python -m schematic_mcp환경 변수를 설정하지 않고도 읽기 가능한 파일을 제한할 수 있습니다:
schematic-mcp --root /absolute/path/to/your/hardware-projects포함된 픽스처 사용해 보기
이 저장소에는 데모 및 테스트에 안전한 소규모 합성 KiCad 회로도가 포함되어 있습니다:
schematic-mcp --root "$PWD/examples"그런 다음 MCP 호환 클라이언트가 다음을 호출할 수 있습니다:
open_schematic("minimal.kicad_sch")
schematic_summary()
list_components()
trace_signal("U1", "1")이 예제는 U1.1을 SENSOR_OUT으로 해석하고 U2.1을 다른 엔드포인트로 표시해야 합니다. examples/README.md를 참조하세요.
펌웨어 ↔ 회로도 검증 데모
두 번째 합성 예제는 코딩 에이전트가 소스 코드만으로는 안전하게 감지할 수 없는 하드웨어 버그를 보여줍니다. 펌웨어는 회로도가 올바른 전기 매핑을 유지하는 동안 의도적으로 SENSOR_INT 및 LED_STATUS GPIO 할당을 바꿉니다.
결정론적 로컬 데모 실행:
python examples/demo_firmware_validation.pyexamples/firmware_with_pin_bug.c에서 간단한 GPIO 계약을 추출하고 examples/esp32_firmware_validation.kicad_sch를 파싱하여 두 개의 일치와 두 개의 불일치를 보고합니다.
MCP를 통한 동일한 비교:
open_schematic("esp32_firmware_validation.kicad_sch")
validate_pinmap(
"U1",
{
"GPIO8": "I2C_SDA",
"GPIO9": "I2C_SCL",
"GPIO12": "LED_STATUS",
"GPIO13": "SENSOR_INT"
}
)전체 에이전트 워크플로우와 예상 결과는 docs/firmware-validation-demo.md를 참조하세요.
Streamable HTTP
schematic-mcp --transport streamable-http --host 127.0.0.1 --port 8000MCP 엔드포인트는 http://127.0.0.1:8000/mcp에서 사용할 수 있습니다. 기본 호스트는 루프백 전용입니다. 인증되지 않은 개발 서버를 공개 인터넷에 직접 노출하지 마세요.
MCP Inspector의 경우:
mcp dev src/schematic_mcp/server.pyMCP 클라이언트 구성 예시
{
"mcpServers": {
"schematic": {
"command": "uv",
"args": ["--directory", "/absolute/path/to/schematic-mcp", "run", "schematic-mcp"],
"env": {"SCHEMATIC_MCP_ROOT": "/absolute/path/to/your/hardware-projects"}
}
}
}그런 다음 에이전트가 다음을 호출할 수 있습니다:
open_schematic("board/main.kicad_sch")
get_component("U4")
get_mcu_pinmap("U4")
trace_signal("U4", "12")파일시스템 보안
기본적으로 로컬 서버는 해당 프로세스가 액세스할 수 있는 경로를 열 수 있습니다. 완전히 신뢰할 수 없는 에이전트의 경우 SCHEMATIC_MCP_ROOT를 설정하거나 허용된 프로젝트 디렉토리로 --root를 전달하세요. 허용된 루트 외부로 해석되는 경로를 포함하여 외부 파일을 열려는 시도는 거부됩니다.
취약점 보고 및 배포 지침은 SECURITY.md를 참조하세요.
현재 제한 사항
V0.1은 의도적으로 작습니다. 계층적 하위 시트는 발견되지만 아직 단일 시트 간 그래프로 재귀적으로 병합되지는 않습니다. 특이한 다중 유닛/라이브러리 구조와 타사 KiCad 내보내기는 여전히 더 광범위한 호환성 픽스처가 필요합니다. 버스 의미 체계는 아직 재구성되지 않았습니다. PDF, Altium 및 EasyEDA는 아직 구현되지 않았습니다.
trace_signal은 해석된 넷 연결성만 따릅니다. IC 내부의 개별 핀이 전기적으로 연결되어 있다고 가정하지 않습니다. validate_pinmap은 명시적 예상 매핑을 비교합니다. 임의의 펌웨어 프레임워크에서 자동 추출하는 것은 아직 핵심 파서의 일부가 아닙니다.
로드맵
V0.2 — 계층적 KiCad 프로젝트 그래프 및 더 풍부한 버스/넷 의미 체계
V0.3 — 신뢰도 메타데이터가 포함된 PDF/벡터 회로도 어댑터
V0.4 — Altium 및 EasyEDA 어댑터
V0.5 — 데이터시트 컨텍스트 및 전기 규칙 추론
V0.6 — 프레임워크별 펌웨어 추출(ESP-IDF/Arduino/Zephyr) 및 CI 핀 계약 검사
이후 — PCB, BOM, Gerber 및 제조 컨텍스트
장기 목표는 공급업체 중립적인 AI 에이전트용 하드웨어 컨텍스트 서버입니다.
기여
하드웨어 엔지니어, 임베디드 개발자 및 EDA 사용자는 최소한의 호환성 픽스처, 파서 엣지 케이스, 테스트 및 실제 에이전트 워크플로우를 기여함으로써 가장 큰 도움을 줄 수 있습니다.
CONTRIBUTING.md부터 시작하세요. 코딩 에이전트와 유지관리자는 아키텍처 불변성, 안전 제약 조건 및 예상 개발 루프에 대해 AGENTS.md도 읽어야 합니다. 명시적 허가 없이 독점 고객 회로도를 기여하지 마세요.
유용한 유지관리자/프로젝트 문서:
AGENTS.md— 코딩 에이전트 및 유지관리자 규칙docs/project-positioning.md— 프로젝트 경계 및 에코시스템 가치docs/architecture.md— 파서/모델/MCP 아키텍처docs/firmware-validation-demo.md— 펌웨어 ↔ 회로도 불일치 데모examples/README.md— 실행 가능한 합성 픽스처CHANGELOG.md— 릴리스 기록SECURITY.md— 보안 정책docs/oss-readiness.md— 공개 채택 및 OSS 프로그램 준비 체크리스트
라이선스 및 저작자 표시
Apache License 2.0에 따라 라이선스가 부여됩니다. 상업적 사용, 수정 및 재배포는 라이선스 조건에 따라 허용됩니다. 재배포는 Apache-2.0에서 요구하는 대로 해당 저작권, 라이선스 및 NOTICE 정보를 보존해야 합니다.
원래 SYANKOR에서 개발되었습니다.
Available Tools
10 toolsget_componentB
Get one component including properties, pins, and resolved net names.
| Name | Required | Description | Default |
|---|---|---|---|
| reference | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden. It discloses what the tool returns (properties, pins, net names) but does not explicitly state whether the operation is read-only, possible error conditions, or how missing references are handled. The behavior is largely inferable from 'Get', but not fully transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, concise sentence with no wasted words. It strikes the right balance of specificity and brevity for a simple get tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values are covered. However, the description lacks parameter semantics and usage guidance, leaving minor gaps. For a one-parameter tool, this is adequate but not complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% and the description does not clarify the 'reference' parameter beyond its name. The agent must guess it refers to a component reference designator; the description provides no additional meaning that the schema's type string does not already give.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Get one component') and the specific contents (properties, pins, resolved net names), which distinguishes it from siblings like list_components (which returns multiple) and get_pin/get_net (which target separate resources).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool vs. alternatives. It does not mention that list_components should be used for multiple components, or that get_pin/get_net are for individual pins/nets. The usage context is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_mcu_pinmapC
Return a compact pin-to-net map for an MCU or any multi-pin component.
| Name | Required | Description | Default |
|---|---|---|---|
| reference | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure. It states the core action ('Return a compact pin-to-net map') but does not mention side effects, error cases, or what 'compact' implies about the output. It does not address whether the operation is read-only (likely) or what happens if the reference is invalid or not found.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, densely worded sentence that states the key action and target resource without any filler. It is front-loaded with the primary outcome and appropriately brief for a simple one-parameter tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool is simple (one parameter), the description is still incomplete. It lacks usage context (e.g., current schematic dependency) and fails to clarify parameter semantics. While an output schema exists (which may cover return format), the description does not address when to invoke this tool among siblings, leaving the agent with ambiguity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% and the description does not explain the 'reference' parameter beyond the tool's context. It implicitly suggests the parameter is a component reference designator, but it gives no format, example, or clarification about how to obtain it. The description adds minimal value over the parameter name.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific verb ('Return') and resource ('pin-to-net map for an MCU or any multi-pin component'). It distinguishes the tool's scope from generic component details, though it doesn't explicitly name alternative sibling tools like get_pin or get_component, so it lacks explicit differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It does not mention conditions, prerequisites (e.g., that a schematic must be open), or when to prefer other sibling tools like trace_signal or validate_pinmap. Only the implicit behavior is stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_netB
Get a net by exact name, including labels and all connected component pins.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the full burden of behavioral disclosure. It states the operation (get) and the result contents, but does not disclose whether the tool is read-only, how it handles missing nets, or any error conditions. This is a significant gap for a tool with zero annotation coverage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no filler. Every element (verb, resource, exactness, return contents) serves a purpose. It is exemplarily concise and structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given that an output schema exists, return values are adequately covered elsewhere. However, the description lacks usage guidelines, error-handling details, and any indication of read-only behavior. Since there are nine sibling tools, the absence of routing context makes this incomplete, even for a simple one-parameter tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate for the single 'name' parameter. It adds that the name must be 'exact', which is minimal information. It does not mention case-sensitivity, format, wildcards, or other constraints beyond exactness. The description adds little value over the schema's type definition.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Get'), a resource ('net'), and the exact matching requirement ('by exact name'), while also specifying the returned content ('labels and all connected component pins'). This clearly distinguishes it from sibling tools like list_nets (which lists all nets) and trace_signal (which traces a signal path).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no explicit guidance on when to use this tool versus alternatives. It implies the need for an exact net name, but does not mention when to prefer list_nets for enumeration or trace_signal for signal flow. No when/when-not or alternative references are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_pinB
Get one component pin and its resolved electrical net.
| Name | Required | Description | Default |
|---|---|---|---|
| reference | Yes | ||
| pin_number | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description must carry the full burden of behavioral disclosure. It states only the action 'Get' and the output, but does not explicitly confirm that it is read-only, describe side effects, or note any permissions or error behaviors. The description adds little beyond the basic operation itself.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence of ten words, front-loaded with the verb and object. Every word contributes to the core meaning, with no redundant or vague phrasing. It is appropriately concise for a straightforward get operation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Although an output schema exists (covering return values), the description does not explain the domain-specific term 'resolved electrical net' or provide any parameter context. It also omits edge-case behavior or error conditions. For a tool with two undocumented parameters and no annotations, the description is not complete enough for reliable invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must explain the meaning of 'reference' and 'pin_number'. The description does not mention either parameter, leaving the agent to infer their semantics solely from the parameter names. This is a significant gap given the lack of schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action 'Get' and the specific resource 'one component pin', and explains the result includes its 'resolved electrical net'. This distinguishes it from siblings like list_components or get_component, which focus on components, and list_nets/get_net, which focus on nets. The purpose is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance is given on when to use this tool versus alternatives. The tool name and description imply it is for fetching a single pin's net, but there is no mention of when not to use it or comparison to trace_signal or get_net. Usage is inferred from context rather than explicitly stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_componentsB
List schematic components, optionally filtering by reference, value, or library id.
| Name | Required | Description | Default |
|---|---|---|---|
| query | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full burden. It discloses a read-only listing action but does not mention pagination, sorting, result limits, error behavior, or the structure of the returned list. The description stops at the surface action without revealing any additional behavioral traits an agent would need to anticipate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, lean sentence. It leads with the core action and resource, then appends the filtering options. Every word earns its place; there is no fluff or repetition. Excellent conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple (one optional parameter) and an output schema exists (so return structure is defined elsewhere). The description covers the primary function and filter names, but it omits how the query string should be formatted and what happens when the query is empty (does it return all components?). This leaves ambiguity for an agent trying to construct a valid call, so the description is not fully complete despite the existing output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has a single parameter 'query' with zero description (0% coverage). The description partially compensates by stating that filtering can be done by reference, value, or library id, which gives meaning to the query parameter. However, it does not explain the query syntax (e.g., how to combine filters, exact vs. substring match) or the default behavior when query is empty. It adds some semantic value but not enough to fully bridge the schema gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'List schematic components', and adds optional filter dimensions (reference, value, library id). It clearly distinguishes this list operation from siblings like get_component (which retrieves a single component) or list_nets (which lists nets). The purpose is unambiguous and easy to act on.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives. The description never mentions 'use this to list all components' or 'use get_component for a single component'. Agents are left to infer usage from the name and sibling context, which is insufficient for optimal tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_netsC
List resolved nets, optionally filtering by net name or connected pin.
| Name | Required | Description | Default |
|---|---|---|---|
| query | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure, but it never states that this is a read-only operation, what 'resolved' means, whether results are paginated, or what the response structure is. The output schema exists but its content isn't disclosed here, so the agent is left without context on side effects or safety.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, concise sentence with no wasted words. The key action and optional filtering are presented upfront. Structure is efficient, though it could benefit from one more sentence on usage guidance.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple (one optional param) and has an output schema, so the description needn't explain return values. However, given that no annotations exist, the lack of any statement about read-only nature or how it relates to sibling tools leaves the context incomplete for guiding an agent to correct usage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, but the description adds meaning to the single 'query' parameter by stating it can filter 'by net name or connected pin.' However, it doesn't specify the exact format (e.g., whether it's a substring, exact match, or how to combine name+pin), so it only partially compensates for the coverage gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear verb-resource pair: 'List resolved nets' with optional filtering. This distinguishes it from sibling get_net (which implies fetching a single net), though it doesn't explicitly state the difference. The filtering clause adds specificity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool vs alternatives like get_net or trace_signal. The description implies a listing/filtering role but doesn't state conditions or exclusions. An agent must infer when list_nets is preferred over other net-related tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
open_schematicC
Open a local KiCad .kicad_sch file and build its canonical circuit graph.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It mentions building a graph but does not disclose side effects (e.g., whether the file is read-only, whether state is modified, error behavior for missing files). The output schema exists, but behavioral traits beyond reading are omitted, making this insufficient for a load-operation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, concise sentence that front-loads the action and outcome. There is zero redundancy, and every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's role as an apparent entry point to a suite of schematic tools, the description lacks critical context: it does not say it must be used first, nor does it mention prerequisites or error cases. The output schema covers return structure, but the operational context (e.g., needing to open a file before other tools) is absent. This is incomplete for a tool of this complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It adds that 'path' refers to a local KiCad .kicad_sch file, giving more meaning than the bare parameter name. However, it lacks constraints like absolute path requirement, file existence, or permission needs, so it only partially covers the parameter semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific verb ('Open') and resource (local KiCad .kicad_sch file) with a defined outcome (build its canonical circuit graph). This distinguishes it from sibling tools that operate on an already-loaded schematic, though it does not explicitly name alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus siblings. It does not state that it should be called before other schematic tools, nor any conditions or exclusions. The role as an entry point is implied but not articulated, leaving the agent to infer the workflow.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
schematic_summaryB
Return summary information for the currently loaded schematic.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It only states that it returns summary information, without mentioning what happens if no schematic is loaded, whether it is a read-only operation, or any error conditions. This is a significant gap for an operation that depends on prior state.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence with no fluff. It front-loads the action ('Return') and the resource ('summary information') immediately, making it easy to parse. It is appropriately sized for a simple no-argument tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the low complexity, a short description is acceptable. The output schema (present) covers return value details. The description mentions the 'current schematic' which implies a prerequisite, though it does not explicitly state what happens if none is loaded. This is a minor gap for an otherwise simple tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so per the baseline rule it earns a 4. The description adds context about the 'currently loaded schematic' which hints at a state dependency rather than input parameters. It does not need to explain any parameter meaning since there are none.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Return' and the resource 'summary information for the currently loaded schematic.' It is specific enough to distinguish from sibling tools like list_components or get_component, though it does not explicitly name any alternative. The term 'summary' implies an overview, which is distinct from the detailed queries offered by siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no guidance on when to use this tool versus the sibling tools. It does not mention that it should be used to get a quick overview or that list_components etc. should be used for specifics. There is no mention of preconditions like needing a schematic loaded first, although 'currently loaded' implies it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
trace_signalB
Trace one pin to every other pin on the same resolved electrical net.
| Name | Required | Description | Default |
|---|---|---|---|
| reference | Yes | ||
| pin_number | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It only describes the basic operation without stating whether it is read-only, whether it requires specific privileges, or anything about side effects or failure modes. The term 'resolved' hints at some internal processing, but no further behavioral traits are disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no wasted words. It is appropriately concise for the core action, but the brevity comes at the cost of missing crucial parameter and usage details. Still, structure-wise it is efficient and to the point.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite having an output schema (which reduces the need to describe return values), the description is incomplete. It omits parameter semantics and usage guidance, which are essential for an agent to correctly invoke the tool. For a two-parameter tool with no schema descriptions, this is a significant gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the tool description must explain the parameters. It does not explain what 'reference' means (likely a component designator) or what 'pin_number' refers to. The description only repeats the concept of a pin without adding any semantic detail, leaving agents to guess the intended format or meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('trace') and resource ('one pin to every other pin on the same resolved electrical net'). This clearly distinguishes it from siblings like get_pin (returns a single pin) and get_net (returns net info), making the tool's purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly implies when to use the tool: when you need to identify all pins connected to the same net as a given pin. However, it does not explicitly mention when not to use it or name alternative tools, though the context is clear enough for an agent to infer the appropriate scenario.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
validate_pinmapC
Compare firmware pin expectations with schematic nets.
expected maps either physical pin numbers or unique symbolic pin names to
expected net labels, for example {"GPIO8": "I2C_SDA"}.
| Name | Required | Description | Default |
|---|---|---|---|
| expected | Yes | ||
| reference | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full responsibility for behavioral disclosure. It only states the comparison action, without revealing whether the operation is read-only, what happens on mismatch, or how the 'reference' parameter affects behavior. The example explains input format but not the operational semantics, leaving significant behavioral ambiguity.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise—two sentences—with the purpose front-loaded and a useful example included. There is no redundant content; every sentence contributes to understanding the tool's input format and purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite having an output schema, the description omits critical context. It doesn't explain what 'reference' refers to (likely a schematic or netlist identifier), what the output indicates (e.g., match/mismatch), or any necessary prerequisites. The example covers only the 'expected' parameter, leaving the tool incomplete for an agent attempting to use it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must document parameters. It does explain 'expected' with a concrete example, clarifying that it maps pin names/numbers to net labels. However, 'reference' is completely undefined, leaving half the parameters without any semantic explanation, which is a notable gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Compare firmware pin expectations with schematic nets.' It uses a specific verb ('compare') and identifies the resources involved, distinguishing it from siblings like 'get_mcu_pinmap' which retrieves data rather than validating it. The example further clarifies the input format for 'expected'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided about when to use this tool versus alternatives. The description does not mention that this is for validation or specify conditions under which it should be preferred over sibling tools like 'get_mcu_pinmap' or 'trace_signal'. There is no when-not guidance or mention of prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
10 tool updates
v0.1.0- First observed
get_component - First observed
get_mcu_pinmap - First observed
get_net - First observed
get_pin - First observed
list_components - First observed
list_nets - First observed
open_schematic - First observed
schematic_summary - First observed
trace_signal - First observed
validate_pinmap
TDQS
Scored across 10 tools
Each tool targets a distinct aspect: loading, summary, component listing/detail, pin detail, net listing/detail, signal tracing, pin mapping, and validation. No two tools have overlapping purposes, so an agent can unambiguously select the right one for a task.
Most tools follow a clear verb_noun pattern (open_schematic, list_components, get_component, etc.), but 'schematic_summary' is a noun phrase rather than a verb-led name, representing a minor deviation. Overall the pattern is predictable and readable.
With 10 tools, the set is well-scoped for a schematic analysis server. Each tool serves a distinct and necessary function, and the count is within the ideal range for a focused MCP server.
The tool surface covers the full read-only workflow: opening a schematic, obtaining summary info, querying components, pins, nets, tracing signal paths, generating pin maps, and validating against firmware expectations. No critical missing operations for the apparent domain.
Maintenance
Related MCP Connectors
Turn datasheets into source-backed JSON contracts, pinout matrices, and KiCad CAD for AI agents.
Design, route, check, review and export manufacturable PCBs from plain language; KiCad import.
Persistent memory, knowledge graph, task management and more for AI agents via MCP.
Hosted MCP server and Agent Skills for specs, engineering threads, and project memory.
Related MCP Servers
- AlicenseNot gradedqualityAmaintenanceThis MCP server enables AI agents to understand and analyze electrical schematics from Cadence and Altium for comprehensive design reviews through natural conversations.105 npm56Apache 2.0
- AlicenseBqualityAmaintenanceAn MCP server that enables AI assistants to analyze schematics, inspect PCBs, trace connections, validate designs, and generate embedded code for KiCad projects.39174MIT
- AlicenseAqualityCmaintenanceA read-only MCP server for AI agents to understand KiCad projects through progressive disclosure, providing compact summaries and drill-down tools for components, nets, traces, and ERC/DRC checks without blowing context budgets.71MIT
- FlicenseNot gradedqualityAmaintenanceAn MCP server that enables language models to design real KiCad electronic schematics from plain-language descriptions, placing parts, wiring nets, and running KiCad's electrical rules check to produce editable .kicad_sch files.3-