# uniwire (remote · mcp.uniwire.sh)

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

- Trust score: 78/100 (medium)
- Change this week: +3
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-11-05

## Components

- remote · `mcp.uniwire.sh`: 78/100 (this document), [markdown](https://verifymcp.io/servers/uniwire-dev-uniwire/mcp.md), [page](https://verifymcp.io/servers/uniwire-dev-uniwire/mcp)

## Channel facts

- Endpoint: `https://mcp.uniwire.sh/mcp`
- Transports: `streamable-http`
- Auth: `none`
- Version: `0.1.8`

## Trust breakdown

How this component scores in each security and reliability category. Every signal is checked automatically against the live server, and we only credit what we can confirm. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-11-05.

- **Endpoint Security**: 63/100
  - The endpoint's TLS certificate is valid, in date, and uses a strong key.
  - No authorisation is required to call this server. Every tool declares its destructiveHint and none is destructive, so open access doesn't expose one.
  - HTTPS enforcement could not be verified: the plaintext port answered with HTTP 406, which proves neither a plaintext path nor enforcement.
  - HSTS check failed: the Strict-Transport-Security header is absent.
  - DNSSEC check failed: this domain isn't protected by DNSSEC.
- **Transport & Reachability**: 100/100
  - Verified streamable-http transport via a live MCP handshake.
- **Schema Quality & AI Usability**: 78/100
  - 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).
  - AI-judged instruction clarity (good).
  - Context-footprint check failed: tool/resource definitions use about 2798 tokens (~164/item across 17 items; 14 tools + 3 resources), over budget; trim descriptions and params.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 77/100
  - Stability observed for 23 of 30 days with no destabilising changes; credit accrues until the full window elapses.
- **Tool Coverage**: 100/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 100% of tool parameters carry a description.
  - Structured output schemas are declared (100% of tools); any adoption earns full credit.
- **Tool Safety**: 100/100
  - No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.
  - We read all 14 captured tool definition(s), and no name or description among them implies an irreversible operation.
  - An AI judge read all 16 captured unit(s) of tool text and found none that tries to manipulate the model reading it.
- **Capabilities**: 100/100
  - Implements a current MCP spec version (2026-07-28).

## Install

### How do I install the uniwire MCP server?

uniwire is a hosted endpoint at https://mcp.uniwire.sh/mcp, so there is nothing to install locally. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

### Claude

```bash
claude mcp add --transport http uniwire-dev-uniwire 'https://mcp.uniwire.sh/mcp'
```

### Cursor

```json
{
  "mcpServers": {
    "uniwire-dev-uniwire": {
      "url": "https://mcp.uniwire.sh/mcp"
    }
  }
}
```

### VS Code

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

### Codex

```toml
[mcp_servers.uniwire-dev-uniwire]
url = "https://mcp.uniwire.sh/mcp"
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "uniwire-dev-uniwire": {
      "type": "remote",
      "url": "https://mcp.uniwire.sh/mcp",
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add uniwire-dev-uniwire --url 'https://mcp.uniwire.sh/mcp' --transport streamable-http
```

### Hermes

```yaml
mcp_servers:
  uniwire-dev-uniwire:
    url: "https://mcp.uniwire.sh/mcp"
```

### Netclaw

```json
{
  "McpServers": {
    "uniwire-dev-uniwire": {
      "Transport": "http",
      "Url": "https://mcp.uniwire.sh/mcp"
    }
  }
}
```

### Vellum

```bash
assistant mcp add uniwire-dev-uniwire -t streamable-http -u 'https://mcp.uniwire.sh/mcp'
```

### Other

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

The mcpServers block is a cross-client convention. Remote transports vary, so check your client's docs.

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-11-05 (score 78, +1)

No change was recorded against any check on this day. Stability & Change Management went from 73 to 77. That category is still filling its 30-day observation window: 22 days of observed history at the previous scan, 23 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-11-02 (score 77, +1)

- [functional] Server version: 0.1.7 → 0.1.8

### 2026-11-01 (score 76, 0)

- [functional] Server version: 0.1.6 → 0.1.7

### 2026-10-31 (score 76, +1)

- [functional] Server version: 0.1.5 → 0.1.6

### 2026-10-30 (score 75, 0)

- [functional] Server version: 0.1.4 → 0.1.5

### 2026-10-29 (score 75, +1)

- [functional] Server version: 0.1.3 → 0.1.4

### 2026-10-28 (score 74, +3)

- [security] The server rewrote its instructions, which are the text every model session reads
- [security] Tool “bom” rewrote its description, which is the text the model reads
- [security] Tool “check” rewrote its description, which is the text the model reads
- [security] Tool “describe” rewrote its description, which is the text the model reads
- [security] Tool “get_example” rewrote its description, which is the text the model reads
- [security] Tool “get_reference_card” rewrote its description, which is the text the model reads
- [security] Tool “list_examples” rewrote its description, which is the text the model reads
- [security] Tool “list_types” rewrote its description, which is the text the model reads
- [security] Tool “normalize” rewrote its description, which is the text the model reads
- [security] Tool “render” rewrote its description, which is the text the model reads
- [security] Tool “type_info” rewrote its description, which is the text the model reads
- [security] Tool “validate” rewrote its description, which is the text the model reads
- [security] Tool “viewer_link” rewrote its description, which is the text the model reads
- [functional regression] Schema quality: pass → fail
- [functional improvement] Tool coverage: 0% → 100%
- [functional] Schema quality: fair → good
- [functional] Server version: 0.1.1 → 0.1.3
- [cosmetic] “apply_patch” reworded the description of “document”
- [cosmetic] “apply_patch” reworded the description of “ops”
- [cosmetic] “apply_patch” reworded the description of “validate”
- [cosmetic] “bom” reworded the description of “document”
- [cosmetic] “check” reworded the description of “document”
- [cosmetic] “check” reworded the description of “profiles”
- [cosmetic] “describe” reworded the description of “document”
- [cosmetic] “describe” reworded the description of “lang”
- [cosmetic] “get_example” reworded the description of “name”
- [cosmetic] “get_reference_card” reworded the description of “lang”
- [cosmetic] “get_reference_card” reworded the description of “level”
- [cosmetic] “list_types” reworded the description of “category”
- [cosmetic] “list_types” reworded the description of “lang”
- [cosmetic] “normalize” reworded the description of “document”
- [cosmetic] “render” reworded the description of “color”
- [cosmetic] “render” reworded the description of “conductor_colors”
- [cosmetic] “render” reworded the description of “document”
- [cosmetic] “render” reworded the description of “format”
- [cosmetic] “render” reworded the description of “kind”
- [cosmetic] “render” reworded the description of “path”
- [cosmetic] “render” reworded the description of “sheet”
- [cosmetic] “render” reworded the description of “view”
- [cosmetic] “type_info” reworded the description of “lang”
- [cosmetic] “type_info” reworded the description of “type”
- [cosmetic] “validate” reworded the description of “document”
- [cosmetic] “viewer_link” reworded the description of “document”
- [cosmetic] “wiring” reworded the description of “document”
- [cosmetic] “wiring” reworded the description of “view”
- [cosmetic] “wiring” reworded the description of “what”

### 2026-10-26 (score 71, +1)

No change was recorded against any check on this day. Stability & Change Management went from 40 to 43. That category is still filling its 30-day observation window: 12 days of observed history at the previous scan, 13 at this one. The score rises as the window fills, whether or not the server changes.

## MCP tools (14)

### `get_reference_card` (~127 tokens)

Reference card of the uniwire format

Return the reference card of the uniwire format for electrical diagrams: document skeleton, node types
        (breakers, RCDs, cables, loads, transformers, PV...) and their fields, enums, links, pitfalls, examples.
        Read it once before writing a document; type_info gives the fields of one type in detail.

Input parameters:

- `lang` (string): Language of the returned texts: 'en' (English) or 'fr' (French).
- `level` (string): 'compact' (about 3k tokens) or 'full' (every field).

Output parameters:

- `result` (string)

### `list_types` (~113 tokens)

List the node types

List the node types of the format (type, category, label), optionally for one category. Use it to
        find the type name of a device or load before writing a node; type_info then gives its fields.

Input parameters:

- `category`: Only the types of this category: source, measure, protection, switching, control, converter, conductor, container, connector or load; default: all.
- `lang` (string): Language of the returned texts: 'en' (English) or 'fr' (French).

Output parameters:

- `result` (array)

### `type_info` (~100 tokens)

Fields of a node type

Return every field of one node type with its description, unit and allowed values (enums). Use it
        before writing or editing a node of that type; list_types gives the type names.

Input parameters:

- `lang` (string): Language of the returned texts: 'en' (English) or 'fr' (French).
- `type` (string, required): A node type name from list_types, e.g. 'breaker', 'rcd', 'socket'.

### `validate` (~135 tokens)

Validate an electrical diagram

Validate a uniwire document (electrical diagram as JSON) against the format only: structure, types,
        ids, references and links, without the electrical rules (use check for those). Returns valid + issues,
        each naming the node id and field when possible, plus viewer_url (the document in the uniwire web
        editor) and pdf_url (the PDF drawn by uniwire).

Input parameters:

- `document` (required): The uniwire document of the electrical installation: a JSON object, or its JSON text, as returned by get_example, apply_patch or normalize (a file path is accepted when the server runs locally).

### `check` (~277 tokens)

Check an electrical installation (NF C 15-100, IEC 60364)

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', French grid connection 'enedis',
        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, 'scope' (what the
        checks cover and do not cover: automatic checks of the document data, not a conformity certificate),
        viewer_url (the document in the uniwire web editor: drawing, findings, downloads) and pdf_url (the PDF
        drawn by uniwire).

Input parameters:

- `document` (required): The uniwire document of the electrical installation: a JSON object, or its JSON text, as returned by get_example, apply_patch or normalize (a file path is accepted when the server runs locally).
- `profiles`: Rule profiles to apply, e.g. ['nfc15100', 'enedis'] (France) or ['iec60364']; default: the 'profiles' of the document. 'core' always applies.

### `describe` (~129 tokens)

Outline of an electrical diagram

Return a 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 read a document and find
        the node ids before apply_patch.

Input parameters:

- `document` (required): The uniwire document of the electrical installation: a JSON object, or its JSON text, as returned by get_example, apply_patch or normalize (a file path is accepted when the server runs locally).
- `lang` (string): Language of the returned texts: 'en' (English) or 'fr' (French).

Output parameters:

- `result` (string)

### `apply_patch` (~306 tokens)

Edit an electrical diagram

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

Input parameters:

- `document` (required): The uniwire document of the electrical installation: a JSON object, or its JSON text, as returned by get_example, apply_patch or normalize (a file path is accepted when the server runs locally).
- `ops` (required): The edit operations, applied in order (list, or its JSON text): see the description for the operation forms.
- `validate` (boolean): Validate the resulting document (default true).

### `render` (~369 tokens)

Draw the single-line or multi-line diagram

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 (the PDF drawn by uniwire) instead.
        color: 'none' | 'conductors' | 'phase' | 'source' | 'status' | 'voltage' (adds a legend);
        conductor_colors: 'iec' (IEC 60445) | 'us'.

Input parameters:

- `color`: Colouring: 'none', 'conductors', 'phase', 'source', 'status' or 'voltage' (adds a legend).
- `conductor_colors`: Conductor colour convention: 'iec' (IEC 60445) or 'us'.
- `document` (required): The uniwire document of the electrical installation: a JSON object, or its JSON text, as returned by get_example, apply_patch or normalize (a file path is accepted when the server runs locally).
- `format` (string): 'svg' or 'pdf'.
- `kind` (string): 'single-line' or 'multi-line' (one line per conductor).
- `path`: File to write the PDF to (local server only).
- `sheet`: Only this sheet (numbered from 1); default: all.
- `view`: Id of a view of the document (its 'views' list); default: the first view of the requested kind.

### `viewer_link` (~150 tokens)

Links to open the diagram and its PDF

Links to a document: viewer_url opens it in the uniwire web editor (drawing, single-line and
        multi-line, rule findings, PDF and SVG downloads, nothing to install); pdf_url is 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.

Input parameters:

- `document` (required): The uniwire document of the electrical installation: a JSON object, or its JSON text, as returned by get_example, apply_patch or normalize (a file path is accepted when the server runs locally).

### `wiring` (~202 tokens)

Wire list, wire markers and cable schedule

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.

Input parameters:

- `document` (required): The uniwire document of the electrical installation: a JSON object, or its JSON text, as returned by get_example, apply_patch or normalize (a file path is accepted when the server runs locally).
- `view`: Id of a view of the document (its 'views' list); default: the first view of the requested kind.
- `what` (string): 'markers' (one row per wire end, for label printers), 'wires' (wire list) or 'cables' (cable schedule).

### `bom` (~165 tokens)

Bill of materials

Compute the bill of materials (nomenclature) of an electrical installation from its document: one row
        per manufacturer / part number for the nodes with a product reference, then one row per kind of
        equipment without a reference (type and main characteristics in 'spec', e.g. 'C16 1P+N') and per kind of
        cable (total length in 'length_m'), with quantities and the reference designations involved. Use it to
        prepare a quote or an order; wiring gives the wire list and cable schedule.

Input parameters:

- `document` (required): The uniwire document of the electrical installation: a JSON object, or its JSON text, as returned by get_example, apply_patch or normalize (a file path is accepted when the server runs locally).

Output parameters:

- `result` (array)

### `list_examples` (~56 tokens)

List the example installations

List the 53 example installations (dwellings, shops, offices, workshops, PV, EV charging, UPS, MV/LV
        substations, PLCs): name, title, language, profiles, earthing, system.

Output parameters:

- `result` (array)

### `get_example` (~65 tokens)

Get an example installation

Return an example installation document by name. Use it as a starting point for a similar
        installation, then edit it with apply_patch; list_examples gives the names.

Input parameters:

- `name` (string, required): Example name from list_examples, or its number prefix (e.g. '02').

### `normalize` (~116 tokens)

Normalized document

Return the resolved form of a document: templates ('use') applied, every node and link id assigned,
        numbers in canonical form. Use it to read a document exactly as the rules and drawings see it, or to get
        stable ids before apply_patch; it does not apply the electrical rules (see check).

Input parameters:

- `document` (required): The uniwire document of the electrical installation: a JSON object, or its JSON text, as returned by get_example, apply_patch or normalize (a file path is accepted when the server runs locally).

## Diagnostics

Captured diagnostic sections: TLS, DNSSEC, Authorisation, Transports. The full working is on the page: https://verifymcp.io/servers/uniwire-dev-uniwire/mcp#diagnostics

## Score history

- 2026-11-05: 78
- 2026-11-04: 77
- 2026-11-03: 77
- 2026-11-02: 77
- 2026-11-01: 76
- 2026-10-31: 76
- 2026-10-30: 75
- 2026-10-29: 75
- 2026-10-28: 74
- 2026-10-27: 71
- 2026-10-26: 71
- 2026-10-25: 70
- 2026-10-24: 70
- 2026-10-23: 69
- 2026-10-22: 69
- 2026-10-21: 68
- 2026-10-20: 68
- 2026-10-19: 67
- 2026-10-18: 67
- 2026-10-17: 66
- 2026-10-16: 66
- 2026-10-15: 66
- 2026-10-14: 65
- 2026-10-13: 65

## Common questions

### What is the uniwire MCP server?

uniwire is an MCP server listed in the public MCP registry as io.github.uniwire-dev/uniwire. Electrical single-line and multi-line diagrams: build, check (NF C 15-100, IEC 60364), draw, PDF. This page covers its hosted endpoint (https://mcp.uniwire.sh/mcp).

### Is the uniwire MCP server safe to use?

uniwire scores 78 out of 100 on VerifyMCP. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

### What tools does the uniwire MCP server expose?

uniwire exposes 14 tools: get_reference_card, list_types, type_info, validate, check, and 9 more. Their descriptions and schemas cost roughly 2,310 tokens of context every time the server is loaded.

### Does the uniwire MCP server require authentication?

No. We connected to uniwire without credentials and it answered, so anything it exposes is reachable by anyone who knows the address.

### Is the uniwire MCP server still maintained?

uniwire is still listed as active in the MCP registry. We last reached this channel on 5 November 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.

## Links

- Remote endpoint: https://mcp.uniwire.sh/mcp
- Repository: https://github.com/uniwire-dev/uniwire
- Website: https://uniwire.sh/docs/assistants/
- Changelog RSS feed: https://verifymcp.io/servers/uniwire-dev-uniwire/mcp.xml
- Changelog JSON feed: https://verifymcp.io/servers/uniwire-dev-uniwire/mcp.json
- HTML version of this page: https://verifymcp.io/servers/uniwire-dev-uniwire/mcp
