# uniwire

> Electrical single-line and multi-line diagrams: build, check (NF C 15-100, IEC 60364), draw, PDF.

- name: io.github.uniwire-dev/uniwire
- version: 0.1.1
- connection class: R0 (autonomous)
- trust: 97/100
- quality: 96/100 (strong)
- owner: not claimed
- descriptor: https://api.protogrid.dev/v1/servers/io.github.uniwire-dev%2Funiwire
- tools: https://api.protogrid.dev/v1/servers/io.github.uniwire-dev%2Funiwire/tools

**An agent can connect right now, no human step.** Remote endpoint, no authentication, reachable on the last probe.

## Connection (mcpServers)

```json
{
  "mcpServers": {
    "uniwire": {
      "type": "http",
      "url": "https://mcp.uniwire.sh/mcp"
    }
  }
}
```


## Trust

- hygiene: 100
- liveness: 100
- freshness: 100
- provenance: 90
- drivers: +repository +namespace-matches-repo +website +reachable +uptime-100% +updated-7d-ago
- Derived from observable signals (official registry feed and our own credential-free probes); no code audit performed.

## Quality 96/100 (strong)

### protocol: 88 (weight 25)

- pass `protocol.modern`: supports 2026-07-28 (server/discover)
- pass `protocol.stateless`: answers without a session
- pass `protocol.transport`: streamable HTTP
- warn `protocol.list_ttl`: tools/list declares ttlMs 0, so clients re-fetch it on every use

### authorization: n/a (weight 15)

- n/a `auth.prm`, `auth.as_metadata`, `auth.cimd`: no remote uses OAuth
- n/a `auth.secret_in_url`: no templated URL

### tool hygiene: 100 (weight 30)

- pass `tools.descriptions`: every tool has a description
- pass `tools.description_length`: descriptions are concise
- pass `tools.schemas`: every tool has an object input schema
- pass `tools.annotations`: 14 of 14 tools declare readOnlyHint or destructiveHint
- pass `tools.directory_hints`: every tool declares readOnlyHint, destructiveHint, idempotentHint and openWorldHint
- pass `tools.token_cost`: about 2,519 tokens to load every tool
- pass `tools.api_dump`: tools are not a one-to-one API dump

### stability: 100 (weight 15)

- pass `stability.changes`: 5 tool changes in 30 days
- pass `stability.rug_pull`: no tool changed its meaning under the same name

### dependencies: n/a (weight 15)

- n/a `deps.known_vulns`, `deps.mcp_sdk_version`, `deps.resolvable`: no npm or PyPI package

- tools: 14, about 2,519 tokens to load them all
- tool set hash: 4a3e7043da0374395f5d055f1b5b8a01
- tools last changed: 2026-10-13T14:41:53.883Z
- badge: [![protogrid quality](https://protogrid.dev/badge/io.github.uniwire-dev/uniwire.svg)](https://protogrid.dev/servers/io.github.uniwire-dev/uniwire)
- Checks run on what our credential-free, read-only probes observe; tools are never called and no code audit is performed.

### Tool changes

- 2026-10-13 `viewer_link` changed (description, annotations)
  - before: Links for the user: viewer_url opens the document in the uniwire web editor (drawing, single-line and multi-line, rule findings, PDF and SVG downloads, nothing to install); pdf_url opens it and downloads the PDF drawn by uniwire. The document travels in the link (after '#') and is stored nowhere. Give them to the user as clickable Markdown links.
  - after: Links for the user: viewer_url opens the document in the uniwire web editor (drawing, single-line and multi-line, rule findings, PDF and SVG downloads, nothing to install); pdf_url gives the PDF drawn by uniwire. On the hosted server the document is kept 30 days so that the short links open it (anyone with a link can open it); elsewhere it travels in the link (after '#') and is stored nowhere. Give them to the user as clickable Markdown links.
- 2026-10-13 `render` changed (annotations)
- 2026-10-13 `apply_patch` changed (annotations)
- 2026-10-13 `check` changed (description, annotations)
  - before: Check an electrical installation (single-line diagram, panel, schéma unifilaire, tableau électrique): validates the document, then applies the rule profiles (NF C 15-100 'nfc15100', IEC 60364 'iec60364', PLC; default: the document's 'profiles'; 'core' always applies): breaker ratings against cable sections, RCDs, circuits per protection, selectivity... Returns findings (level error/warning/info, rule, node id, message, source), a summary, viewer_url (opens the document in the uniwire web editor: drawing, findings, downloads) and pdf_url (same, and downloads the PDF drawn by uniwire). Give both to the user as clickable links. 'scope' says what the checks cover: tell the user once that they are not a conformity certificate.
  - after: Check an electrical installation (single-line diagram, panel, schéma unifilaire, tableau électrique): validates the document, then applies the rule profiles (NF C 15-100 'nfc15100', IEC 60364 'iec60364', PLC; default: the document's 'profiles'; 'core' always applies): breaker ratings against cable sections, RCDs, circuits per protection, selectivity... Returns findings (level error/warning/info, rule, node id, message, source), a summary, viewer_url (opens the document in the uniwire web editor: drawing, findings, downloads) and pdf_url (the PDF drawn by uniwire). Give both to the user as clickable links. 'scope' says what the checks cover: tell the user once that they are not a conformity certificate.
- 2026-10-13 `validate` changed (annotations)

Full history: https://api.protogrid.dev/v1/servers/io.github.uniwire-dev%2Funiwire/changes

## Remotes

- https://mcp.uniwire.sh/mcp (streamable-http, auth none, reachable true, uptime30d 1)

## Packages

_none_

## Tools (14)

- `apply_patch`: Edit an electrical diagram by node id (change a rating, add a circuit, move a load...) and return the
        new document. ops (applied in order):
        {"op":"set","id":ID,"path":"in_A","value":20} (null value removes; no id = document root, e.g.
        path "installation.earthing"); {"op":"add","parent":ID,"node":{...},"index":0} (or "at":"sources");
        {"op":"remove","id":ID}; {"op":"move","id":ID,"parent":ID,"index":0};
        {"op":"rename","id":ID,"new_id":NEW}; {"op":"link","link":{"kind":"control","from":ID,"to":ID}};
        {"op":"unlink","id":LINK_ID} or {"op":"unlink","from":ID,"to":ID,"kind":K}.
        On failure returns ok=false and errors naming the failing op index (null = validation of the result).
- `bom`: Bill of materials of an electrical installation (nomenclature), grouped by manufacturer / part number
        (nodes with a product reference).
- `check`: Check an electrical installation (single-line diagram, panel, schéma unifilaire, tableau électrique):
        validates the document, then applies the rule profiles (NF C 15-100 'nfc15100', IEC 60364 'iec60364', PLC;
        default: the document's 'profiles'; 'core' always applies): breaker ratings against cable sections, RCDs,
        circuits per protection, selectivity...
        Returns findings (level error/warning/info, rule, node id, message, source), a summary, viewer_url (opens
        the document in the uniwire web editor: drawing, findings, downloads) and pdf_url (the PDF drawn by
        uniwire). Give both to the user as clickable links. 'scope' says what the checks cover: tell the
        user once that they are not a conformity certificate.
- `describe`: Text outline of an electrical diagram: installation, full tree of the panel with stable ids, ratings
        and cables, links, interlocks, boards and findings summary. Use it to review a document or find the ids for
        apply_patch.
- `get_example`: Return an example installation document by name (or number prefix, e.g. '02'), to adapt to the
        user's project.
- `get_reference_card`: Reference card of the uniwire format for electrical diagrams: document skeleton, node types (breakers,
        RCDs, cables, loads, transformers, PV...) and fields, enums, links, pitfalls, examples. Read it before writing
        a document. level: 'compact' (~3k tokens) or 'full'; lang: 'en' or 'fr'.
- `list_examples`: List the 52 example installations (dwellings, shops, offices, workshops, PV, EV charging, UPS, MV/LV
        substations, PLCs): name, title, language, profiles, earthing, system. Good starting points.
- `list_types`: List node types (type, category, label), optionally for one category: source, measure,
        protection, switching, control, converter, conductor, container, connector, load.
- `normalize`: Resolved document: templates applied, every id assigned, canonical numbers.
- `render`: Draw the electrical diagram (schéma unifilaire / multifilaire). kind: 'single-line' or 'multi-line';
        view: a view id of the document (e.g. a
        wire-marking view). format 'svg' returns the SVG text of every sheet (or of 'sheet', numbered from 1);
        'pdf' writes to 'path' if given, else returns base64 (requires the uniwire[pdf] extra); on the hosted
        server it returns pdf_url instead. To give the user the PDF, give them pdf_url as a clickable link.
        color: 'none' | 'conductors' | 'phase' | 'source' | 'status' | 'voltage' (adds a legend);
        conductor_colors: 'iec' (IEC 60445) | 'us'.
- `type_info`: All fields of a node type with descriptions and allowed values (enums).
- `validate`: Validate a uniwire document (electrical diagram as JSON: object, JSON text or file path) against the
        format. Returns valid + issues, each naming the node id and field when possible, plus viewer_url and pdf_url
        (links for the user). check does the same and also applies the electrical rules.
- `viewer_link`: Links for the user: viewer_url opens the document in the uniwire web editor (drawing, single-line and
        multi-line, rule findings, PDF and SVG downloads, nothing to install); pdf_url gives the PDF drawn by
        uniwire. On the hosted server the document is kept 30 days so that the short links open it
        (anyone with a link can open it); elsewhere it travels in the link (after '#') and is stored nowhere. Give
        them to the user as clickable Markdown links.
- `wiring`: Wiring exports of an installation as rows with stable column names (repérage des fils, carnet de
        câbles): what='markers' (one row per wire end, for label
        printers), 'wires' (wire list) or 'cables' (cable schedule). Marks follow the wire_marking rules of
        the view (id), by default the first view that declares them.
