protogrid

Search / com.perfboarddesigner/mcp

Perfboard Designer

R0· no sign-in

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

v0.1.0 · active · repository · website · descriptor JSON · versions

An agent can connect right now, no human step.Remote endpoint, no authentication, reachable on the last probe.
Quality85new
Trust96of 100
Uptime, 30 days100%
Latency p50347 ms

Connect

8 clients · secrets stay placeholders
{
  "mcpServers": {
    "perfboarddesigner": {
      "type": "http",
      "url": "https://mcp.perfboarddesigner.com/mcp"
    }
  }
}
claude mcp add --transport http perfboarddesigner https://mcp.perfboarddesigner.com/mcp
[mcp_servers.perfboarddesigner]
url = "https://mcp.perfboarddesigner.com/mcp"
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "perfboarddesigner": {
      "type": "remote",
      "url": "https://mcp.perfboarddesigner.com/mcp",
      "enabled": true
    }
  }
}
{
  "mcpServers": {
    "perfboarddesigner": {
      "type": "http",
      "url": "https://mcp.perfboarddesigner.com/mcp"
    }
  },
  "deeplink": "cursor://anysphere.cursor-deeplink/mcp/install?name=perfboarddesigner&config=eyJ0eXBlIjoiaHR0cCIsInVybCI6Imh0dHBzOi8vbWNwLnBlcmZib2FyZGRlc2lnbmVyLmNvbS9tY3AifQ%3D%3D"
}
{
  "servers": {
    "perfboarddesigner": {
      "type": "http",
      "url": "https://mcp.perfboarddesigner.com/mcp"
    }
  }
}
{
  "mcpServers": {
    "perfboarddesigner": {
      "httpUrl": "https://mcp.perfboarddesigner.com/mcp"
    }
  }
}
extensions:
  "perfboarddesigner":
    enabled: true
    name: "perfboarddesigner"
    type: streamable_http
    uri: "https://mcp.perfboarddesigner.com/mcp"
    timeout: 300

Quality 85 / 100new

protocol75 · weight 25
  • warn
    protocol.modernnewest supported version is 2025-11-25; 2026-07-28 not supported, older versions are deprecated until 2027-07-28
  • n/a
    protocol.statelessonly applies to 2026-07-28 servers
  • pass
    protocol.transportstreamable HTTP
  • n/a
    protocol.list_ttlonly applies to 2026-07-28 servers
authorizationn/a · weight 15
  • n/a
    auth.prm, auth.as_metadata, auth.cimdno remote uses OAuth
  • n/a
    auth.secret_in_urlno templated URL
tool hygiene93 · weight 30
  • pass
    tools.descriptionsevery tool has a description
  • pass
    tools.description_lengthdescriptions are concise
  • pass
    tools.schemasevery tool has an object input schema
  • pass
    tools.annotations12 of 12 tools declare readOnlyHint or destructiveHint
  • warn
    tools.directory_hints2 of 12 tools declare all four hints; missing: get_pin_positions (destructiveHint, idempotentHint); render_board (destructiveHint, idempotentHint); list_parts (destructiveHint, idempotentHint); …
  • pass
    tools.token_costabout 6,153 tokens to load every tool
  • pass
    tools.api_dumptools are not a one-to-one API dump
stabilityn/a · weight 15
  • n/a
    stability.changes, stability.rug_pulltool history recorded for 2 of the 7 days needed
dependenciesn/a · weight 15
  • n/a
    deps.known_vulns, deps.mcp_sdk_version, deps.resolvabledeps.dev does not know [email protected]

12 tools, about 6,153 tokens to load them all · tool set 1fe0eb575c84 · tools last changed 2026-10-19 · checked 2026-10-20 14:54 UTC

Tool changes

  • show_boardchangedinput schema
  • read_share_linkchangeddescription
    before

    Reads the project out of a Perfboard Designer share link (any of its forms: z=, json= or src=, which is downloaded; a stored project's short link too), so you can look at or change a board the user shared. Returns the project as a version 3 project file, kept here under the projectId it returns: change it with edit_project.

    after · 92% of words in common

    Reads the project out of a Perfboard Designer share link (any of its forms: z=, json= or src=, which is downloaded; a stored project's short link too), so you can look at or change a board the user shared. Returns the project as a project file (version 3, or 4 when a wire bends), kept here under the projectId it returns: change it with edit_project.

  • make_share_linkchangedinput schema
  • render_boardchangeddescription, input schema
    before

    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 marked holes. 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.

    after · 97% of words in common

    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.

  • get_pin_positionschangedinput schema
  • get_netschangedinput schema
  • validate_projectchangedinput schema
  • get_projectchangeddescription
    before

    The whole project file of a project kept here, as the editor would save it (version 3), one entry per line.

    after · 79% of words in common

    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.

  • edit_projectchangeddescription, input schema
    before

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

    after · 98% of words in common

    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.

  • edit_projectchangeddescription
    before

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

    after · 66% of words in common

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

Full history: list_changes · trend: quality JSON.

Checks run on what our credential-free, read-only probes observe; tools are never called and no code audit is performed. How it is computed.

Trust 96 / 100

provenance85
liveness100
freshness100
hygiene100

+repository +dns-namespace +website +reachable +uptime-100% +updated-2d-ago

Derived from observable signals (official registry feed and our own credential-free probes); no code audit performed. How it is computed.

Dependencies

[email protected] npmthis version is not known to the dependency resolver

Dependency graphs from deps.dev; advisories from OSV.dev, including the GitHub Advisory Database and the PyPI Advisory Database; all CC BY 4.0. The graph is what a clean install of this version resolves today; nothing was installed or run. How it is checked.

Endpoints

remoteauthreachableuptime 30dp50protocollast ok
https://mcp.perfboarddesigner.com/mcp streamable-httpnoneyes100%347 ms2025-11-252026-10-20
packageregistryversionruntimesecrets
perfboard-designer-mcpnpm0.1.0–

Tools (12)

edit_projectdestructiveChanges 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.
get_netsread-onlyWhich 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.
get_partread-onlyEverything 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`.
get_pin_positionsread-onlyWhere 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.
get_projectread-onlyThe 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.
list_partsread-onlyLists 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.
make_share_linkTurns a project into a link that opens it in Perfboard Designer: the project travels inside the link, so it works without any server. Give the link to the user. Also returns `image`, the address of an SVG picture of the board (as the editor draws it), for showing it where images from links display, e.g. in Markdown (not in Claude or ChatGPT, which don't load them: show_board shows the board there). With store, the project is also stored on the Perfboard Designer server under a short id, and `stored` gives a short link to it, its file and its pictures (SVG and PNG): give the user both links. The project is validated first (against expectNets too, given or remembered for its projectId); a project with errors gets the list of problems instead of a link, unless allowErrors is set.
new_projectStarts 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.
read_share_linkReads the project out of a Perfboard Designer share link (any of its forms: z=, json= or src=, which is downloaded; a stored project's short link too), so you can look at or change a board the user shared. Returns the project as a project file (version 3, or 4 when a wire bends), kept here under the projectId it returns: change it with edit_project.
render_boardread-onlyDraws 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.
show_boardread-onlyShows 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.
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, 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.

Schemas: list_tools.

Similar MCP servers

Official server.json
{
  "name": "com.perfboarddesigner/mcp",
  "title": "Perfboard Designer",
  "$schema": "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json",
  "remotes": [
    {
      "url": "https://mcp.perfboarddesigner.com/mcp",
      "type": "streamable-http"
    }
  ],
  "version": "0.1.0",
  "packages": [
    {
      "version": "0.1.0",
      "transport": {
        "type": "stdio"
      },
      "identifier": "perfboard-designer-mcp",
      "registryType": "npm",
      "environmentVariables": [
        {
          "name": "PERFBOARD_EDITOR_URL",
          "description": "Where board links open, e.g. http://localhost:3000/app/ for your own copy of the editor. Defaults to https://perfboarddesigner.com/app/."
        },
        {
          "name": "PERFBOARD_PROJECTS_URL",
          "description": "Where short links store projects, or off for no short links. Defaults to https://projects.perfboarddesigner.com."
        },
        {
          "name": "PERFBOARD_IMAGE_URL",
          "description": "Where board picture links point, or off for none. Defaults to https://mcp.perfboarddesigner.com/render.svg."
        }
      ]
    }
  ],
  "repository": {
    "url": "https://github.com/MaurerKrisztian/perfboard-designer",
    "source": "github",
    "subfolder": "mcp"
  },
  "websiteUrl": "https://perfboarddesigner.com/mcp-server/",
  "description": "Design perfboard and stripboard layouts, check the wiring and get a link to open them in the editor."
}