Annotating Digital Twin Models for AI

When an AI agent connects to the ScaleOut MCP server, it discovers your digital twin models programmatically. The agent sees property names and data types, but nothing about what those properties actually mean. Two properties named Temperature on two different models might represent different things, have different normal ranges, or matter more or less to the overall health of the twin.

To close that gap, ScaleOut provides two attributes (available in C# and Java) that developers can apply directly to their model classes and properties: ModuleAiMetadata and PropertyAiMetadata. These attributes let you attach human-readable descriptions, units, and expected value ranges to your model, which the MCP server then surfaces to AI agents.

The result is that agents can reason about your models with the same rich context that a developer or subject-matter expert would bring to them.

ModuleAiMetadata

Applied to a model class, ModuleAiMetadata describes the model as a whole, and possibly its relationship with other models.

Property

Description

Description

A description of the module and its purpose, or its relationship to other modules, to help AI agents understand the key components and logic it represents. The more context you provide here, the more information the AI agent will have use to understand your data.

KeyProperties

Not all properties are as meaningful. This lists specific properties that are most important to the module, pointing an agent toward the fields most likely to matter when reasoning about instances of this model.

PropertyAiMetadata

Applied to an individual property (or field), PropertyAiMetadata describes that property specifically.

Property

Description

Description

A meaningful description of the property: its purpose, and its relationship to other properties on the model.

Units

The units the property is expressed in, if it is numerical (e.g. "Rotations per second", "°C").

MinValue

The low boundary of the property’s normal operational range.

MaxValue

The high boundary of the property’s normal operational range.

Together, Units, MinValue, and MaxValue let an agent recognize when a value is unusual or out of range without having to be told explicitly — for example, distinguishing a normal Temperature reading from one that signals a developing fault.

Code Samples

The examples below apply both attributes to a WindTurbine model with three properties: RPM, Temperature, and Friction.

Note

The samples below are shown with fairly short descriptions for readability. The more descriptive your entries are, the better the AI agent will be able to understand the data and its relationship with other models.

[ModuleAiMetadata(
    Description = "Represents a wind turbine and its live " +
                   "operational readings. Used to monitor " +
                   "rotational speed, temperature, and " +
                   "mechanical friction to detect abnormal " +
                   "or unsafe operating conditions. A WindTurbine instance" +
                   "is related to an instance of a WindFarm model.",
    KeyProperties = "RPM,Temperature,Friction"
)]
public class WindTurbine : DigitalTwinBase<WindTurbine>
{
    [PropertyAiMetadata(
        Description = "Rotational speed of the turbine rotor.",
        Units = "Rotations per minute",
        MinValue = "0",
        MaxValue = "20"
    )]
    public Single RPM { get; set; }

    [PropertyAiMetadata(
        Description = "Internal nacelle temperature, used to " +
                       "detect overheating.",
        Units = "°C",
        MinValue = "-10",
        MaxValue = "85"
    )]
    public Single Temperature { get; set; }

    [PropertyAiMetadata(
        Description = "Measured mechanical friction in the " +
                       "main bearing, an early indicator of " +
                       "wear or lubrication issues.",
        Units = "Newton",
        MinValue = "0",
        MaxValue = "50"
    )]
    public Single Friction { get; set; }
}