Perfboard Designer
by perfboarddesigner.com · remote · local (npm) · no sign-in to list tools · v0.1.0 · published by com.perfboarddesigner
Design perfboard and stripboard layouts, check the wiring and get a link to open them in the editor.
12 tools: 1 can delete or cancel things, 1 do something that can't be undone, 5 change things and 5 only read.
Scanned Oct 21, 2026
- Deletes or cancels1Claude Code: deny: see these tools
- Can't be undone1Claude Code: ask: see these tools
- Changes things5Claude Code: ask: see these tools
- Only reads5Claude Code: allow: see these tools
6 checks matched something in the tool definitions. No finding is not a safety guarantee. How the checks work.
claude mcp add --transport http perfboarddesigner https://mcp.perfboarddesigner.com/mcpFindings
Matches of fixed checks, with the text they matched.
- Warnnew_project
The description contains "every other tool", wording about other tools or servers.
What this check looks forMatched text
description: "...edit_project, and pass the projectId to every other tool instead of the whole file."
- Warnvalidate_project
The description contains "every other tool", wording about other tools or servers.
What this check looks forMatched text
description: "...the reply's projectId stands for it in every other tool."
- Warnvalidate_project
The server marks "validate_project" as not read-only (readOnlyHint: false), and its words say it reads.
What this check looks forMatched text
annotations: {"readOnlyHint":false,"destructiveHint":false,"openWorldHint":false}; The name "validate_project" says "validate": a word for reading.
- Warnget_nets
The server marks "get_nets" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"openWorldHint":false}; The name "get_nets" says "get": a word for reading.
- Warnrender_board
The server marks "render_board" read-only (readOnlyHint: true), and its own name, description or input give the class "irreversible".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"openWorldHint":false}; The input addresses people (input.area.to): what it sends cannot be taken back.
- Warnread_share_link
The server marks "read_share_link" as not read-only (readOnlyHint: false), and its words say it reads.
What this check looks forMatched text
annotations: {"readOnlyHint":false,"destructiveHint":false,"openWorldHint":true}; The name "read_share_link" says "read": a word for reading.
Tools
Open a tool for its reasons and full description. Descriptions are the publisher's own words, shown as they are.
12 tools
Deletes or cancels 1Claude Code: deny
edit_projectChanges a project kept here, by a list of ops applied in order: add_part, update_part (move, turn, change value or ref), remove_parts, add_wire (from/to, or a `path` of holes made …No findings
Why it is in this group
- The name "edit_project" says "edit": a word for a change.
- The server marks it destructive (destructiveHint: true).
Description, as the server wrote it Changes a project kept here, by a list of ops applied in order: add_part, update_part (move, turn, change value or ref), remove_parts, add_wire (from/to, or a `path` of holes made into one wire per leg), update_wire, remove_wires, set_board, add_cuts / remove_cuts (stripboard), set_pad (a note on a hole). If any op can't be done, none are. Returns what changed, where the pins of added or moved parts landed, and the board checked as validate_project does (with any expectNets remembered for it); when it has no errors, also its nets. get_project returns the whole file. The goal is a board that's right, looks neat and is easy to solder, not just the shortest wires: parts in tidy rows near what they connect to, connectors at the edges, straight wires with few corners and no crossing you can avoid, none over a part's body. Before giving the user the link, look at it (render_board with format "png"), rework what's messy and check it again.
Annotations the server declares
- readOnlyHint: false
- destructiveHint: true
- idempotentHint: false
- openWorldHint: false
Can't be undone 1Claude Code: ask
render_boardDraws the board as text, one cell per hole with column and row numbers: each part's pins by a key letter and pin number (a1, a2...), holes under a part's body, wire ends, the holes…1 finding
Why it is in this group
- The input addresses people (input.area.to): what it sends cannot be taken back.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
Findings
- Warn
The server marks "render_board" read-only (readOnlyHint: true), and its own name, description or input give the class "irreversible".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"openWorldHint":false}; The input addresses people (input.area.to): what it sends cannot be taken back.
Description, as the server wrote it Draws the board as text, one cell per hole with column and row numbers: each part's pins by a key letter and pin number (a1, a2...), holes under a part's body, wire ends, the holes a wire runs over without joining them, strip cuts and holes with notes. Below it, which part each key is and every wire with its ends and net. Use it to see where there's free space and how wires run before placing parts or routing more. With format "png", a picture of the board as the editor draws it instead, to see how it looks: parts' bodies and where they reach, labels, wire colours. To show the user the board, use show_board.
Annotations the server declares
- readOnlyHint: true
- openWorldHint: false
Changes things 5Claude Code: ask
get_netsWhich pins the board connects: every net with its name (from its pins, e.g.1 finding
Why it is in this group
- The name "get_nets" says "get": a word for reading.
- The description's first verb is "pin": a word for a change.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
Findings
- Warn
The server marks "get_nets" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"openWorldHint":false}; The name "get_nets" says "get": a word for reading.
Description, as the server wrote it Which pins the board connects: every net with its name (from its pins, e.g. GND), its pins ("U1.8 VCC" for a chip's pin, "D1.K" or "C1.+" for a polarized lead, "R1.1" otherwise) and the wires on it (indexes into wires). Also pins connected to nothing, wires that connect no pins, junctions (holes where three or more things are joined) and crossings (where a wire goes over another wire or over a hole without joining it). Wires are insulated jumpers: a wire joins only the holes at its two ends, so crossings are information, not connections or shorts. On a stripboard the strips connect too.
Annotations the server declares
- readOnlyHint: true
- openWorldHint: false
new_projectStarts a project kept here under a projectId: a blank board, or one of the example projects (perfboard://examples/...) to copy from.1 finding
Why it is in this group
- The description's first verb is "start": a word for a change.
Findings
- Warn
The description contains "every other tool", wording about other tools or servers.
What this check looks forMatched text
description: "...edit_project, and pass the projectId to every other tool instead of the whole file."
Description, as the server wrote it Starts a project kept here under a projectId: a blank board, or one of the example projects (perfboard://examples/...) to copy from. Returns the projectId and the project file. Then add parts and wires with edit_project, and pass the projectId to every other tool instead of the whole file.
Annotations the server declares
- readOnlyHint: false
- destructiveHint: false
- idempotentHint: false
- openWorldHint: false
validate_projectChecks a project file and lists every problem with where it is: entries the editor would leave out, unknown parts, pins off the board, two parts' pins or leads in one hole, overlap…2 findings
Why it is in this group
- The name "validate_project" says "validate": a word for reading.
- The server marks it as not read-only (readOnlyHint: false).
Findings
- Warn
The description contains "every other tool", wording about other tools or servers.
What this check looks forMatched text
description: "...the reply's projectId stands for it in every other tool."
- Warn
The server marks "validate_project" as not read-only (readOnlyHint: false), and its words say it reads.
What this check looks forMatched text
annotations: {"readOnlyHint":false,"destructiveHint":false,"openWorldHint":false}; The name "validate_project" says "validate": a word for reading.
Description, as the server wrote it Checks a project file and lists every problem with where it is: entries the editor would leave out, unknown parts, pins off the board, two parts' pins or leads in one hole, overlapping parts, wires that connect nothing (a loose end, or no pins on their net), duplicate wires, a two-lead part with both leads on one net (shorted out), a wire passing over a pin or lead without ending there (so not joined to it), IC pins and two-lead parts' leads connected to nothing, supply rails shorted together, and on a stripboard, pins shorted by a strip or sitting in a cut hole. With expectNets, every connection missing from the board or extra on it is an error. Wires crossing each other are fine (insulated jumpers) and only listed in notes. Fix all errors before making a link. A project sent whole is kept here: the reply's projectId stands for it in every other tool.
Annotations the server declares
- readOnlyHint: false
- destructiveHint: false
- openWorldHint: false
Only reads 5Claude Code: allow
get_partEverything needed to place parts: for each, which project file list it goes in, its pins (offsets from pin 1 at rotation 0) and pin labels, polarity, value unit, holes its body cov…No findings
Why it is in this group
- The name "get_part" says "get": a word for reading.
Description, as the server wrote it Everything needed to place parts: for each, which project file list it goes in, its pins (offsets from pin 1 at rotation 0) and pin labels, polarity, value unit, holes its body covers, and an example entry. Ask for every part you use in one call with `ids`.
Annotations the server declares
- readOnlyHint: true
- openWorldHint: false
get_pin_positionsWhere every placed part's pins land, as [column, row] holes, with pin numbers and labels (e.g.No findings
Why it is in this group
- The name "get_pin_positions" says "get": a word for reading.
Description, as the server wrote it Where every placed part's pins land, as [column, row] holes, with pin numbers and labels (e.g. U1 pin 8 VCC), after rotation, plus holes a part's body covers. Use it to route wires to the right holes. The project file doesn't store these: they follow from each part's anchor, rotation and footprint.
Annotations the server declares
- readOnlyHint: true
- openWorldHint: false
get_projectThe whole project file of a project kept here, as the editor would save it (version 3, or 4 once a wire bends), one entry per line.No findings
Why it is in this group
- The name "get_project" says "get": a word for reading.
Description, as the server wrote it The whole project file of a project kept here, as the editor would save it (version 3, or 4 once a wire bends), one entry per line.
Annotations the server declares
- readOnlyHint: true
- openWorldHint: false
list_partsLists the parts a project can place.No findings
Why it is in this group
- The name "list_parts" says "list": a word for reading.
Description, as the server wrote it Lists the parts a project can place. Without a query: every part, grouped by category, as its id with its name and pin count; call it this way once to see what there is. With a query: the parts whose id, name, category or keywords contain all its words, or the closest ones when none do. Each part's `id` is its definitionId in the project file; use get_part for its pins and how to place it.
Annotations the server declares
- readOnlyHint: true
- openWorldHint: false
show_boardShows the user a picture of the board right in the conversation, as the editor draws it, with a button that opens it in Perfboard Designer.No findings
Why it is in this group
- The name "show_board" says "show": a word for reading.
Description, as the server wrote it Shows the user a picture of the board right in the conversation, as the editor draws it, with a button that opens it in Perfboard Designer. Only in clients that show MCP Apps (e.g. Claude, ChatGPT); elsewhere the user sees nothing, so give them make_share_link's link too. The picture goes to the user, not to you: to look at the board yourself, use render_board.
Annotations the server declares
- readOnlyHint: true
- openWorldHint: false
This is not a safety rating, and no finding is not a safety guarantee. The groups and findings come from fixed checks of the tool definitions the server returned on the date shown, not from its code or what it does when called. How the checks work.
Install
Pinned to version 0.1.0. Values in angle brackets are yours to fill in.
claude mcp add --transport http perfboarddesigner https://mcp.perfboarddesigner.com/mcpRun in a terminal.
Claude Code permissions
Allow the reads, ask before a change, deny the deletes. Paste into .claude/settings.json.
{
"permissions": {
"allow": [
"mcp__perfboarddesigner__list_parts",
"mcp__perfboarddesigner__get_part",
"mcp__perfboarddesigner__get_project",
"mcp__perfboarddesigner__get_pin_positions",
"mcp__perfboarddesigner__show_board"
],
"ask": [
"mcp__perfboarddesigner__new_project",
"mcp__perfboarddesigner__validate_project",
"mcp__perfboarddesigner__get_nets",
"mcp__perfboarddesigner__render_board",
"mcp__perfboarddesigner__make_share_link",
"mcp__perfboarddesigner__read_share_link"
],
"deny": [
"mcp__perfboarddesigner__edit_project"
]
}
}Tools that only read are allowed, tools that change things ask first, tools that delete or cancel are denied. It assumes the server is installed as perfboarddesigner. Review it before you use it.