Skip to main content
Glama

Update infrastructure asset

update_infrastructure_asset
DestructiveIdempotent

Update an existing infrastructure asset (feature) by ID. To change geometry, provide a new GeoJSON Point/LineString matching the existing feature_type. Computed columns (length_m, slope_pct, risk_score) cannot be set. Requires infrastructure_assets:write scope.

Input Schema

NameRequiredDescriptionDefault
idYesInfrastructure asset ID
nameNo
lanesNo
modelNo
depth_mNo
qr_codeNo
site_idNo
width_mNo
geometryNoReplacement GeoJSON geometry
materialNo
quantityNo
image_urlNo
status_idNo
system_idNo
to_streetNo
road_classNoO. Reg. 239/02 road class 1-6 (1-2 arterial, 3-4 collector, 5-6 local)
building_idNo
data_sourceNo
descriptionNo
diameter_mmNo
from_streetNo
location_idNo
risk_factorNo
to_invert_mNo
external_idsNo
feature_codeNo
install_dateNo
asset_type_idNo
from_invert_mNo
purchase_costNo
purchase_dateNo
safety_impactNo
salvage_valueNo
serial_numberNo
to_feature_idNo
flow_directionNo
service_impactNo
condition_scoreNo
from_feature_idNo
manufacturer_idNo
system_class_idNo
system_group_idNo
unit_of_measureNo
financial_impactNo
regulatory_impactNo
reputation_impactNo
environmental_impactNo
last_maintenance_dateNo
unit_replacement_valueNo
expected_lifetime_yearsNo
salvage_value_percentageNo
positional_accuracy_classNo
likelihood_of_failure_scoreNo
consequence_of_failure_scoreNo
purchase_cost_calculation_methodNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed16 schema fields changed
    • changedInput schema / $schema
      Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • removedInput schema / additionalProperties
      Removed value: -false
    • addedInput schema / properties / asset_type_id / pattern
      Added value: +"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$"
    • addedInput schema / properties / building_id / pattern
      Added value: +"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$"
    • addedInput schema / properties / external_ids / propertyNames
      Added value: +{
      +  "type": "string"
      +}
    • addedInput schema / properties / from_feature_id / pattern
      Added value: +"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$"
    • changedInput schema / properties / geometry / anyOf
      Previous value: -[
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "coordinates": {
      -        "items": [
      -          {
      -            "type": "number"
      -          },
      -          {
      -            "type": "number"
      -          }
      -        ],
      -        "maxItems": 2,
      -        "minItems": 2,
      -        "type": "array"
      -      },
      -      "type": {
      -        "const": "Point",
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "type",
      -      "coordinates"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "coordinates": {
      -        "items": {
      -          "items": [
      -            {
      -              "type": "number"
      -            },
      -            {
      -              "type": "number"
      -            }
      -          ],
      -          "maxItems": 2,
      -          "minItems": 2,
      -          "type": "array"
      -        },
      -        "minItems": 2,
      -        "type": "array"
      -      },
      -      "type": {
      -        "const": "LineString",
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "type",
      -      "coordinates"
      -    ],
      -    "type": "object"
      -  }
      -]New value: +[
      +  {
      +    "properties": {
      +      "coordinates": {
      +        "items": false,
      +        "maxItems": 2,
      +        "minItems": 2,
      +        "prefixItems": [
      +          {
      +            "type": "number"
      +          },
      +          {
      +            "type": "number"
      +          }
      +        ],
      +        "type": "array"
      +      },
      +      "type": {
      +        "const": "Point",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "type",
      +      "coordinates"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "properties": {
      +      "coordinates": {
      +        "items": {
      +          "items": false,
      +          "maxItems": 2,
      +          "minItems": 2,
      +          "prefixItems": [
      +            {
      +              "type": "number"
      +            },
      +            {
      +              "type": "number"
      +            }
      +          ],
      +          "type": "array"
      +        },
      +        "minItems": 2,
      +        "type": "array"
      +      },
      +      "type": {
      +        "const": "LineString",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "type",
      +      "coordinates"
      +    ],
      +    "type": "object"
      +  }
      +]
    • addedInput schema / properties / id / pattern
      Added value: +"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$"
    • addedInput schema / properties / lanes / maximum
      Added value: +9007199254740991
    • addedInput schema / properties / location_id / pattern
      Added value: +"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$"
    • addedInput schema / properties / manufacturer_id / pattern
      Added value: +"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$"
    • addedInput schema / properties / site_id / pattern
      Added value: +"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$"
    • addedInput schema / properties / system_class_id / pattern
      Added value: +"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$"
    • addedInput schema / properties / system_group_id / pattern
      Added value: +"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$"
    • addedInput schema / properties / system_id / pattern
      Added value: +"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$"
    • addedInput schema / properties / to_feature_id / pattern
      Added value: +"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$"
  2. Changed16 schema fields changed
    • changedInput schema / $schema
      Previous value: -"https://json-schema.org/draft/2020-12/schema"New value: +"http://json-schema.org/draft-07/schema#"
    • addedInput schema / additionalProperties
      Added value: +false
    • removedInput schema / properties / asset_type_id / pattern
      Removed value: -"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$"
    • removedInput schema / properties / building_id / pattern
      Removed value: -"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$"
    • removedInput schema / properties / external_ids / propertyNames
      Removed value: -{
      -  "type": "string"
      -}
    • removedInput schema / properties / from_feature_id / pattern
      Removed value: -"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$"
    • changedInput schema / properties / geometry / anyOf
      Previous value: -[
      -  {
      -    "properties": {
      -      "coordinates": {
      -        "items": false,
      -        "maxItems": 2,
      -        "minItems": 2,
      -        "prefixItems": [
      -          {
      -            "type": "number"
      -          },
      -          {
      -            "type": "number"
      -          }
      -        ],
      -        "type": "array"
      -      },
      -      "type": {
      -        "const": "Point",
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "type",
      -      "coordinates"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "properties": {
      -      "coordinates": {
      -        "items": {
      -          "items": false,
      -          "maxItems": 2,
      -          "minItems": 2,
      -          "prefixItems": [
      -            {
      -              "type": "number"
      -            },
      -            {
      -              "type": "number"
      -            }
      -          ],
      -          "type": "array"
      -        },
      -        "minItems": 2,
      -        "type": "array"
      -      },
      -      "type": {
      -        "const": "LineString",
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "type",
      -      "coordinates"
      -    ],
      -    "type": "object"
      -  }
      -]New value: +[
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "coordinates": {
      +        "items": [
      +          {
      +            "type": "number"
      +          },
      +          {
      +            "type": "number"
      +          }
      +        ],
      +        "maxItems": 2,
      +        "minItems": 2,
      +        "type": "array"
      +      },
      +      "type": {
      +        "const": "Point",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "type",
      +      "coordinates"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "coordinates": {
      +        "items": {
      +          "items": [
      +            {
      +              "type": "number"
      +            },
      +            {
      +              "type": "number"
      +            }
      +          ],
      +          "maxItems": 2,
      +          "minItems": 2,
      +          "type": "array"
      +        },
      +        "minItems": 2,
      +        "type": "array"
      +      },
      +      "type": {
      +        "const": "LineString",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "type",
      +      "coordinates"
      +    ],
      +    "type": "object"
      +  }
      +]
    • removedInput schema / properties / id / pattern
      Removed value: -"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$"
    • removedInput schema / properties / lanes / maximum
      Removed value: -9007199254740991
    • removedInput schema / properties / location_id / pattern
      Removed value: -"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$"
    • removedInput schema / properties / manufacturer_id / pattern
      Removed value: -"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$"
    • removedInput schema / properties / site_id / pattern
      Removed value: -"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$"
    • removedInput schema / properties / system_class_id / pattern
      Removed value: -"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$"
    • removedInput schema / properties / system_group_id / pattern
      Removed value: -"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$"
    • removedInput schema / properties / system_id / pattern
      Removed value: -"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$"
    • removedInput schema / properties / to_feature_id / pattern
      Removed value: -"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$"
  3. Changed16 schema fields changed
    • changedInput schema / $schema
      Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • removedInput schema / additionalProperties
      Removed value: -false
    • addedInput schema / properties / asset_type_id / pattern
      Added value: +"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$"
    • addedInput schema / properties / building_id / pattern
      Added value: +"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$"
    • addedInput schema / properties / external_ids / propertyNames
      Added value: +{
      +  "type": "string"
      +}
    • addedInput schema / properties / from_feature_id / pattern
      Added value: +"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$"
    • changedInput schema / properties / geometry / anyOf
      Previous value: -[
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "coordinates": {
      -        "items": [
      -          {
      -            "type": "number"
      -          },
      -          {
      -            "type": "number"
      -          }
      -        ],
      -        "maxItems": 2,
      -        "minItems": 2,
      -        "type": "array"
      -      },
      -      "type": {
      -        "const": "Point",
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "type",
      -      "coordinates"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "coordinates": {
      -        "items": {
      -          "items": [
      -            {
      -              "type": "number"
      -            },
      -            {
      -              "type": "number"
      -            }
      -          ],
      -          "maxItems": 2,
      -          "minItems": 2,
      -          "type": "array"
      -        },
      -        "minItems": 2,
      -        "type": "array"
      -      },
      -      "type": {
      -        "const": "LineString",
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "type",
      -      "coordinates"
      -    ],
      -    "type": "object"
      -  }
      -]New value: +[
      +  {
      +    "properties": {
      +      "coordinates": {
      +        "items": false,
      +        "maxItems": 2,
      +        "minItems": 2,
      +        "prefixItems": [
      +          {
      +            "type": "number"
      +          },
      +          {
      +            "type": "number"
      +          }
      +        ],
      +        "type": "array"
      +      },
      +      "type": {
      +        "const": "Point",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "type",
      +      "coordinates"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "properties": {
      +      "coordinates": {
      +        "items": {
      +          "items": false,
      +          "maxItems": 2,
      +          "minItems": 2,
      +          "prefixItems": [
      +            {
      +              "type": "number"
      +            },
      +            {
      +              "type": "number"
      +            }
      +          ],
      +          "type": "array"
      +        },
      +        "minItems": 2,
      +        "type": "array"
      +      },
      +      "type": {
      +        "const": "LineString",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "type",
      +      "coordinates"
      +    ],
      +    "type": "object"
      +  }
      +]
    • addedInput schema / properties / id / pattern
      Added value: +"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$"
    • addedInput schema / properties / lanes / maximum
      Added value: +9007199254740991
    • addedInput schema / properties / location_id / pattern
      Added value: +"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$"
    • addedInput schema / properties / manufacturer_id / pattern
      Added value: +"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$"
    • addedInput schema / properties / site_id / pattern
      Added value: +"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$"
    • addedInput schema / properties / system_class_id / pattern
      Added value: +"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$"
    • addedInput schema / properties / system_group_id / pattern
      Added value: +"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$"
    • addedInput schema / properties / system_id / pattern
      Added value: +"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$"
    • addedInput schema / properties / to_feature_id / pattern
      Added value: +"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$"
  4. First observed

TDQS

A3.5/5.0
Behavior4/5

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

Annotations already signal destructiveHint=true, idempotentHint=true and readOnlyHint=false. The description adds genuinely non-obvious behavior: the immutability of computed columns, the geometry-type constraint, and the required infrastructure_assets:write scope. It doesn't disclose whether omitted fields are cleared or preserved (partial vs full replace), which is the main remaining behavioral unknown for a destructive update.

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

Conciseness4/5

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

Three tight sentences, front-loaded with the operation and ID requirement, then constraints and auth. Every sentence adds information; no filler or restatement of the title.

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

Completeness2/5

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

For a 55-property destructive mutation with no output schema, the description leaves major gaps: it doesn't say whether the update is partial or full-replace, doesn't describe any of the enum-bearing fields, and gives no sense of which of the many attributes are meaningful together. The geometry and scope notes are good but far from sufficient for a schema this large.

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

Parameters2/5

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

With 55 parameters and only 5% schema description coverage, the schema documents almost nothing, so the description carries the burden. It explains only one parameter (geometry, including the Point/LineString constraint) and names three non-settable computed columns; the remaining ~50 fields (name, lanes, model, dates, impact scores, enum fields, etc.) have no semantic help in either place.

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

Purpose4/5

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

States a specific verb+resource ('Update an existing infrastructure asset (feature) by ID'), which is distinguishable from the create/delete/get/list siblings of the same entity. It does not explicitly contrast with near-neighbours like bulk_update or update_asset, but the entity and operation are unambiguous.

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

Usage Guidelines4/5

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

Gives concrete when-to-use detail: how to change geometry (provide a GeoJSON matching the existing feature_type) and an explicit when-not ('computed columns length_m, slope_pct, risk_score cannot be set'). It never names bulk_update or an alternative tool for multi-record edits, so it stops short of full routing guidance.

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

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources