PyNet Bridge
PyNet Bridge lets AI control Autodesk desktop tools (Navisworks, Revit, Civil 3D) and a VS Code BIM viewer through local script execution, UI automation, and clash review.
Discover running Autodesk instances and verify PyNet plugin responsiveness.
Execute Python scripts inside Autodesk via PyNet, either inline or by file path.
Toggle the PyNet output/log window visibility and check its status.
Manage the PyNet ribbon UI: create/delete custom tabs (modules), list/deploy/update/delete script buttons.
Interact with the PyNet BIM Viewer: check status, load
.pntpackages, list clashes, highlight clash pairs or element sets, fit/clear the view, isolate elements (when supported), read viewer state, and fetch element properties.All scripts are validated by a built-in static analyzer before reaching Autodesk.
Enables interaction with Autodesk Tools (Navisworks and Revit) through the PyNet Platform, allowing for dynamic UI deployment (custom Ribbon tabs and buttons), Python script execution, BIM process automation, and real-time detection of active Autodesk instances.
PyNet Bridge is the execution layer that allows AI models to control Autodesk tools in real-time.
It connects Natural Language â Python â Autodesk desktop tools (Navisworks, Revit, AutoCAD), enabling AI to generate, execute, and refine BIM workflows autonomously.
Available integrations include Navisworks Manage, Revit, and Civil 3D.
This bridge acts as the connective tissue between AI logic and Autodesk desktop APIs, allowing for dynamic UI creation, script execution, and BIM process automation using natural language.
đŦ Demos & Tutorials
See PyNet Bridge in action â these recordings show the full natural-language â BIM-action workflow inside live Autodesk models.
Demo | Description | Video |
â Autonomous BIM Coordination (Revit + Navisworks) | Claude Code drives Revit and Navisworks simultaneously to audit models, resolve clashes by tolerance rules, generate geometry, and self-correct API errors in real time. | |
PyNET + Codex Integration | How to configure PyNet Bridge with Codex and query into Navisworks. |
â Featured: Autonomous BIM Coordination
In this technical demo, Claude Code connects to Navisworks and Revit at the same time to run a full coordination workflow end-to-end:
Engineering criteria as a Skill â the AI applies tolerance rules to decide which interferences to auto-approve.
Real-time data auditing â validates model integrity and detects missing parameters (
PYNET_Classification) before coordinating.Autonomous geometry generation â generates architectural sleeves (pasatubos) directly in Revit, with precise spatial rotation to match pipe angles.
Self-healing code â hits a live Revit API data-type exception, analyzes the failure, rewrites the script on the fly, and completes the task.
Related MCP server: A2A MCP Server
đ How it works
The user describes a task in natural language.
The AI generates a Python script.
PyNet Bridge validates and sends the script.
The PyNet plugin executes it inside Autodesk.
Results are returned back to the AI.
This is what turns AI from a chatbot into an execution engine for BIM.
đ What makes PyNet Bridge powerful
AI â Action: Turns AI-generated code into real actions inside Navisworks/Revit
Real-time Execution: Run scripts instantly without leaving the BIM environment
Dynamic UI Creation: Let AI create tools, buttons and workflows on the fly
Reliable Communication: Fast and stable, entirely local
Model-Aware Automation: Operates directly on live BIM models
đ ī¸ Installation
â Option A â Automatic installer (recommended)
Open PowerShell and run:
irm https://raw.githubusercontent.com/RAEN-DT/PyNetBridge/main/install.ps1 | iexThis will automatically:
Check Python 3.10+ is installed
Install
uvif missing, thenpynet-mcp-bridgefrom PyPI withuv(neverpip)Auto-detect and configure all installed AI clients:
Claude Desktop (standard and Microsoft Store versions)
Claude Code (VS Code extension / CLI)
Cline (VS Code extension)
Roo Code (VS Code extension)
Codex CLI (
~/.codex/config.toml)
The pynet-mcp-bridge package includes:
Package | Purpose |
pynet-mcp-bridge | MCP server that connects AI models with Autodesk tools via PyNET |
mcp[cli] (1.x) | Model Context Protocol SDK and CLI tools |
psutil | System process detection (finds running Autodesk instances) |
Restart your AI client(s) after installation to apply changes.
đĻ Python Libraries Starter Pack (optional)
Install the recommended Python libraries for Navisworks, Revit and Civil 3D scripting with PyNET:
irm https://raw.githubusercontent.com/RAEN-DT/PyNetBridge/main/install-libraries.ps1 | iexThis installs:
Library | Purpose |
pandas | Data analysis and manipulation |
plotly | Interactive charts and visualizations |
matplotlib | Static plots and graphs |
dash | Web dashboards from Python |
These are the third-party libraries listed under Allowed Python Imports. Standard library modules (
json,sys,re, etc.) are already included with Python.
Prerequisites
PyNet Platform plugin installed in Navisworks/Revit.
Python 3.10 or higher â python.org â Python 3.14 is supported.
uv â docs.astral.sh/uv â required. The Claude Desktop extension (
.mcpb) launches the server withuvx pynet-mcp-bridge, souvmust be installed and on yourPATH. Install it withwinget install astral-sh.uv. Withoutuv, the extension will fail to start.Git â git-scm.com â required for VS Code extensions (Claude Code, Cline, Roo Code) to function correctly.
For Cline / Roo Code: VS Code â code.visualstudio.com
đ§ Option B â Manual installation
1. Install the package:
uv tool install pynet-mcp-bridgeUse uv only â do not install with pip. A pip copy lands in a different interpreter from the
pynet-bridge launcher, so upgrades and fixes silently miss the environment that actually runs.
2. Configure Claude Desktop:
Add the following to your claude_desktop_config.json:
Standard:
%APPDATA%\Claude\claude_desktop_config.jsonMicrosoft Store:
%LOCALAPPDATA%\Packages\Claude_*\LocalCache\Roaming\Claude\claude_desktop_config.json
{
"mcpServers": {
"pynet-bridge": {
"command": "pynet-bridge",
"args": []
}
}
}3. Configure Claude Code (VS Code extension):
Add to %USERPROFILE%\.claude.json:
{
"mcpServers": {
"pynet-bridge": {
"type": "stdio",
"command": "pynet-bridge",
"args": []
}
}
}4. Configure Cline:
Add to %APPDATA%\Code\User\globalStorage\saoudrizwan.claude-dev\settings\cline_mcp_settings.json:
{
"mcpServers": {
"pynet-bridge": {
"type": "stdio",
"command": "pynet-bridge",
"args": []
}
}
}5. Configure Roo Code:
Add to %APPDATA%\Code\User\globalStorage\rooveterinaryinc.roo-cline\settings\mcp_settings.json:
{
"mcpServers": {
"pynet-bridge": {
"type": "stdio",
"command": "pynet-bridge",
"args": []
}
}
}6. Configure Codex CLI:
Add to %USERPROFILE%\.codex\config.toml:
[mcp_servers.pynet-bridge]
command = "C:/Users/<user>/.local/bin/pynet-bridge.exe"
args = []đ ī¸ Available MCP Tools
These tools allow AI to fully control the PyNet environment, from UI creation to script execution and system monitoring. Once connected, the AI will have access to the full suite of PyNet tools:
đ§ Core capabilities exposed to AI
đ System & Connection
list_active_instances: Scans the system for running Autodesk processes with an active PyNet connection.
check_plugin_status: Handshake ping to verify the plugin listener is responsive.
đī¸ Module (Tab) Management
get_pynet_ui_layout: Fetches the full UI structure (ButtonsModules and ScriptButtons).
create_pynet_module: Creates a new custom Tab (ButtonsModule) in the Ribbon.
delete_pynet_module: Permanently deletes a module and all its contents.
đ Button Management
get_buttons_data: Lists all script buttons for a specific module ID.
deploy_script_button: Installs a new ScriptButton into a specific module (Name, Script, Icon, Tooltip).
update_script_button: Updates metadata for an existing ScriptButton or moves it to another module.
delete_script_button: Permanently removes a ScriptButton from a module by Id.
đģ Execution & Console Control
send_command: Direct script execution in the PyNet engine (Target PID, Script Name, Content).
get_output_window_status: Checks if the output window is currently available/visible.
configure_output_window: Toggles the visibility of the PyNet log/output window.
đ§ BIM Viewer Control (VS Code)
Drives the PyNet BIM Viewer open in VS Code. Reads clash data from the loaded .pnt package and controls the 3D view over a local (127.0.0.1) connection â nothing leaves your machine.
viewer_status: Reports whether a PyNet BIM Viewer is open (port, package, data dir).
viewer_list_clashes: Reads the loaded package's
clashes.jsonand returns each clash with itspnt_ididentifiers.viewer_load_package: Loads a
.pntinto the open viewer, pushes the models, and returns a summary.viewer_highlight_clash: Highlights a clash pair by
pnt_id(element A red, element B green).viewer_fit: Fits the camera to all models in the viewer.
viewer_clear: Clears highlights and ghosting in the viewer.
đĄ Usage Examples
These are realistic prompts you can give your AI client once PyNet Bridge is connected.
Example 1 â Discover a running model and query it (read-only)
Prompt: "Connect to my open Navisworks model and tell me how many items are in the current selection."
The AI calls list_active_instances to find the running Navisworks process (e.g. Navisworks (PID 12345)), then calls send_command with a short Python script that reads the active document's selection. Expected output: a message like Current selection contains 42 items.
Example 2 â Run a clash-detection summary
Prompt: "Give me a summary of clash test results in the open model and export the counts as a table."
The AI calls list_active_instances, then send_command with a script that iterates the DocumentClash results using the whitelisted Autodesk.Navisworks.Clash assembly and returns counts per test. Expected output: a table such as Test 'Structure vs MEP': 17 active, 3 resolved.
Example 3 â Build a custom ribbon tool on the fly
Prompt: "Create a new ribbon tab called 'QA' and add a button that runs my hide-empty-layers script."
The AI calls create_pynet_module (returns a new module ID), then deploy_script_button with the button name, script path, icon and tooltip. Expected output: Button 'Hide Empty Layers' deployed to module QA. â visible immediately in the Autodesk ribbon.
âšī¸ Every script sent via
send_command/send_command_by_pathis first validated by the built-in static analyzer (see Safe AI Execution). Scripts that violate the import/call whitelist are rejected before reaching Autodesk.
đĄī¸ Safe AI Execution
PyNet Bridge includes a built-in validation layer that ensures all AI-generated scripts are safe and controlled before execution.
â Prevents unsafe operations
â Blocks unauthorized system access
â Guarantees controlled interaction with BIM models
AI remains powerful, but within safe boundaries
Starting from v1.1.1, the MCP server includes a built-in static analyzer that validates every script before it reaches the Autodesk host. All scripts are parsed and inspected at the bridge level â rejected scripts never leave the MCP server.
Allowed CLR Assemblies
Only these .NET references are permitted via clr.AddReference:
Common:
System,System.Windows.Forms,System.Drawing,System.Collections.GenericNavisworks:
Autodesk.Navisworks.Api,.ComApi,.Interop.ComApi,.ClashRevit:
RevitAPI,RevitAPIUIAutoCAD / Civil 3D:
AcMgd,AcCoreMgd,AcDbMgd,AecBaseMgd,AecPropDataMgd,AeccDbMgdPyNet plugins:
Raen.Core.Pynet.*,Raen.{Product}.Pynet.*(any version â e.g.Raen.Core.Pynet.Resources,Raen.Navisworks.Pynet.2024,Raen.Civil3D.Pynet.2026)
Allowed Python Imports
clr, sys, json, re, time, datetime, pathlib, typing, threading, collections, xml, math, pandas, plotly, matplotlib, dash, webbrowser, psutil, functools, openpyxl, uuid, zipfile, io, mimetypes, difflib, csv, ifcopenshell, numpy, shapely, qgis, processing, pypdf, docx
Allowed Python Submodules
Some modules are allowed at the submodule level only, preventing access to dangerous siblings:
Allowed | Blocked | Reason |
|
| Allow local HTTP serving, block outbound requests |
Blocked Python Imports
os, subprocess, shutil, socket, ctypes, pickle, importlib, urllib, signal, multiprocessing, tempfile, glob, inspect, code, codeop
Blocked Calls
eval, exec, compile, __import__, getattr, setattr, delattr, globals, locals, vars, breakpoint, open
Blocked Attribute Access
__builtins__, __subclasses__, __globals__, __code__
Any script that violates these rules is immediately rejected with a descriptive error message, without ever being sent to the plugin.
đ Project Structure
pynet_mcp/: Core MCP server logic (FastMCP).
pyproject.toml: Package configuration and dependency management.
đĨ Getting Started
Start building autonomous BIM workflows in minutes.
Install the bridge, connect your AI client, and turn natural language into real actions inside your models.
â FAQs
Have questions about installation, configuration, or usage? Check the full FAQ page:
đ PyNet FAQs
đ How This MCP Fits Into the Ecosystem
This MCP is part of a modular system designed to enable AI-driven BIM automation across Autodesk tools.
This repository is designed to work alongside:
PyNet Platform â Executes scripts inside Navisworks, Revit & Civil 3D via Python.NET
PyNet Library â Gives the AI context with a Python scripts library
Together, these components enable:
Natural Language â AI â Python Script â PyNet â Autodesk â BIM Action
Component | Repository | Purpose |
PyNet Platform | Navisworks, Revit & Civil 3D plugin â hosts the Python.NET engine | |
PyNet Bridge (MCP) | This repo | MCP server - connects AI models to PyNET with including secure scripts validation |
PyNet Library | Script reference library and AI context |
đ Privacy Policy
PyNet Bridge runs entirely on your local machine. It does not collect, store, or transmit any personal data, telemetry, or analytics.
No data collection: The server does not send any information to RAEN Digital Tools or any third party.
Local-only communication: All communication between the MCP server and the PyNet plugin running inside Autodesk stays on your machine. No network sockets, no remote endpoints â nothing leaves your computer.
Your scripts and model data stay on your machine and are only processed by the AI client you have connected.
Full privacy policy: https://privacy.raendt.com/
đ Support
Issues / bug reports: GitHub Issues
FAQ: PyNet FAQs
Contact: info@raendt.com
đĨī¸ Platform Support
PyNet Bridge is Windows-only. It relies on Windows-specific local communication facilities and on Autodesk desktop applications (Navisworks, Revit, Civil 3D), which are Windows products. macOS and Linux are not supported.
đ License
This project is licensed under the MIT License.
mcp-name: io.github.Rafael-NunezDeArenas/pynet-mcp-bridge
Available Tools
24 toolscheck_plugin_statusBRead-only
Handshake ping to verify the plugin listener is responsive.
| Name | Required | Description | Default |
|---|---|---|---|
| pid | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the description's 'handshake ping' adds mild behavioral context (non-destructive). However, it does not discuss rate limits or failure modes.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence that efficiently conveys the tool's essence without extraneous information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple ping tool with an output schema, the description is too sparse. It fails to mention what the output indicates (success/failure) or error handling, leaving the agent underinformed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description provides no explanation of the 'pid' parameter. The agent cannot infer what the integer represents or how to use it.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it is a 'handshake ping' to verify plugin listener responsiveness, which is a specific and distinct purpose. It distinguishes from sibling tools that perform other functions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool or when not to. Lacks mention of prerequisites or alternatives, leaving the agent without usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
configure_output_windowCDestructive
Toggles the visibility of the PyNet log/output window.
| Name | Required | Description | Default |
|---|---|---|---|
| pid | Yes | ||
| is_available | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations include destructiveHint: true, but the description adds no context beyond 'toggles visibility'. It fails to explain what the destructive nature refers to (e.g., state reset, data loss) or any side effects, leaving the agent without critical behavioral insight.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise at one sentence. While it lacks detail, it is front-loaded and direct, with no wasted words. However, it could be longer to add necessary context without sacrificing conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has two required parameters and an output schema, the description is insufficient. It does not explain what the parameters mean (e.g., pid identifier, is_available toggles to true/false), nor does it describe the return value. The destructive hint is not addressed, making the overall completeness low.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 0% description coverage for its two required parameters (pid, is_available). The description provides no additional meaning or constraints for these parameters, leaving their purpose ambiguous.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb 'toggles' and identifies the resource 'visibility of the PyNet log/output window'. It clearly distinguishes the tool's function from sibling tools like get_output_window_status, which likely reads the status without modifying it.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives such as get_output_window_status. The description does not mention prerequisites, context, or when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_pynet_moduleCDestructive
Creates a new custom Tab (ButtonsModule) in the Ribbon.
| Name | Required | Description | Default |
|---|---|---|---|
| pid | Yes | ||
| name | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide destructiveHint. The description adds minimal behavioral context beyond 'creates', such as effects on existing modules or permissions needed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence is concise but lacks necessary detail, achieving a middle ground.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given only 1 sentence and no parameter info, the description is incomplete for a 2-parameter tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, but the description does not explain the parameters (pid, name) at all, leaving the agent without semantic clues.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action 'Creates' and the resource 'new custom Tab (ButtonsModule) in the Ribbon', distinguishing it from siblings like delete_pynet_module.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use or alternatives. Lacks context for decision-making.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_pynet_moduleCDestructive
Permanently deletes a module and all its contents.
| Name | Required | Description | Default |
|---|---|---|---|
| pid | Yes | ||
| module_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds 'permanently' to the existing destructiveHint annotation, emphasizing irreversibility but not disclosing other traits like required permissions or effects on dependencies. The annotation already signals destructiveness, so the description adds minimal new insight.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single 7-word sentence, very concise. However, it is too brief to inform the agent adequately, sacrificing substance for brevity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive tool with two required parameters, the description lacks important context such as error handling (e.g., if module doesn't exist), dependencies, and whether the deletion cascades. An output schema exists but does not compensate for missing behavioral context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description does not explain the parameters 'pid' and 'module_id' beyond what is in the schema. With 0% schema description coverage, the tool relies entirely on the description for parameter meaning, which it fails to provide.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states the tool deletes a module and all its contents, clearly specifying the verb 'delete' and resource 'module'. However, it does not differentiate from sibling tools like 'delete_script_button', which also delete but on different resources.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives, such as the sibling tools that also perform deletions. There is no mention of prerequisites or conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_script_buttonBDestructive
Permanently removes a ScriptButton from a module by Id.
| Name | Required | Description | Default |
|---|---|---|---|
| pid | Yes | ||
| button_id | Yes | ||
| module_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotation already provides 'destructiveHint: true', which signals destructiveness. The description adds 'permanently removes', consistent with the annotation. However, it does not disclose additional behavioral details like required permissions, cascading effects on other data, or error conditions. The annotation carries most of the burden here.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence with no superfluous words. It is front-loaded with the action and resource. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has three required parameters with no descriptions and a destructive action, the description should provide more context about the removal process, return value, or prerequisites. The output schema is present but its content is unknown; the description does not compensate for the lack of parameter documentation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 0% description coverage on parameters, and the description only says 'by Id', failing to explain what each parameter represents (e.g., pid likely a project ID, module_id a module, button_id the button identifier). The field names offer some clue but are insufficient for an agent to correctly map parameters without additional context.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states that the tool 'permanently removes a ScriptButton from a module by Id'. It uses a specific verb ('removes'), identifies the resource ('ScriptButton'), and specifies the scope ('from a module by Id'). This distinguishes it from siblings like 'deploy_script_button' (create) and 'update_script_button' (modify).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no explicit guidance on when to use this tool versus alternatives like 'deploy_script_button' or 'update_script_button'. It does not mention prerequisites, when not to use, or how it fits into a workflow. The word 'permanently' hints at irreversibility but is not a substitute for explicit guidelines.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
deploy_script_buttonBDestructive
Installs a new ScriptButton into a specific module (Name, Script, Icon, Tooltip).
| Name | Required | Description | Default |
|---|---|---|---|
| pid | Yes | ||
| name | Yes | ||
| tooltip | No | ||
| icon_name | No | Default | |
| module_id | Yes | ||
| script_Path | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations mark destructiveHint=true, but description doesn't disclose what makes it destructive (e.g., overwriting existing buttons). No contradiction, but missing detail.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence with 10 words, no fluff. Clearly states purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 6 parameters, a destructive hint, and an output schema, the description is too sparse. Does not explain critical parameters like pid and module_id, nor return behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, but description lists Name, Script, Icon, Tooltip which helps map to parameters. However, pid and module_id remain unexplained.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description uses specific verb 'Installs' with clear resource 'ScriptButton into a specific module', and mentions parameters in parentheses. Distinct from sibling tools like update_script_button.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool vs alternatives like update_script_button or delete_script_button. Doesn't mention prerequisites or context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_buttons_dataARead-only
Lists all script buttons for a specific module ID.
| Name | Required | Description | Default |
|---|---|---|---|
| pid | Yes | ||
| module_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the description adds little beyond that. It mentions the tool lists buttons by module ID, which is consistent but not additional behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence, concise and front-loaded. No unnecessary words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Description is minimal given two parameters without explanation. Output schema exists but is not shown; return values may be documented there. However, more context about the purpose of pid would improve completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%; description does not explain the parameters pid or module_id beyond implying module_id is the module ID. With low coverage, the description fails to add meaning to the parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states verb 'Lists' and resource 'script buttons' with a qualifier 'for a specific module ID'. It is specific and distinguishes from sibling tools like delete_script_button or deploy_script_button.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit when-to-use or when-not-to-use guidance. However, the read-only nature is implied by the description and annotations, distinguishing it from mutation tools among siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_output_window_statusBRead-only
Checks if the output window is currently available/visible.
| Name | Required | Description | Default |
|---|---|---|---|
| pid | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true. Description adds minimal context about checking availability/visibility, but does not specify return format or edge cases. Adequate but not comprehensive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence with no wasted words. Front-loaded and efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with a single parameter and an output schema, the description is minimal but acceptable. However, the lack of parameter explanation and return value context leaves room for improvement.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% with no parameter descriptions. The description does not mention the 'pid' parameter, leaving the agent without any context on what value to provide.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'checks' and the resource 'output window status' with specific scope 'available/visible'. It uniquely distinguishes this tool from sibling tools like viewer_status or check_plugin_status.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives. No mention of prerequisites or context. Usage context is implied from the tool name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_pynet_ui_layoutCRead-only
Fetches the full UI structure (ButtonsModules and ScriptButtons).
| Name | Required | Description | Default |
|---|---|---|---|
| pid | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations provide readOnlyHint=true, so the tool is safe. The description adds context about the fetched content (ButtonsModules and ScriptButtons). It does not disclose potential errors, performance implications, or authorization needs, but annotations cover the safety aspect.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence, front-loaded with the core action. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
While the output schema exists, the description omits explanation of the required 'pid' parameter. It also lacks comparison with sibling tools. For a tool with one required parameter, this is insufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description does not explain the 'pid' parameter. The agent has no information about what 'pid' represents or how to use it.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool fetches the full UI structure (ButtonsModules and ScriptButtons). The verb 'Fetches' and resource are specific, but it does not explicitly differentiate from sibling tools like 'get_buttons_data'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives. The description implies it is for obtaining the full UI layout, but does not mention exclusions or context (e.g., compare with get_buttons_data).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_active_instancesARead-only
Scans the system for running Autodesk processes with an active PyNet IPC pipe.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint=true, and description adds behavioral context by specifying the condition of an active PyNet IPC pipe, which is valuable beyond the annotation. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence, front-loaded with action, no unnecessary words. Highly efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given zero parameters and an existing output schema, the description fully explains the tool's purpose and behavior. It is complete for an agent to invoke without additional context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters exist, so schema coverage is 100%. The description adds meaning by defining the scope of scanning (processes with active pipe), which compensates for the absence of parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly specifies the verb 'scans' and the resource 'running Autodesk processes with an active PyNet IPC pipe', distinguishing it from sibling tools which focus on plugin, UI, or viewer operations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool versus alternatives. While sibling tools are different, the description implies its usage for discovering active instances, but no when-not-to or prerequisites are stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
send_commandBDestructive
Direct script execution in the PyNet engine (Target PID, Script Name, Content).
| Name | Required | Description | Default |
|---|---|---|---|
| pid | Yes | ||
| content | Yes | ||
| timeout | Yes | ||
| script_name | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark destructiveHint=true; description adds 'direct script execution' but lacks details on side effects or permissions beyond annotation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence with parenthetical list; efficient but could better structure parameter explanation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Destructive tool with 4 required params and no schema descriptions; description lacks scripting constraints, output explanation, and usage context despite having an output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema coverage, description mentions pid, script_name, content but omits timeout and offers no format/type guidance for content or script_name.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states verb 'execute' and resource 'script' with key parameters (PID, Script Name, Content), distinguishing from sibling send_command_by_path which uses path instead of PID.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Implies usage for direct script execution by PID but provides no explicit conditions or comparison with alternative send_command_by_path.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
send_command_by_pathADestructive
Executes a script file directly by path in the PyNet engine, without sending content inline.
| Name | Required | Description | Default |
|---|---|---|---|
| pid | Yes | ||
| timeout | Yes | ||
| file_path | Yes | ||
| script_name | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Description aligns with annotations (destructiveHint=true) and adds the behavioral distinction of executing via path vs inline. However, it does not disclose other traits like authentication needs, rate limits, or side effects beyond execution.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence that is front-loaded and efficient, with no wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite having an output schema (not shown), the description omits critical context for a destructive, path-based execution tool: file existence, permissions, error handling, and typical usage scenarios. This is inadequate given the tool's complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema has 0% description coverage, and the description provides no meaning for any of the 4 required parameters (pid, script_name, file_path, timeout). The agent must infer solely from parameter names, which is insufficient for correct invocation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the action ('Executes a script file directly by path') and the resource ('in the PyNet engine'), and contrasts with inline sending, distinguishing it from sibling tool 'send_command'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Implied usage when a script file path is available, but no explicit guidance on when to use this tool versus alternatives like send_command, nor any exclusions or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_script_buttonBDestructive
Updates metadata for an existing ScriptButton or moves it to another module.
| Name | Required | Description | Default |
|---|---|---|---|
| pid | Yes | ||
| name | Yes | ||
| tooltip | Yes | ||
| button_id | Yes | ||
| icon_name | Yes | ||
| module_id | Yes | ||
| script_Path | Yes | ||
| dest_module_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare destructiveHint=true, and the description confirms mutation by using 'updates' and 'moves'. However, no additional behavioral details are given (e.g., authorization requirements, side effects, or rollback capabilities), so the description adds limited value beyond the annotation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that efficiently communicates the two core functions upfront. There is no redundant information, and every word contributes to understanding the tool's purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite having 8 parameters (7 required) and an output schema, the description does not clarify parameter groupings, the optional nature of dest_module_id for moving, or what the output contains. An agent would need additional context to use the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description should compensate but only weakly connects 'metadata' to parameters like name, tooltip, and icon_name, and 'move' to dest_module_id. It does not explain the role of each parameter or provide examples, leaving the agent to infer the mapping.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states two specific actions (updating metadata and moving to another module) with a concrete resource (ScriptButton). It effectively distinguishes from sibling tools like delete_script_button and deploy_script_button by specifying the operations that are unique to this tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for updating or moving a ScriptButton, but it does not explicitly state when to use this tool versus alternatives such as delete_script_button or deploy_script_button. No exclusions or context-specific guidance is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
viewer_clearARead-only
Clears highlights and ghosting in the open viewer.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint: true, but the operation modifies the viewer's visual state. The description does not elaborate on side effects or whether the action is reversible. However, it is clear that it removes existing highlights/ghosting.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, informative sentence with no unnecessary words. It front-loads the core action and object.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with no parameters and an output schema, the description is sufficient. It could be improved by noting that it affects only the open viewer.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has no parameters, so the baseline is 4. The description does not need to add parameter details since the schema is empty and 100% covered.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific action ('clears') and the target resource ('highlights and ghosting in the open viewer'). It distinguishes from sibling tools like viewer_highlight_clash and viewer_isolate.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool versus alternatives. The description implies it should be used after highlights or ghosting are applied, but does not mention prerequisites or scenarios.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
viewer_fitARead-only
Fits the camera to all models in the open viewer.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=true, so the read-only safety is covered. The description adds value by specifying that the camera fits to 'all models' (not just selected), which is a behavioral trait. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that is perfectly front-loaded and contains no fluff. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has no parameters, simple action, and an output schema (mentioned in context), the description is complete. An agent can understand exactly what the tool does without additional context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are zero parameters, and schema coverage is 100% trivially. The description does not need to add parameter details. Baseline 4 is appropriate for no parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('fits the camera') and the target ('all models in the open viewer'), distinguishing it from sibling tools like 'viewer_isolate' or 'viewer_clear'. The verb 'fits' is slightly technical but specific enough for an AI agent.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool vs alternatives like 'viewer_isolate' or 'viewer_select'. It lacks context for prerequisites or situations where this tool is appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
viewer_get_propertiesARead-only
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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| model | No | ||
| offset | No | ||
| search | No | ||
| pnt_ids | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare readOnlyHint, so the description carries most of the burden and fills it well: it discloses the return shape of each mode (full psets vs pnt_id/name/model index), the default page size (200) and hard cap (500), the scale risk on federated models (tens of thousands of entries), and the crucial provenance constraint that data comes from properties.json rather than the viewer or IFC.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Content is front-loaded on the core read behavior, then mode-specific guidance, then the data-source caveat. It is four paragraphs and slightly longer than strictly necessary, but each paragraph adds distinct, non-redundant information, so no sentence is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers both invocation modes, filtering, pagination, scale caveats, and the data source; an output schema exists so return values need not be explained. Nothing required to call this read-only tool correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate and does: pnt_ids as full-property lookup keys, model as an exact model/discipline name with a concrete example, search as a case-insensitive substring of element name, and limit/offset semantics including the 200 default and 500 cap. Every parameter gains meaning beyond its bare title and type.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Reads element properties ... from properties.json') and clearly splits behavior into two modes (pnt_ids for full properties, no pnt_ids for a lightweight paginated index). It does not name any sibling tool, so the differentiation from tools like viewer_get_state or viewer_list_clashes is left implicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit branch conditions: pass one or more pnt_ids for full properties, call with no pnt_ids for the index. It further instructs to narrow with model and/or search, page with limit/offset, and warns to 'always pass model or search when you can' on federated models. This is actionable when-to-use guidance with a concrete heuristic.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
viewer_get_stateARead-only
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With readOnlyHint=true already declaring the safety profile, the description still earns credit by disclosing the null-if-nothing-selected behavior and the source of the selection (3D view click or tree panel). It stops short of describing refresh semantics (is state 'last reported' cached or live), which matters for a state reader.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences: the first defines the return payload, the second routes the agent onward. Nothing is redundant and the payload definition is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists and the description anyway names the key fields plus the null condition, so an agent can act immediately. For a zero-param read tool, nothing material is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Zero parameters, so there is nothing for the description to disambiguate; the schema and description are consistent. Baseline 4 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('reads') and resource ('viewer's last reported state'), and enumerates the payload (loaded models, selected pnt_id). It does not, however, distinguish itself from the sibling viewer_status, which by name may return overlapping state information.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Clearly frames the tool's role in a workflow â take the returned pnt_id to viewer_get_properties for details, or into a clashes.json lookup. That is strong downstream guidance, but it never states when to prefer this over viewer_status or viewer_get_properties directly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
viewer_highlight_clashADestructive
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.
| Name | Required | Description | Default |
|---|---|---|---|
| pnt_id_a | No | ||
| pnt_id_b | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations supply only destructiveHint=true; the description adds genuinely new behavioral context: the red/green coloring, that everything else is isolated away (which explains the viewer-state mutation behind the destructive hint), and that lists are accepted on either side. It does not discuss whether the prior view state is recoverable, but it substantially enriches the thin annotation set.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the core action and color mapping, then the cardinality nuance. No wasted wording, though the parenthetical list example is slightly verbose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Output schema exists so return values need no explanation, and the parameters are covered. What is missing is routing guidance against the many viewer_* siblings and any note on how destructive the isolation is to the current view state.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% and neither pnt_id_a nor pnt_id_b is described in the schema, but the description compensates well by mapping A to red and B to green and clarifying the string-or-list shape of both. This is close to the full meaning an agent needs, though it never explains what a pnt_id refers to.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (highlights) and resource (a clash), plus the exact visual semantics â element(s) A red, element(s) B green â and the side effect of isolating everything else. An agent can distinguish this from viewer_isolate and viewer_select on the color/isolate behavior alone.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains how the parameters behave (one id per side vs a list) but never states when to reach for this tool instead of viewer_isolate, viewer_select, or viewer_list_clashes. No prerequisites or exclusions are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
viewer_isolateADestructive
Isolates (hides everything except) the given pnt_ids in the open viewer.
| Name | Required | Description | Default |
|---|---|---|---|
| pnt_ids | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare destructiveHint=true, and the description usefully clarifies the semantics of isolation (that everything else becomes hidden), which is meaningful context for a mutation of viewer state. It does not, however, say how to restore visibility (viewer_clear/viewer_fit) or that isolation replaces prior visibility state.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, front-loaded sentence with zero wasted words, and the parenthetical definition is placed immediately where it is needed.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained. For a one-parameter viewer operation the description is largely adequate, though it omits the prerequisite of an open viewer and the interaction with sibling viewer operations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and there is one parameter, so the description must compensate. It names the parameter (pnt_ids) and implies its meaning (point/entity IDs to keep visible), but provides no format, source, or behavior when the array is empty. Baseline 3 is appropriate given the partial compensation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (isolates) and resource (the given pnt_ids in the open viewer) and even parenthetically defines what 'isolates' means (hides everything except). Distinguishable from the sibling viewer_isolate_models, which operates on models rather than pnt_ids.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool is a viewer filter operation but gives no explicit when-to-use guidance, no prerequisite (a viewer must be open), and never names the alternative viewer_isolate_models. The distinction from that sibling is left to the reader.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
viewer_isolate_modelsADestructive
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.
| Name | Required | Description | Default |
|---|---|---|---|
| models | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag destructiveHint=true; the description adds the actual effect ('hiding every other loaded model') and the recovery path via viewer_clear, which the annotation alone doesn't convey. It doesn't mention whether the hide is scoped to the session or persisted, so it falls just short of a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, front-loaded with the effect, then the cost/alternative rationale, then sourcing and undo. No filler and nothing buried.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists so return values need no explanation; the description covers the effect, argument sourcing, alternative selection, and reversal. Nothing an agent needs to call this correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must carry the parameter meaning, and it does: exact-name matching, a concrete example ('Snowdon Towers Sample HVAC'), and the authoritative source for names (viewer_get_state's 'models' list). It stops short of stating array/multi-value behavior or what happens on an unmatched name.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('shows only the given model(s)/discipline(s)... hiding every other loaded model') and names the siblings it differs from (viewer_isolate, viewer_clear, viewer_get_state). An agent can distinguish this from viewer_isolate without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says when to prefer this over viewer_isolate ('cheaper... no need to resolve every element's pnt_id first'), where to source the required names (viewer_get_state's 'models' list), and how to reverse it (viewer_clear). When, why, and alternatives are all present.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
viewer_list_clashesARead-only
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=true; description adds context that it reads a specific file (clashes.json) rather than viewer data. No contradictions. Clarifies the non-destructive nature and data source.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences covering purpose, data source, and key output. No extraneous content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given zero parameters, presence of output schema, and simple read-only operation, the description provides sufficient context. It mentions the critical return element (pnt_id identifiers) that aids tool selection.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters (schema coverage 100%). Description adds meaning by specifying that the return includes pnt_id identifiers for highlighting, which is useful beyond the empty schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states it reads clashes.json (data source) and returns clash data with pnt_id identifiers for highlighting. Distinguishes from viewer/IFC and sibling tools like viewer_highlight_clash.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explains the tool's input (loaded package's clashes.json) and output (pnt_id identifiers). Implicitly contrasts with viewer/IFC and highlighting tool, but does not explicitly state when not to use alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
viewer_load_packageBDestructive
Loads a .pnt into the open viewer and returns a summary read from clashes.json.
| Name | Required | Description | Default |
|---|---|---|---|
| pnt_path | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate destructive hint, so description should elaborate on side effects. It mentions loading but does not clarify if previous viewer state is cleared, overwritten, or merged. The return of a summary is noted but not the behavioral impact on viewer state.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence, efficient, front-loaded with action and result. No unnecessary words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the destructive hint and a single parameter, the description lacks completeness. It does not state if viewer must be empty, if loading fails gracefully, or how the summary is used. Output schema is present but not described.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so description must add meaning. It mentions 'pnt_path' implicitly but provides no details on file format, required permissions, or format constraints. The parameter is not explained beyond its name.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('loads'), the resource ('.pnt file'), the destination ('open viewer'), and the return value ('summary from clashes.json'). It is specific and distinguishes from sibling tools like viewer_clear or viewer_highlight_clash.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives. It does not mention prerequisites (e.g., viewer must be open) or typical workflow (e.g., use after viewer_list_clashes).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
viewer_selectADestructive
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.
| Name | Required | Description | Default |
|---|---|---|---|
| pnt_ids | No | ||
| pnt_ids_b | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only give destructiveHint=true, so the description must carry the real behavioural burden â and it does, disclosing that selection uses neutral yellow/blue colours, hides nothing else, and REPLACES any previous selection (which explains the destructive hint). What it doesn't cover is whether the selection persists across reloads or what the call returns, so it stops short of a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action and its visual effect, then parameter usage, then alternatives. Every sentence carries information; there is no filler or restatement of the name.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, return values need not be described, and the description covers purpose, both parameters, side effects (replacement), and sibling routing. Nothing an agent needs to invoke it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% (bare array-of-string titles), so the description must compensate, and it does: pnt_ids is 'group A' and pnt_ids_b is an optional second group highlighted in a distinct colour. The only gap is that it never states the pnt_id string format or whether the call errors on unknown ids.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (highlights) plus resource (a set of elements in the open viewer) and the scope ('by pnt_id, in neutral colours... with nothing else hidden'). It explicitly distinguishes itself from viewer_highlight_clash, which is named as a sibling for a different effect.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Names the concrete alternatives and the conditions that select them: viewer_list_clashes / viewer_get_properties to obtain pnt_ids, and viewer_highlight_clash for a clash pair with the model isolated. A caller knows both when to use this tool and when to route elsewhere.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
viewer_statusARead-only
Reports whether a PyNet BIM Viewer is open in VS Code (port, package, data dir).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the description adds value by specifying the reported status info. No contradictions exist, but the description does not elaborate on other behavioral traits like authentication or permissions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, well-structured sentence that conveys the core purpose and output immediately. No unnecessary words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the absence of parameters, the presence of readOnlyHint annotation, and an output schema, the description sufficiently explains what the tool does. It lacks only minor context like error conditions or response format, but the output schema covers that.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the description does not need to explain parameter semantics. The baseline score of 4 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: reports whether a PyNet BIM Viewer is open in VS Code, and specifies the details it provides (port, package, data dir). While it differentiates from siblings by focusing on the viewer status, it does not explicitly exclude other status-checking tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives such as check_plugin_status or list_active_instances. Agents must rely on the tool name and context to infer usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
3 tool updates
v1.5.6- Changed
viewer_get_properties4 fields changed- added
Input schema / properties / limitAdded value: +{ + "default": 200, + "title": "Limit", + "type": "integer" +} - added
Input schema / properties / modelAdded value: +{ + "default": null, + "title": "Model", + "type": "string" +} - added
Input schema / properties / offsetAdded value: +{ + "default": 0, + "title": "Offset", + "type": "integer" +} - added
Input schema / properties / searchAdded value: +{ + "default": null, + "title": "Search", + "type": "string" +}
- Changed
viewer_highlight_clash4 fields changed- added
Input schema / properties / pnt_id_a / anyOfAdded value: +[ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } +] - removed
Input schema / properties / pnt_id_a / typeRemoved value: -"string" - added
Input schema / properties / pnt_id_b / anyOfAdded value: +[ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } +] - removed
Input schema / properties / pnt_id_b / typeRemoved value: -"string"
- Added
viewer_isolate_models
12 tool updates
v1.1.0- Changed
send_command2 fields changed- added
Input schema / properties / timeoutAdded value: +{ + "title": "Timeout", + "type": "number" +} - changed
Input schema / requiredPrevious value: -[ - "pid", - "script_name", - "content" -]New value: +[ + "pid", + "script_name", + "content", + "timeout" +]
- Added
send_command_by_path - Added
viewer_clear - Added
viewer_fit - Added
viewer_get_properties - Added
viewer_get_state - Added
viewer_highlight_clash - Added
viewer_isolate - Added
viewer_list_clashes - Added
viewer_load_package - Added
viewer_select - Added
viewer_status
1 tool update
v1.0.1- Added
deploy_script_button
11 tool updates
v1.0.0- First observed
check_plugin_status - First observed
configure_output_window - First observed
create_pynet_module - First observed
delete_pynet_module - First observed
delete_script_button - First observed
get_buttons_data - First observed
get_output_window_status - First observed
get_pynet_ui_layout - First observed
list_active_instances - First observed
send_command - First observed
update_script_button
TDQS
Scored across 24 tools
The viewer tools overlap heavily: viewer_isolate vs viewer_isolate_models, viewer_select vs viewer_highlight_clash, and viewer_get_properties vs viewer_list_clashes all operate on similar element-visibility/data concepts. The descriptions explicitly cross-reference each other ('use X instead'), which mostly resolves selection, but an agent must read carefully to pick correctly.
All tools use snake_case verb_noun form, which is readable and consistent. There are minor grouping deviations (some tools carry a viewer_ prefix, some a pynet_ prefix, others are bare like send_command or check_plugin_status), but no camelCase/snake_case mixing.
24 tools is on the heavy side for the apparent scope. The UI/module management and IPC scripting areas are reasonably tight, but the viewer control surface alone accounts for eleven tools and could be consolidated.
CRUD for modules and script buttons is largely covered (create/read/update/delete), and the viewer has load, fit, clear, isolate, highlight, select, state, properties, and clash lookup. Minor gaps like no module update/rename and no viewer unload/close keep it from fully complete.
Maintenance
Related MCP Connectors
A2a Governance Bridge MCP Server by MEOK AI Labs
MCP Server for an Agent Task Marketplace
Telegram bridge for your MCP-compatible agent. Bidirectional, no LLM in our stack.
Agent communication platform for agent to agent messaging via MCP. Messages, channels, skills.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceControl AI agents creation and modification via MCP.680 npmMIT
- AlicenseAqualityFmaintenanceA bridge server that enables MCP-compatible AI assistants like Claude to seamlessly discover, communicate with, and manage A2A protocol agents.724 PyPI147Apache 2.0
- AlicenseBqualityFmaintenanceA bridge server that connects Agent Communication Protocol (ACP) agents with Model Context Protocol (MCP) clients, enabling seamless integration between ACP-based AI agents and MCP-compatible tools like Claude Desktop.16107 PyPI24MIT
- AlicenseNot gradedqualityCmaintenanceMCP server for cross-platform agent onboarding. Registers external agents, translates intents from LangChain, CrewAI, AutoGen, and A2A formats, and proxies cross-ecosystem transactions.MIT