# io.github.RAEN-DT/pynet-mcp-bridge (pypi · pynet-mcp-bridge)

MCP implementation to connect AI agents with the PyNet Platform for BIM/Engineering automation.

- Trust score: 51/100 (low)
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-10-23

## Components

- pypi · `pynet-mcp-bridge`: 51/100 (this document), [markdown](https://verifymcp.io/servers/raen-dt-pynet-mcp-bridge/pynet-mcp-bridge.md), [page](https://verifymcp.io/servers/raen-dt-pynet-mcp-bridge/pynet-mcp-bridge)

## Channel facts

- Registry: `pypi`
- Package: `pynet-mcp-bridge`
- Version: `1.7.1`
- Transport: `stdio`

## Trust breakdown

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, 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-10-23.

- **Supply Chain Security**: 50/100
  - Malware scan not yet available for this package.
  - No known CVEs affecting this package version or its production dependencies.
  - Runs hatchling.build at install time, a recognised build step with no custom scripting around it.
  - 0 of 29 dependencies flagged as unhealthy.
- **Provenance & Transparency**: 45/100
  - Source repository is publicly reachable at the declared URL.
  - Provenance check failed: no build-provenance attestation is published.
  - Clear OSI-approved license (MIT).
  - Actively maintained (last published 0 days ago).
  - Disclosure check failed: no security disclosure policy was found in the source repository.
- **Schema Quality & AI Usability**: 65/100
  - AI-judged instruction clarity (good).
  - Tool/resource definitions use about 1428 tokens (~59/item across 24 items; 24 tools + 0 resources), lean.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 0/100
  - Stability not yet verified: not enough scan history yet (needs a 30-day window).
- **Tool Coverage**: 71/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 0% 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.
  - All 5 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation.
  - An AI judge read all 24 captured unit(s) of tool text and found none that tries to manipulate the model reading it.
- **Capabilities**: 100/100
  - Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.

**Unverified: 1 category.** A category scored 0 because we could not verify it: a data source with nothing on this package, evidence we could not reach, or a check we could not run. We only credit what we can confirm.

## Install

### How do I install the io.github.RAEN-DT/pynet-mcp-bridge server?

io.github.RAEN-DT/pynet-mcp-bridge runs locally as a PyPI package, launched with uvx pynet-mcp-bridge. 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 raen-dt-pynet-mcp-bridge -- uvx pynet-mcp-bridge
```

### Cursor

```json
{
  "mcpServers": {
    "raen-dt-pynet-mcp-bridge": {
      "command": "uvx",
      "args": [
        "pynet-mcp-bridge"
      ]
    }
  }
}
```

### VS Code

```json
{
  "servers": {
    "raen-dt-pynet-mcp-bridge": {
      "command": "uvx",
      "args": [
        "pynet-mcp-bridge"
      ]
    }
  }
}
```

### Codex

```bash
codex mcp add raen-dt-pynet-mcp-bridge -- uvx pynet-mcp-bridge
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "raen-dt-pynet-mcp-bridge": {
      "type": "local",
      "command": [
        "uvx",
        "pynet-mcp-bridge"
      ],
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add raen-dt-pynet-mcp-bridge --command uvx --arg pynet-mcp-bridge
```

### Hermes

```yaml
mcp_servers:
  raen-dt-pynet-mcp-bridge:
    command: "uvx"
    args: ["pynet-mcp-bridge"]
```

### Netclaw

```json
{
  "McpServers": {
    "raen-dt-pynet-mcp-bridge": {
      "Transport": "stdio",
      "Command": "uvx",
      "Arguments": [
        "pynet-mcp-bridge"
      ]
    }
  }
}
```

### Vellum

```bash
assistant mcp add raen-dt-pynet-mcp-bridge -t stdio -c uvx -a pynet-mcp-bridge
```

### Other

```json
{
  "mcpServers": {
    "raen-dt-pynet-mcp-bridge": {
      "command": "uvx",
      "args": [
        "pynet-mcp-bridge"
      ]
    }
  }
}
```

## 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-10-23 (score 51)

First indexed and scored.

## MCP tools (24)

### `list_active_instances` (~40 tokens)

Scans the system for running host processes (Autodesk, Rhino, PyNET for Tekla/Presto) with an active PyNet IPC pipe.

Output parameters:

- `result` (string)

### `check_plugin_status` (~27 tokens)

Handshake ping to verify the plugin listener is responsive.

Input parameters:

- `pid` (integer, required)

Output parameters:

- `result` (string)

### `send_command` (~54 tokens)

Direct script execution in the PyNet engine (Target PID, Script Name, Content).

Input parameters:

- `content` (string, required)
- `pid` (integer, required)
- `script_name` (string, required)
- `timeout` (number, required)

Output parameters:

- `result` (string)

### `send_command_by_path` (~58 tokens)

Executes a script file directly by path in the PyNet engine, without sending content inline.

Input parameters:

- `file_path` (string, required)
- `pid` (integer, required)
- `script_name` (string, required)
- `timeout` (number, required)

Output parameters:

- `result` (string)

### `get_output_window_status` (~28 tokens)

Checks if the output window is currently available/visible.

Input parameters:

- `pid` (integer, required)

Output parameters:

- `result` (string)

### `configure_output_window` (~36 tokens)

Toggles the visibility of the PyNet log/output window.

Input parameters:

- `is_available` (boolean, required)
- `pid` (integer, required)

Output parameters:

- `result` (string)

### `get_pynet_ui_layout` (~31 tokens)

Fetches the full UI structure (ButtonsModules and ScriptButtons).

Input parameters:

- `pid` (integer, required)

Output parameters:

- `result` (string)

### `create_pynet_module` (~37 tokens)

Creates a new custom Tab (ButtonsModule) in the Ribbon.

Input parameters:

- `name` (string, required)
- `pid` (integer, required)

Output parameters:

- `result` (string)

### `delete_pynet_module` (~35 tokens)

Permanently deletes a module and all its contents.

Input parameters:

- `module_id` (string, required)
- `pid` (integer, required)

Output parameters:

- `result` (string)

### `get_buttons_data` (~34 tokens)

Lists all script buttons for a specific module ID.

Input parameters:

- `module_id` (string, required)
- `pid` (integer, required)

Output parameters:

- `result` (string)

### `deploy_script_button` (~73 tokens)

Installs a new ScriptButton into a specific module (Name, Script, Icon, Tooltip).

Input parameters:

- `icon_name` (string)
- `module_id` (string, required)
- `name` (string, required)
- `pid` (integer, required)
- `script_Path` (string, required)
- `tooltip` (string)

Output parameters:

- `result` (string)

### `update_script_button` (~85 tokens)

Updates metadata for an existing ScriptButton or moves it to another module.

Input parameters:

- `button_id` (string, required)
- `dest_module_id` (string)
- `icon_name` (string, required)
- `module_id` (string, required)
- `name` (string, required)
- `pid` (integer, required)
- `script_Path` (string, required)
- `tooltip` (string, required)

Output parameters:

- `result` (string)

### `delete_script_button` (~44 tokens)

Permanently removes a ScriptButton from a module by Id.

Input parameters:

- `button_id` (string, required)
- `module_id` (string, required)
- `pid` (integer, required)

Output parameters:

- `result` (string)

### `viewer_status` (~28 tokens)

Reports whether a PyNet BIM Viewer is open in VS Code (port, package, data dir).

Output parameters:

- `result` (string)

### `viewer_list_clashes` (~43 tokens)

Reads the loaded package's clashes.json — the data source, NOT the viewer/IFC.

Returns each clash with the pnt_id identifiers needed to highlight it.

Output parameters:

- `result` (string)

### `viewer_load_package` (~36 tokens)

Loads a .pnt into the open viewer and returns a summary read from clashes.json.

Input parameters:

- `pnt_path` (string, required)

Output parameters:

- `result` (string)

### `viewer_highlight_clash` (~91 tokens)

Highlights a clash (element(s) A red, element(s) B green) and isolates the rest away.

Usually one pnt_id per side (a single clash pair), but either side accepts a list — e.g.
one element (A) against every counterpart it clashes with (B), all shown at once.

Input parameters:

- `pnt_id_a`
- `pnt_id_b`

Output parameters:

- `result` (string)

### `viewer_fit` (~19 tokens)

Fits the camera to all models in the open viewer.

Output parameters:

- `result` (string)

### `viewer_clear` (~18 tokens)

Clears highlights and ghosting in the open viewer.

Output parameters:

- `result` (string)

### `viewer_select` (~154 tokens)

Highlights a set of elements in the open viewer by pnt_id, in neutral colours
(yellow / blue) with nothing else hidden — a plain "look at these" pointer.

Pass a list of pnt_ids in `pnt_ids` (group A). Optionally pass a second list in
\`pnt_ids_b` to highlight a second group in a distinct colour. Replaces any previous
selection. Use viewer_list_clashes / viewer_get_properties to obtain pnt_ids.
For a clash pair (red/green, with the rest of the model isolated away), use
viewer_highlight_clash instead.

Input parameters:

- `pnt_ids` (array)
- `pnt_ids_b` (array)

Output parameters:

- `result` (string)

### `viewer_isolate` (~37 tokens)

Isolates (hides everything except) the given pnt_ids in the open viewer.

Input parameters:

- `pnt_ids` (array)

Output parameters:

- `result` (string)

### `viewer_isolate_models` (~102 tokens)

Shows only the given model(s)/discipline(s) (by exact name, e.g. "Snowdon Towers Sample
HVAC"), hiding every other loaded model. Cheaper than viewer_isolate for "just show me this
discipline" requests — no need to resolve every element's pnt_id first. Get the exact model
names from viewer_get_state's "models" list. Undo with viewer_clear.

Input parameters:

- `models` (array)

Output parameters:

- `result` (string)

### `viewer_get_state` (~82 tokens)

Reads the viewer's last reported state: loaded models and the pnt_id of whatever the
user currently has selected (click in the 3D view or the tree panel — null if nothing is
selected). Use the returned pnt_id with viewer_get_properties for its details, or feed it
into a clashes.json lookup to find what it clashes with.

Output parameters:

- `result` (string)

### `viewer_get_properties` (~236 tokens)

Reads element properties (name, model, psets) from the loaded package's properties.json.

Pass one or more pnt_ids to get their full properties (including psets) directly.

Called with no pnt_ids, returns a paginated lightweight index (pnt_id, name, model) instead
of every element — narrow it with `model` (exact model/discipline name, e.g. "Snowdon Towers
Sample HVAC") and/or `search` (case-insensitive substring of the element name), and page
through with `limit`/`offset` (default 200 per page, capped at 500). On a federated model
the unfiltered index can have tens of thousands of entries — always pass `model` or `search`
when you can, and use `offset` to page through the rest.

The data source is the .pnt's properties.json, NOT the viewer or IFC.

Input parameters:

- `limit` (integer)
- `model` (string)
- `offset` (integer)
- `pnt_ids` (array)
- `search` (string)

Output parameters:

- `result` (string)

## Diagnostics

Captured diagnostic sections: Provenance, Install scripts, Dependencies. The full working is on the page: https://verifymcp.io/servers/raen-dt-pynet-mcp-bridge/pynet-mcp-bridge#diagnostics

## Score history

- 2026-10-23: 51

## Common questions

### What is the io.github.RAEN-DT/pynet-mcp-bridge server?

io.github.RAEN-DT/pynet-mcp-bridge is listed in the public MCP registry as io.github.RAEN-DT/pynet-mcp-bridge. MCP implementation to connect AI agents with the PyNet Platform for BIM/Engineering automation. This page covers its PyPI package (pynet-mcp-bridge).

### Is the io.github.RAEN-DT/pynet-mcp-bridge server safe to use?

io.github.RAEN-DT/pynet-mcp-bridge scores 51 out of 100 on VerifyMCP. We found no known CVEs affecting it as of 23 October 2026. 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 io.github.RAEN-DT/pynet-mcp-bridge server expose?

io.github.RAEN-DT/pynet-mcp-bridge exposes 24 tools: list_active_instances, check_plugin_status, send_command, send_command_by_path, get_output_window_status, and 19 more. Their descriptions and schemas cost roughly 1,428 tokens of context every time the server is loaded.

### Is the io.github.RAEN-DT/pynet-mcp-bridge server still maintained?

io.github.RAEN-DT/pynet-mcp-bridge is still listed as active in the MCP registry. We last reached this channel on 23 October 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.

### What licence is the io.github.RAEN-DT/pynet-mcp-bridge server under?

io.github.RAEN-DT/pynet-mcp-bridge declares the MIT licence, which is OSI-approved. That covers the source only, and says nothing about the cost of any service it calls.

## Links

- PyPI project: https://pypi.org/project/pynet-mcp-bridge/
- Socket report: https://socket.dev/pypi/package/pynet-mcp-bridge
- Repository: https://github.com/RAEN-DT/PyNetBridge
- Changelog RSS feed: https://verifymcp.io/servers/raen-dt-pynet-mcp-bridge/pynet-mcp-bridge.xml
- Changelog JSON feed: https://verifymcp.io/servers/raen-dt-pynet-mcp-bridge/pynet-mcp-bridge.json
- HTML version of this page: https://verifymcp.io/servers/raen-dt-pynet-mcp-bridge/pynet-mcp-bridge
