Perfboard Designer

com.perfboarddesigner由 perfboarddesigner.com 發布官方發布者v0.1.0更新於 Nov 1, 2026

Design perfboard and stripboard layouts, check the wiring and get a link to open them in the editor.

已驗證Streamable HTTP可網頁執行開發者工具媒體與設計

概覽

AI 產生的概覽

設計洞洞板與條板電路佈局:查詢零件、放置零件、佈線、檢查接線,並產生可在 Perfboard Designer 編輯器中開啟的分享連結。

可以做什麼
  • 搜尋並檢視零件目錄,包含腳位、標籤、極性與封裝
  • 建立空白或範例專案,並以批次操作編輯:新增、移動或移除零件、佈線與移除導線、設定板子、加入條板切口與孔位備註
  • 檢視佈局:旋轉後的腳位位置、網路及其腳位,以及文字或 PNG 形式的板面圖
  • 驗證專案並列出問題,例如腳位超出板面、零件重疊、懸空導線、電源軌短路與極性零件裝反
  • 產生內嵌專案的分享連結,可選擇以短 ID 儲存,並從連結讀回專案
  • 在支援 MCP Apps 的用戶端中直接顯示板面圖片
適用情境
適合讓助理在洞洞板或條板上安排電路、核對佈線是否符合預期網路表,或提供一個可在編輯器中開啟並調整的連結。適用於以文字描述佈局並分享連結即可的電子製作情境。
執行需求
可作為遠端 Streamable HTTP 端點使用,也可透過 npx 在本機執行 npm 套件 perfboard-designer-mcp,後者需要 Node.js 22 或更新版本。不需帳號或 API 金鑰。選用環境變數 PERFBOARD_EDITOR_URL、PERFBOARD_IMAGE_URL 與 PERFBOARD_PROJECTS_URL 分別控制連結開啟位置、板面圖片來源與短連結儲存位置。使用託管端點及圖片、儲存附加功能需要網路存取。
安裝前請注意
託管端點沒有登入機制,知道位址的人都能使用。儲存專案會把專案送到託管儲存服務,任何取得連結的人都能讀取該板;儲存的專案在一年未存取後刪除。本機執行時保留的專案只存在於行程記憶體中,行程結束即遺失。分享連結內嵌整個專案,應視為公開內容。工具會寫入與修改專案資料,分享前請檢查變更。

安裝

在 SourceWeft 中

  1. 開啟 儀表板中的 Perfboard Designer,將其新增到工作區。
  2. 為需要使用其工具的對話啟用該服務。

Web executable,透過 Streamable HTTP。 遠端服務在工作區中設定後即可從網頁執行環境執行。

交給代理程式安裝

把這段提示詞貼上到 Claude Code、Codex、Cursor 等代理程式,或 SourceWeft 對話中。代理程式會讀取該伺服器的安裝指南,先向你展示發布者、端點和登入方式,經你同意後再把它新增到你的客戶端。金鑰不會寫進任何命令。

閱讀 https://sourceweft.com/mcp/com.perfboarddesigner%2Fmcp/install.md,並按其中說明把這個 MCP 伺服器接入我的客戶端。修改任何設定之前,先告訴我它的發布者、端點和登入方式,等我確認。不要把 API 金鑰寫進命令或我會提交的檔案;問我金鑰應從哪裡取得。

檢視代理程式所依據的安裝指南

其他 MCP 客戶端

把它新增到你客戶端的 mcpServers 設定中。

{
  "mcpServers": {
    "perfboard-designer": {
      "type": "http",
      "url": "https://mcp.perfboarddesigner.com/mcp"
    }
  }
}

README

Perfboard Designer MCP server

An MCP server that lets an AI agent (Claude, or any MCP client) design perfboard and stripboard layouts for Perfboard Designer. The agent looks up parts, writes the board as a project file, checks it, and gives you a share link. Clicking the link opens the board in the editor, where you can look at it and change it.

"Lay out a 555 LED blinker on a small perfboard and send me the link."

It runs on your computer (stdio), needs no account and saves nothing to disk; or it can be hosted on Cloudflare Workers (below). While it runs it keeps the projects an agent is working on in memory, each under a projectId, so the agent sends a project at most once and then changes it with small edits. The project file stays the source of truth: get_project returns it, and every tool also takes a whole file instead of an id.

Setup

Node.js 22 or newer. It's on npm as perfboard-designer-mcp, which npx downloads the first time.

Claude Code:

bash
claude mcp add --scope user perfboard -- npx -y perfboard-designer-mcp

Claude Desktop (claude_desktop_config.json, Settings → Developer → Edit Config) and other clients that take a command:

json
{  "mcpServers": {    "perfboard": {      "command": "npx",      "args": ["-y", "perfboard-designer-mcp"]    }  }}

To run it from this repo instead, build it and use node /path/to/perfboard-designer/mcp/dist/server.js as the command:

bash
cd mcpnpm installnpm run build

Links open the public editor, https://perfboarddesigner.com/app/. To point them at another copy (a local dev server, say), set PERFBOARD_EDITOR_URL in the server's environment:

json
{  "mcpServers": {    "perfboard": {      "command": "npx",      "args": ["-y", "perfboard-designer-mcp"],      "env": {"PERFBOARD_EDITOR_URL": "http://localhost:3000/app/"}    }  }}

The server works on its own, without the hosted Worker. It only points at it for two extras, each set in the server's environment like PERFBOARD_EDITOR_URL, public unless set, and off to do without (agents are then not offered it):

SettingExtraDefault
PERFBOARD_IMAGE_URLmake_share_link's image, a picture of the board (render_board's PNGs are drawn here and need nothing)https://mcp.perfboarddesigner.com/render.svg
PERFBOARD_PROJECTS_URLmake_share_link's store: a short link to a stored project. Nothing is sent unless an agent askshttps://projects.perfboarddesigner.com

Point them at a local Worker with http://localhost:8787/render.svg and http://localhost:8787.

Tools

ToolWhat it does
list_partsLists the parts a project can place (153 today). Without a query, every part by category, one line each (its id, name and pin count). With words such as "capacitor" or "555", the parts matching all of them, or the closest ones when none do.
get_partParts in full, as many as you name in ids: which list each goes in, its pins and pin labels, polarity, value unit, holes its body covers, and an example entry to copy.
new_projectStarts a project kept in memory and returns its projectId: a blank perfboard or stripboard of the size you give, or a copy of an example (example: "555-led-blinker").
edit_projectChanges a kept project with a list of ops, all or none: add_part (by part id, with at, or from/to for two-lead parts; refs are numbered if left out; or a part of the agent's own: custom, pins anywhere or a catalog part's package via shape with its own pin names, or chip, a dual-row chip or dev board, placed again later by name), update_part (move, turn, change value or ref), remove_parts, add_wire (from/to, with via for the holes it bends at, or a path of holes made into one wire per leg; any end can be a pin by name, e.g. "U1.7" or "D1.K", for the hole it's in), update_wire (ends by hole or pin too, via to replace its bends), remove_wires, set_board, add_cuts/remove_cuts, set_pad (a note on a hole). Returns what changed, where the new or moved parts' pins landed, and the board checked as validate_project does; when it has no errors, also its nets.
get_projectThe whole project file of a kept project.
get_pin_positionsWhere every placed part's pins land on the board after rotation, e.g. U1 pin 8 (VCC) at [9, 3], so wires can be routed to the right holes.
render_boardDraws the board as text, one cell per hole with column and row numbers: pins by part key and number (a1), holes under a body, wire ends, holes a wire runs over without joining them, strip cuts and holes with notes, then which part each key is and every wire with its net. area draws only part of the board (needed above 6000 holes). format: "png" draws a picture instead, as the editor draws it (holes 50 px apart, scaled down to fit 1000 px; area crops it), for an agent to look at.
get_netsWhich pins the board connects: each net with its name (e.g. GND), its pins (U1.8 VCC for a chip pin, D1.K or C1.+ for a polarized lead, R1.1 otherwise) and its wires, plus pins connected to nothing, junctions (holes where three or more things join) and crossings (where a wire goes over another wire or a hole without joining it).
validate_projectLists every problem, with where it is: unreadable entries, 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), a wire passing over a pin without ending there, IC pins and two-lead parts' leads connected to nothing, supply rails shorted together (VCC with 5V is one rail, VCC with GND a short), LEDs, electrolytic capacitors and + and − pins in backwards or a diode conducting straight across the supply (judged by the rails: pins named like VCC, GND or 5V, battery holders' terminals and holes noted +9V), and on a stripboard, pins shorted by a strip or in a cut hole. Wires crossing are listed as notes, not problems. Pass expectNets (the netlist you meant, e.g. [["U1.8", "U1.4", "R1.1", "J1.1"], ["U1.2", "U1.6", "C1.+"]]) and every missing or extra connection is an error; for a kept project it's remembered, so edit_project and make_share_link check against it too ([] forgets it). A whole project sent here is kept, and the reply gives its projectId.
make_share_linkValidates the project (with expectNets, given or remembered) and returns the link that opens it, and image: the address of an SVG picture of the board, drawn as the editor draws it (served by the hosted Worker, below). It refuses a project with errors unless allowErrors is set. editorUrl points it at another copy of the editor, e.g. http://localhost:3000/app/; it defaults to PERFBOARD_EDITOR_URL. With store: true (or storeAs: "led-blinker", the id it'd like), it also stores the project (below) and returns stored: its id, a short link and its file and pictures. The self-contained link is made either way, and if storing fails, storeError says why.
show_boardShows the user a picture of the board right in the chat, as the editor draws it, with a button that opens it in the editor: an MCP App, for clients that show them (e.g. Claude, ChatGPT), which don't load Markdown images from links. The picture travels in the result's _meta, to the page and not to the agent; the page is the ui://perfboard/board-view.html resource. Clients without MCP Apps show nothing.
read_share_linkReads the project out of a link you share with the agent (z=, json= or src=, a stored project's short link too) and keeps it under a projectId, so the agent can change an existing board.

Every tool that reads a project takes either projectId or the whole file as project. Kept projects last as long as the server process (the 200 most recently used); on Cloudflare, 30 days after they were last used.

Its instructions to agents are kept short (clients cut them off at about 2 KB); the full guide is the resource perfboard://docs/guide (src/guide.ts).

It also serves the format as resources: perfboard://docs/project-file (the project file format, field by field), perfboard://docs/share-links (the link format), perfboard://parts (the whole parts catalog as JSON), and example projects: perfboard://examples/555-led-blinker (a 555 LED blinker on a perfboard, all wired with jumpers) and perfboard://examples/555-led-blinker-stripboard (the same circuit on a stripboard), read from ../examples/.

Hosting it on Cloudflare Workers

The public copy runs at https://mcp.perfboarddesigner.com/mcp; how to add it to Claude Code, claude.ai, ChatGPT, Cursor and other clients is on https://perfboarddesigner.com/mcp-server/ (../mcp-server/index.html).

The same server also runs as a Cloudflare Worker, so an MCP client can reach it over the web with nothing installed: Streamable HTTP at /mcp (src/worker.ts). It's stateless, every request getting a fresh server, so kept projects can't live in memory: each is kept in its own Durable Object (ProjectHolder), named by its projectId, and forgotten after 30 days unused. Project ids are random, so they can't be guessed. There's no sign-in: anyone with the address can use it.

It also draws boards: /render.svg? followed by a share link's part after the # (name=…&z=… or json=…; src= links aren't fetched) answers with an SVG picture of that board, drawn by the editor's own board renderer (../src/board-render/) with the part icons baked in. /render.png? with the same parameters answers with a PNG of it instead, for places that don't show SVG, such as chat apps and link previews. An address says everything in its picture, so it's cached for good (src/image-requests.ts).

The PNGs, from /render.png and render_board, are drawn from the same SVG by resvg, compiled to WebAssembly (@resvg/resvg-wasm, MPL-2.0), so they come out the same from the Worker and from stdio (src/board-png.ts). Drawing one takes around a tenth of a second of CPU for a small board, far more than the Workers Free plan's 10 ms a request, so the hosted server needs a paid plan to draw them.

So pictures aren't drawn again for every request, each Cloudflare data center keeps a copy of every picture and stored project file it serves (the Workers Cache API), for as long as its Cache-Control says: a year for /render.*, a day for stored projects. Repeat requests there are answered from it (CF-Cache-Status: HIT) without drawing again or waking the stored project's Durable Object (edgeCached() in src/worker.ts). Only answers that worked are kept, so an unknown id is looked up again next time. After a change to how boards are drawn, old pictures stay until they expire or the zone's cache is purged in the Cloudflare dashboard. The cache does nothing on the workers.dev address, only on the custom domains.

Stored projects

A share link carries the whole project, so it works without any server, but it gets long. The Worker can also store a project under a short id and serve it, at https://projects.perfboarddesigner.com (the same Worker, at its own address so the storage could move to a Worker of its own without breaking links). It's the project storage behind short links, for agents (make_share_link with store) and for people (the editor's Share dialog), documented for both in docs/share-links.md:

RequestAnswer
POST /projects with {"project": {…}, "id": "led-blinker", "name": "LED blinker"} (id and name optional){id, link, file, image, png}: the id it got, a short editor link, the file and its pictures
GET /projects?q=blinker&limit=20Stored projects matching the id or name, newest first, with links and a pagination cursor
GET /<id>.jsonthe project file
GET /<id>.png, GET /<id>.svgpictures of it
  • Ids are lowercase letters, digits and dashes, made from the wanted id or else the name ("Mágneses kapcsoló!" → magneses-kapcsolo), at most 40 characters, ignoring case. If another board has that id, a few characters of the board's SHA-256 are added (led-blinker-08196a); storing the same board again under the same id gives the same id back. With neither, the id is the hash. Ids shorter than 3 characters or naming the server's own addresses (mcp, render, projects…) always get the hash added.
  • A stored project never changes: storing again makes a new id. It's deleted after a year unopened (every request for its file or pictures pushes that back).
  • Only valid project files are stored, as the editor reads them, up to 1 MB.
  • The short link is a p= share link (…/app/#name=LED%20blinker&p=led-blinker), which the editor opens from this storage without asking. Stored anywhere else (PERFBOARD_PROJECTS_URL), it's a src= link to the file instead, which any editor opens. Anyone with a link can read the board.
  • Each stored project is a Durable Object (StoredProjectHolder) named by its id, so two boards stored at once can't both get an id (src/stored-projects.ts, src/project-requests.ts). The stdio server stores through POST /projects.

There's no sign-in or rate limit yet: anyone can store projects.

Querying stored projects

The listing is public and requires no token. Deploy from mcp/:

bash
npm run worker:deploy

Then query it:

bash
curl 'https://projects.perfboarddesigner.com/projects?q=blinker&limit=20'

Omit q to list all indexed projects. Search matches a literal substring of the id or name (ASCII case-insensitive). limit defaults to 20 and accepts 1–100. The response is {projects: [{id, name?, storedAt, link, file, image, png}], nextCursor}; storedAt is the original save time in Unix milliseconds. Pass nextCursor as the URL-encoded cursor query parameter with the same q to get the next page; null means there are no more results. Listings are not cached and do not extend projects' lifetimes.

The StoredProjectIndex Durable Object tracks new saves and removes expired projects. Existing projects from before this index was deployed appear when saved again or read from their storage object (an edge-cache hit does not reach storage). This is not a complete historical inventory: there was no central index before. Temporary MCP working projects are not included.

For local use, run npm run worker:dev and query http://localhost:8787/projects.

Try it locally (at http://localhost:8787/mcp):

bash
npm run worker:dev

Publish it to your Cloudflare account (npx wrangler login once first):

bash
npm run worker:deploy

Both build first; worker:dev serves stored projects at http://localhost:8787 too. wrangler.toml is the Worker's config: its name, its domains, the Durable Object bindings and, in [vars], PERFBOARD_EDITOR_URL for where links open and PERFBOARD_PROJECTS_URL for where stored projects are served. Then add it to a client by its address:

bash
claude mcp add --transport http perfboard https://perfboard-designer-mcp.<your-subdomain>.workers.dev/mcp

On the Workers Free plan a request gets 10 ms of CPU time, which checking a big board can run over; the Paid plan allows far more.

Publishing a release

The package is on npm as perfboard-designer-mcp, and the server is listed in the MCP Registry as com.perfboarddesigner/mcp, described by server.json: the hosted address (remotes) and the npm package (packages). The registry checks that package.json's mcpName is that name, and that you own perfboarddesigner.com, by a DNS TXT record on the apex domain holding a public key.

  1. Bump the version: npm version patch (or minor), and set the same version in server.json, both at the top and in its npm package entry.
  2. npm publish (it builds first; npm asks for 2FA). Wait until npm view perfboard-designer-mcp version shows the new version.
  3. Deploy the Worker if the server changed: npm run worker:deploy.
  4. Publish to the registry with mcp-publisher: mcp-publisher validate, then mcp-publisher login dns --domain perfboarddesigner.com --private-key "$PRIVATE_KEY" and mcp-publisher publish, run in mcp/.

The key pair is made once with OpenSSL 3, its public half added as a TXT record on perfboarddesigner.com (Cloudflare DNS); keep key.pem outside the repo:

bash
openssl genpkey -algorithm Ed25519 -out ~/.config/mcp-registry/key.pemecho "v=MCPv1; k=ed25519; p=$(openssl pkey -in ~/.config/mcp-registry/key.pem -pubout -outform DER | tail -c 32 | base64)"PRIVATE_KEY="$(openssl pkey -in ~/.config/mcp-registry/key.pem -noout -text | grep -A3 'priv:' | tail -n +2 | tr -d ' :\n')"

How things connect

Wires are insulated jumpers: a wire joins only the holes at its two ends. Running over a hole doesn't connect it, and two wires crossing aren't shorted, so a crossing is fine (the editor marks it so it doesn't pass for a joint, and the 3D view arches the upper wire). A hole takes one part's pin or lead at most (a second part there is an error, as on a real board) plus any number of wire ends, and everything in a hole is joined: to connect two parts, run a wire between their pins. A jumper can lie on the solder side (side: "bottom", format version 9): it joins its end holes the same way but never crosses a top wire. On a stripboard, every hole along a strip is joined up to the next cut, and a cut hole connects to nothing. get_nets and validate_project work this out with the same code as the editor's Nets panel, so they agree with what you see there.

How it's built

src/ is the server: create-server.ts puts it together, server.ts runs it over stdio and worker.ts on Cloudflare, tools/ holds the tools by group, resources.ts the documents it serves, project-handles.ts the kept projects (and where they're stored), edit-ops.ts and edit-project.ts edit_project's ops, validate.ts the checks, guide.ts its instructions and guide, board-view/ the page show_board shows the board in (an MCP App; view.ts runs in the client's frame and speaks the few MCP Apps messages it needs itself, so the page stays a few KB). It builds on the editor's own pure code, all of it taken through editor.ts, the one file that imports from ../src/: the project file reader, share-link code, pin positions, nets (nets.ts) and wire crossings (wire-crossings.ts) in ../src/project-file/, the part definitions and part geometry in ../src/parts/, and the board renderer (../src/board-render/) for pictures of a board. That way it always agrees with the editor about the format, the parts and what's connected. The editor never imports anything from here. npm run build bundles that code and the MCP SDK into a single dist/server.js (and dist/worker.js for Cloudflare) with no runtime dependencies, and bakes in the docs and examples it serves, the part icons its pictures embed and show_board's page (board-view/view.html with view.ts bundled for the browser into it). PNG pictures also need resvg's WebAssembly, which the build copies beside them as dist/resvg.wasm (uploaded with the Worker), and fonts, since resvg can't use the system's: Noto Sans and Noto Sans Mono, cut down to the characters boards use, in fonts/ (SIL Open Font License; fonts/README.md says how to remake them).

CommandWhat it does
npm run buildBundle dist/server.js and dist/worker.js
npm run typecheckType-check the server and the editor code it imports
npm run worker:devRun the Cloudflare Worker locally, at http://localhost:8787/mcp
npm run worker:deployPublish the Worker to Cloudflare
npm version patch, then npm publishRelease a new version to npm (prepublishOnly builds first; npm asks for 2FA)
npm run inspectOpen the server in the MCP Inspector to try the tools by hand

Requirements and component identities

The shared reader supports format 8, including optional independent requirements; format 7 adds project-scoped component instanceId fields. edit_project preserves all intended nets, gives new parts fresh identities, and includes them in the requirement inventory without assigning connections. Removed required parts remain reportable by identity, even if another part reuses their reference name. A schematic field from older editors is ignored.

When requirements.validate is true, checks also compare the board with the saved requirements: missing components/pins, missing connections and unexpected joins are errors; incomplete coverage is a warning and never described as a full requirement match. Unspecified pins remain unchecked. This is independent of the existing complete-list expectNets contract, which is unchanged. The project-format resource includes the requirement types.

Deploy this shared reader with the frontend before sharing version-8 files through hosted storage. Embedded links remain usable without hosted storage.

來源:mcp/README.md,提交 2e9d5f9

工具

12

list_parts

List parts

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.

輸入參數kindquery

get_part

Get parts

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`.

輸入參數idids

new_project

New project

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.

輸入參數colsnamerowstypestripsexample

edit_project

Edit project

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.

輸入參數ops必填projectprojectIdexpectNets

get_project

Get project

The whole project file of a project kept here, as the editor would save it (through version 8, preserving component identities and optional requirements), one entry per line.

輸入參數projectId必填

validate_project

Validate project

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. Enabled saved requirements also check intended connections, missing components/pins and unused pins; unspecified pins produce an incomplete-coverage warning, not a full match. 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.

輸入參數projectprojectIdexpectNets

get_nets

Get nets

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.

輸入參數projectprojectId

get_pin_positions

Get pin positions

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.

輸入參數refsprojectprojectId

render_board

Render board

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.

輸入參數areaformatprojectprojectId

show_board

Show board

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.

輸入參數nameprojectprojectId

版本歷史

1
  1. v0.1.0最新Oct 18, 2026

評分

已滿足適用檢查項的 90%

該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。

  • 近 30 天內可連通必需25 分
  • 已宣告認證方式必需10 分
  • 已列出工具必需15 分
  • 描述必需15 分
  • 圖示10 分
  • 文件15 分
  • 授權條款10 分

    請在儲存庫或註冊中心條目中宣告授權條款。