Skip to main content
Glama

Edit Xpresso Port

set_xpresso_port

Add, remove, connect, disconnect, or set default values for Cinema 4D Xpresso node ports when apply_xpresso_graph cannot express the needed wiring.

Instructions

Low-level Xpresso port primitive — covers cases apply_xpresso_graph can't express. action:'add' adds a new input/output port via GvNode.AddPort(port_id). connect wires this node's port to target (on a peer node identified by target.node_handle); output-vs-input direction is auto-detected. disconnect removes incoming connections from port. set_value writes the port's default. remove deletes the port. Use list_xpresso_nodes first to discover node path ids and existing ports.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
ioNoDirection for `add`.
nodeYesgv_node handle for the operated-on GvNode.
portNoTarget port selector. Required for remove / connect / disconnect / set_value.
valueNoNew default value for `set_value`. [x,y,z] is coerced to c4d.Vector.
actionYesOperation to perform.
targetNoPeer port selector (with its node_handle). Required for connect.
port_idNoPort main id passed to GvNode.AddPort (required for `add`).

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed6 schema fields changedv0.5.1
    • removedInput schema / definitions
      Removed value: -{
      -  "__schema0": {
      -    "anyOf": [
      -      {
      -        "properties": {
      -          "kind": {
      -            "const": "object",
      -            "type": "string"
      -          },
      -          "name": {
      -            "type": "string"
      -          },
      -          "path": {
      -            "type": "string"
      -          }
      -        },
      -        "required": [
      -          "kind"
      -        ],
      -        "type": "object"
      -      },
      -      {
      -        "properties": {
      -          "kind": {
      -            "const": "render_data",
      -            "type": "string"
      -          },
      -          "name": {
      -            "type": "string"
      -          }
      -        },
      -        "required": [
      -          "kind",
      -          "name"
      -        ],
      -        "type": "object"
      -      },
      -      {
      -        "properties": {
      -          "kind": {
      -            "const": "take",
      -            "type": "string"
      -          },
      -          "name": {
      -            "type": "string"
      -          }
      -        },
      -        "required": [
      -          "kind",
      -          "name"
      -        ],
      -        "type": "object"
      -      },
      -      {
      -        "properties": {
      -          "kind": {
      -            "const": "material",
      -            "type": "string"
      -          },
      -          "name": {
      -            "type": "string"
      -          }
      -        },
      -        "required": [
      -          "kind",
      -          "name"
      -        ],
      -        "type": "object"
      -      },
      -      {
      -        "properties": {
      -          "kind": {
      -            "const": "layer",
      -            "type": "string"
      -          },
      -          "name": {
      -            "type": "string"
      -          }
      -        },
      -        "required": [
      -          "kind",
      -          "name"
      -        ],
      -        "type": "object"
      -      },
      -      {
      -        "properties": {
      -          "kind": {
      -            "const": "tag",
      -            "type": "string"
      -          },
      -          "object": {
      -            "type": "string"
      -          },
      -          "object_path": {
      -            "type": "string"
      -          },
      -          "tag_name": {
      -            "type": "string"
      -          },
      -          "type_id": {
      -            "maximum": 9007199254740991,
      -            "minimum": -9007199254740991,
      -            "type": "integer"
      -          }
      -        },
      -        "required": [
      -          "kind"
      -        ],
      -        "type": "object"
      -      },
      -      {
      -        "properties": {
      -          "kind": {
      -            "const": "video_post",
      -            "type": "string"
      -          },
      -          "render_data": {
      -            "type": "string"
      -          },
      -          "type_id": {
      -            "maximum": 9007199254740991,
      -            "minimum": -9007199254740991,
      -            "type": "integer"
      -          }
      -        },
      -        "required": [
      -          "kind",
      -          "render_data",
      -          "type_id"
      -        ],
      -        "type": "object"
      -      },
      -      {
      -        "properties": {
      -          "index": {
      -            "maximum": 9007199254740991,
      -            "minimum": 0,
      -            "type": "integer"
      -          },
      -          "kind": {
      -            "const": "shader",
      -            "type": "string"
      -          },
      -          "name": {
      -            "type": "string"
      -          },
      -          "owner": {
      -            "allOf": [
      -              {
      -                "$ref": "#/definitions/__schema0"
      -              }
      -            ]
      -          }
      -        },
      -        "required": [
      -          "kind",
      -          "owner"
      -        ],
      -        "type": "object"
      -      },
      -      {
      -        "properties": {
      -          "id": {
      -            "type": "string"
      -          },
      -          "kind": {
      -            "const": "gv_node",
      -            "type": "string"
      -          },
      -          "name": {
      -            "type": "string"
      -          },
      -          "tag": {
      -            "allOf": [
      -              {
      -                "$ref": "#/definitions/__schema0"
      -              }
      -            ]
      -          }
      -        },
      -        "required": [
      -          "kind",
      -          "tag"
      -        ],
      -        "type": "object"
      -      },
      -      {
      -        "properties": {
      -          "kind": {
      -            "const": "plugin_options",
      -            "type": "string"
      -          },
      -          "plugin_id": {
      -            "anyOf": [
      -              {
      -                "maximum": 9007199254740991,
      -                "minimum": -9007199254740991,
      -                "type": "integer"
      -              },
      -              {
      -                "type": "string"
      -              }
      -            ]
      -          },
      -          "plugin_type": {
      -            "enum": [
      -              "command",
      -              "object",
      -              "tag",
      -              "material",
      -              "shader",
      -              "video_post",
      -              "scene_loader",
      -              "scene_saver",
      -              "bitmap_loader",
      -              "bitmap_saver",
      -              "tool",
      -              "preference",
      -              "node",
      -              "sculpt_brush"
      -            ],
      -            "type": "string"
      -          }
      -        },
      -        "required": [
      -          "kind",
      -          "plugin_id"
      -        ],
      -        "type": "object"
      -      }
      -    ]
      -  }
      -}
    • removedInput schema / properties / node / allOf
      Removed value: -[
      -  {
      -    "$ref": "#/definitions/__schema0"
      -  }
      -]
    • addedInput schema / properties / node / anyOf
      Added value: +[
      +  {
      +    "properties": {
      +      "kind": {
      +        "const": "object",
      +        "type": "string"
      +      },
      +      "name": {
      +        "type": "string"
      +      },
      +      "path": {
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "kind"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "properties": {
      +      "kind": {
      +        "const": "render_data",
      +        "type": "string"
      +      },
      +      "name": {
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "kind",
      +      "name"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "properties": {
      +      "kind": {
      +        "const": "take",
      +        "type": "string"
      +      },
      +      "name": {
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "kind",
      +      "name"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "properties": {
      +      "kind": {
      +        "const": "material",
      +        "type": "string"
      +      },
      +      "name": {
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "kind",
      +      "name"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "properties": {
      +      "kind": {
      +        "const": "layer",
      +        "type": "string"
      +      },
      +      "name": {
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "kind",
      +      "name"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "properties": {
      +      "kind": {
      +        "const": "tag",
      +        "type": "string"
      +      },
      +      "object": {
      +        "type": "string"
      +      },
      +      "object_path": {
      +        "type": "string"
      +      },
      +      "tag_name": {
      +        "type": "string"
      +      },
      +      "type_id": {
      +        "maximum": 9007199254740991,
      +        "minimum": -9007199254740991,
      +        "type": "integer"
      +      }
      +    },
      +    "required": [
      +      "kind"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "properties": {
      +      "kind": {
      +        "const": "video_post",
      +        "type": "string"
      +      },
      +      "render_data": {
      +        "type": "string"
      +      },
      +      "type_id": {
      +        "maximum": 9007199254740991,
      +        "minimum": -9007199254740991,
      +        "type": "integer"
      +      }
      +    },
      +    "required": [
      +      "kind",
      +      "render_data",
      +      "type_id"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "properties": {
      +      "kind": {
      +        "const": "plugin_options",
      +        "type": "string"
      +      },
      +      "plugin_id": {
      +        "anyOf": [
      +          {
      +            "maximum": 9007199254740991,
      +            "minimum": -9007199254740991,
      +            "type": "integer"
      +          },
      +          {
      +            "type": "string"
      +          }
      +        ]
      +      },
      +      "plugin_type": {
      +        "enum": [
      +          "command",
      +          "object",
      +          "tag",
      +          "material",
      +          "shader",
      +          "video_post",
      +          "scene_loader",
      +          "scene_saver",
      +          "bitmap_loader",
      +          "bitmap_saver",
      +          "tool",
      +          "preference",
      +          "node",
      +          "sculpt_brush"
      +        ],
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "kind",
      +      "plugin_id"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "properties": {
      +      "index": {
      +        "maximum": 9007199254740991,
      +        "minimum": 0,
      +        "type": "integer"
      +      },
      +      "kind": {
      +        "const": "shader",
      +        "type": "string"
      +      },
      +      "name": {
      +        "type": "string"
      +      },
      +      "owner": {
      +        "additionalProperties": {},
      +        "description": "Handle of the shader's owner (material, object, tag, video_post, or shader).",
      +        "properties": {
      +          "kind": {
      +            "type": "string"
      +          }
      +        },
      +        "required": [
      +          "kind"
      +        ],
      +        "type": "object"
      +      }
      +    },
      +    "required": [
      +      "kind",
      +      "owner"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "properties": {
      +      "id": {
      +        "type": "string"
      +      },
      +      "kind": {
      +        "const": "gv_node",
      +        "type": "string"
      +      },
      +      "name": {
      +        "type": "string"
      +      },
      +      "tag": {
      +        "properties": {
      +          "kind": {
      +            "const": "tag",
      +            "type": "string"
      +          },
      +          "object": {
      +            "type": "string"
      +          },
      +          "object_path": {
      +            "type": "string"
      +          },
      +          "tag_name": {
      +            "type": "string"
      +          },
      +          "type_id": {
      +            "maximum": 9007199254740991,
      +            "minimum": -9007199254740991,
      +            "type": "integer"
      +          }
      +        },
      +        "required": [
      +          "kind"
      +        ],
      +        "type": "object"
      +      }
      +    },
      +    "required": [
      +      "kind",
      +      "tag"
      +    ],
      +    "type": "object"
      +  }
      +]
    • removedInput schema / properties / target / properties / node_handle / allOf
      Removed value: -[
      -  {
      -    "$ref": "#/definitions/__schema0"
      -  }
      -]
    • addedInput schema / properties / target / properties / node_handle / anyOf
      Added value: +[
      +  {
      +    "properties": {
      +      "kind": {
      +        "const": "object",
      +        "type": "string"
      +      },
      +      "name": {
      +        "type": "string"
      +      },
      +      "path": {
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "kind"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "properties": {
      +      "kind": {
      +        "const": "render_data",
      +        "type": "string"
      +      },
      +      "name": {
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "kind",
      +      "name"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "properties": {
      +      "kind": {
      +        "const": "take",
      +        "type": "string"
      +      },
      +      "name": {
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "kind",
      +      "name"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "properties": {
      +      "kind": {
      +        "const": "material",
      +        "type": "string"
      +      },
      +      "name": {
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "kind",
      +      "name"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "properties": {
      +      "kind": {
      +        "const": "layer",
      +        "type": "string"
      +      },
      +      "name": {
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "kind",
      +      "name"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "properties": {
      +      "kind": {
      +        "const": "tag",
      +        "type": "string"
      +      },
      +      "object": {
      +        "type": "string"
      +      },
      +      "object_path": {
      +        "type": "string"
      +      },
      +      "tag_name": {
      +        "type": "string"
      +      },
      +      "type_id": {
      +        "maximum": 9007199254740991,
      +        "minimum": -9007199254740991,
      +        "type": "integer"
      +      }
      +    },
      +    "required": [
      +      "kind"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "properties": {
      +      "kind": {
      +        "const": "video_post",
      +        "type": "string"
      +      },
      +      "render_data": {
      +        "type": "string"
      +      },
      +      "type_id": {
      +        "maximum": 9007199254740991,
      +        "minimum": -9007199254740991,
      +        "type": "integer"
      +      }
      +    },
      +    "required": [
      +      "kind",
      +      "render_data",
      +      "type_id"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "properties": {
      +      "kind": {
      +        "const": "plugin_options",
      +        "type": "string"
      +      },
      +      "plugin_id": {
      +        "anyOf": [
      +          {
      +            "maximum": 9007199254740991,
      +            "minimum": -9007199254740991,
      +            "type": "integer"
      +          },
      +          {
      +            "type": "string"
      +          }
      +        ]
      +      },
      +      "plugin_type": {
      +        "enum": [
      +          "command",
      +          "object",
      +          "tag",
      +          "material",
      +          "shader",
      +          "video_post",
      +          "scene_loader",
      +          "scene_saver",
      +          "bitmap_loader",
      +          "bitmap_saver",
      +          "tool",
      +          "preference",
      +          "node",
      +          "sculpt_brush"
      +        ],
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "kind",
      +      "plugin_id"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "properties": {
      +      "index": {
      +        "maximum": 9007199254740991,
      +        "minimum": 0,
      +        "type": "integer"
      +      },
      +      "kind": {
      +        "const": "shader",
      +        "type": "string"
      +      },
      +      "name": {
      +        "type": "string"
      +      },
      +      "owner": {
      +        "additionalProperties": {},
      +        "description": "Handle of the shader's owner (material, object, tag, video_post, or shader).",
      +        "properties": {
      +          "kind": {
      +            "type": "string"
      +          }
      +        },
      +        "required": [
      +          "kind"
      +        ],
      +        "type": "object"
      +      }
      +    },
      +    "required": [
      +      "kind",
      +      "owner"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "properties": {
      +      "id": {
      +        "type": "string"
      +      },
      +      "kind": {
      +        "const": "gv_node",
      +        "type": "string"
      +      },
      +      "name": {
      +        "type": "string"
      +      },
      +      "tag": {
      +        "properties": {
      +          "kind": {
      +            "const": "tag",
      +            "type": "string"
      +          },
      +          "object": {
      +            "type": "string"
      +          },
      +          "object_path": {
      +            "type": "string"
      +          },
      +          "tag_name": {
      +            "type": "string"
      +          },
      +          "type_id": {
      +            "maximum": 9007199254740991,
      +            "minimum": -9007199254740991,
      +            "type": "integer"
      +          }
      +        },
      +        "required": [
      +          "kind"
      +        ],
      +        "type": "object"
      +      }
      +    },
      +    "required": [
      +      "kind",
      +      "tag"
      +    ],
      +    "type": "object"
      +  }
      +]
    • changedInput schema / properties / value / anyOf
      Previous value: -[
      -  {
      -    "type": "boolean"
      -  },
      -  {
      -    "type": "number"
      -  },
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "items": [
      -      {
      -        "type": "number"
      -      },
      -      {
      -        "type": "number"
      -      },
      -      {
      -        "type": "number"
      -      }
      -    ],
      -    "type": "array"
      -  }
      -]New value: +[
      +  {
      +    "type": "boolean"
      +  },
      +  {
      +    "type": "number"
      +  },
      +  {
      +    "type": "string"
      +  },
      +  {
      +    "items": {
      +      "type": "number"
      +    },
      +    "maxItems": 3,
      +    "minItems": 3,
      +    "type": "array"
      +  }
      +]
  2. Changed1 schema field changedv0.4.3
    • changedInput schema / definitions / __schema0 / anyOf
      Previous value: -[
      -  {
      -    "properties": {
      -      "kind": {
      -        "const": "object",
      -        "type": "string"
      -      },
      -      "name": {
      -        "type": "string"
      -      },
      -      "path": {
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "kind"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "properties": {
      -      "kind": {
      -        "const": "render_data",
      -        "type": "string"
      -      },
      -      "name": {
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "kind",
      -      "name"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "properties": {
      -      "kind": {
      -        "const": "take",
      -        "type": "string"
      -      },
      -      "name": {
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "kind",
      -      "name"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "properties": {
      -      "kind": {
      -        "const": "material",
      -        "type": "string"
      -      },
      -      "name": {
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "kind",
      -      "name"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "properties": {
      -      "kind": {
      -        "const": "tag",
      -        "type": "string"
      -      },
      -      "object": {
      -        "type": "string"
      -      },
      -      "object_path": {
      -        "type": "string"
      -      },
      -      "tag_name": {
      -        "type": "string"
      -      },
      -      "type_id": {
      -        "maximum": 9007199254740991,
      -        "minimum": -9007199254740991,
      -        "type": "integer"
      -      }
      -    },
      -    "required": [
      -      "kind"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "properties": {
      -      "kind": {
      -        "const": "video_post",
      -        "type": "string"
      -      },
      -      "render_data": {
      -        "type": "string"
      -      },
      -      "type_id": {
      -        "maximum": 9007199254740991,
      -        "minimum": -9007199254740991,
      -        "type": "integer"
      -      }
      -    },
      -    "required": [
      -      "kind",
      -      "render_data",
      -      "type_id"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "properties": {
      -      "index": {
      -        "maximum": 9007199254740991,
      -        "minimum": 0,
      -        "type": "integer"
      -      },
      -      "kind": {
      -        "const": "shader",
      -        "type": "string"
      -      },
      -      "name": {
      -        "type": "string"
      -      },
      -      "owner": {
      -        "allOf": [
      -          {
      -            "$ref": "#/definitions/__schema0"
      -          }
      -        ]
      -      }
      -    },
      -    "required": [
      -      "kind",
      -      "owner"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "properties": {
      -      "id": {
      -        "type": "string"
      -      },
      -      "kind": {
      -        "const": "gv_node",
      -        "type": "string"
      -      },
      -      "name": {
      -        "type": "string"
      -      },
      -      "tag": {
      -        "allOf": [
      -          {
      -            "$ref": "#/definitions/__schema0"
      -          }
      -        ]
      -      }
      -    },
      -    "required": [
      -      "kind",
      -      "tag"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "properties": {
      -      "kind": {
      -        "const": "plugin_options",
      -        "type": "string"
      -      },
      -      "plugin_id": {
      -        "anyOf": [
      -          {
      -            "maximum": 9007199254740991,
      -            "minimum": -9007199254740991,
      -            "type": "integer"
      -          },
      -          {
      -            "type": "string"
      -          }
      -        ]
      -      },
      -      "plugin_type": {
      -        "enum": [
      -          "command",
      -          "object",
      -          "tag",
      -          "material",
      -          "shader",
      -          "video_post",
      -          "scene_loader",
      -          "scene_saver",
      -          "bitmap_loader",
      -          "bitmap_saver",
      -          "tool",
      -          "preference",
      -          "node",
      -          "sculpt_brush"
      -        ],
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "kind",
      -      "plugin_id"
      -    ],
      -    "type": "object"
      -  }
      -]New value: +[
      +  {
      +    "properties": {
      +      "kind": {
      +        "const": "object",
      +        "type": "string"
      +      },
      +      "name": {
      +        "type": "string"
      +      },
      +      "path": {
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "kind"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "properties": {
      +      "kind": {
      +        "const": "render_data",
      +        "type": "string"
      +      },
      +      "name": {
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "kind",
      +      "name"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "properties": {
      +      "kind": {
      +        "const": "take",
      +        "type": "string"
      +      },
      +      "name": {
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "kind",
      +      "name"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "properties": {
      +      "kind": {
      +        "const": "material",
      +        "type": "string"
      +      },
      +      "name": {
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "kind",
      +      "name"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "properties": {
      +      "kind": {
      +        "const": "layer",
      +        "type": "string"
      +      },
      +      "name": {
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "kind",
      +      "name"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "properties": {
      +      "kind": {
      +        "const": "tag",
      +        "type": "string"
      +      },
      +      "object": {
      +        "type": "string"
      +      },
      +      "object_path": {
      +        "type": "string"
      +      },
      +      "tag_name": {
      +        "type": "string"
      +      },
      +      "type_id": {
      +        "maximum": 9007199254740991,
      +        "minimum": -9007199254740991,
      +        "type": "integer"
      +      }
      +    },
      +    "required": [
      +      "kind"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "properties": {
      +      "kind": {
      +        "const": "video_post",
      +        "type": "string"
      +      },
      +      "render_data": {
      +        "type": "string"
      +      },
      +      "type_id": {
      +        "maximum": 9007199254740991,
      +        "minimum": -9007199254740991,
      +        "type": "integer"
      +      }
      +    },
      +    "required": [
      +      "kind",
      +      "render_data",
      +      "type_id"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "properties": {
      +      "index": {
      +        "maximum": 9007199254740991,
      +        "minimum": 0,
      +        "type": "integer"
      +      },
      +      "kind": {
      +        "const": "shader",
      +        "type": "string"
      +      },
      +      "name": {
      +        "type": "string"
      +      },
      +      "owner": {
      +        "allOf": [
      +          {
      +            "$ref": "#/definitions/__schema0"
      +          }
      +        ]
      +      }
      +    },
      +    "required": [
      +      "kind",
      +      "owner"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "properties": {
      +      "id": {
      +        "type": "string"
      +      },
      +      "kind": {
      +        "const": "gv_node",
      +        "type": "string"
      +      },
      +      "name": {
      +        "type": "string"
      +      },
      +      "tag": {
      +        "allOf": [
      +          {
      +            "$ref": "#/definitions/__schema0"
      +          }
      +        ]
      +      }
      +    },
      +    "required": [
      +      "kind",
      +      "tag"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "properties": {
      +      "kind": {
      +        "const": "plugin_options",
      +        "type": "string"
      +      },
      +      "plugin_id": {
      +        "anyOf": [
      +          {
      +            "maximum": 9007199254740991,
      +            "minimum": -9007199254740991,
      +            "type": "integer"
      +          },
      +          {
      +            "type": "string"
      +          }
      +        ]
      +      },
      +      "plugin_type": {
      +        "enum": [
      +          "command",
      +          "object",
      +          "tag",
      +          "material",
      +          "shader",
      +          "video_post",
      +          "scene_loader",
      +          "scene_saver",
      +          "bitmap_loader",
      +          "bitmap_saver",
      +          "tool",
      +          "preference",
      +          "node",
      +          "sculpt_brush"
      +        ],
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "kind",
      +      "plugin_id"
      +    ],
      +    "type": "object"
      +  }
      +]
  3. First observedv0.3.1

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the burden and does so well: it discloses that disconnect removes incoming connections, that connect auto-detects output/input direction, that remove deletes the port, and that set_value writes the default. It omits error behavior and whether add/remove are reversible, which for a local editing primitive is a minor gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the primitive's purpose and its relation to the sibling tool, then five compact per-action clauses and a prerequisite. Every sentence carries actionable information with no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 7-param tool with nested handle objects and no output schema, the description covers action-by-action behavior and the discovery prerequisite, which is what an agent needs to invoke it. It stops short of explaining failure modes or the value coercion edge cases beyond the schema note.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3, but the description adds real mapping value by tying parameters to actions: port_id is required for add, port for remove/connect/disconnect/set_value, target for connect, io for add. It also flags direction auto-detection that the schema's required dir field does not explain.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('low-level Xpresso port primitive') and immediately distinguishes it from the closest sibling by scoping it as cases apply_xpresso_graph can't express. Each of the five actions is defined with its effect.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Names the alternative (apply_xpresso_graph) with the condition that selects this tool, and gives an explicit prerequisite: 'Use list_xpresso_nodes first to discover node path ids and existing ports.' Both when-to-use and the discovery step are spelled out.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.