Read-only access to AVEVA Connect Data Services (SDS) namespaces, streams, and time-series values.
Four well-named, read-only tools with clear hierarchical structure (list_namespaces → list_streams → get_stream_metadata/get_values). All tools have detailed descriptions (150 - 250 chars) explaining WHAT, WHEN, and WHAT-RETURNS. Input schemas present with type declarations and parameter descriptions. Tool annotations correctly applied (read_only_hint=True, idempotent_hint=True). Key strength: descriptions are LLM-optimized and include engineering context (units, interpolation modes, TypeId). Gaps: no pagination support despite potential for large result sets; no explicit error recovery guidance; output schemas documented in descriptions but not in formal JSON Schema; no per-tool error classification.
Get the full metadata record for a stream. Use this before querying values to understand what a stream represents: its engineering units, normal operating range, and any limits noted in the description. Args: namespace_id Namespace Id from list_namespaces stream_id Stream Id from list_streams Returns a stream object. Key fields: Id — stream identifier Name — human-readable label TypeId — SDS type (determines value field names and types) Description — engineering context, units, limits InterpolationMode — how values between stored points are interpreted: Continuous = linear interpolation StepwiseContinuousLeading = holds last value (discrete signals)
Query process values from a stream over a time range. Returns up to `count` values in ascending time order. For long ranges, values are evenly sampled across the window — suitable for trend analysis and anomaly detection. For a fine-grained look at a short event, use a narrow time window with a higher count.
List all namespaces in the AVEVA Connect tenant. Namespaces partition data within a tenant — typically one per site or operational area. Each namespace is an independent time-series store. Use the returned Id to scope all subsequent calls. Returns a list of namespace objects. Key fields: Id — pass this as namespace_id in list_streams and get_values Name — human-readable label Region — cloud region where the data lives State — Active or Inactive
No pagination support for list_streams and list_namespaces. Large result sets will blow context window and violate mxe:enforce-result-limits baseline (cap at 20 - 50 items).
Output schemas documented only in prose descriptions, not in formal JSON Schema. LLMs cannot parse field types from text, structured schema declaration required.
Error handling lacks recovery guidance. ToolError raised on HTTP failures but no actionable message (e.g., 'Namespace not found. Call list_namespaces() to see available IDs.').
get_values 'count' parameter unbounded. No min/max constraint documented. LLM could pass 1,000,000 and cause timeout or memory exhaustion.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 62 | 2026-07-28+ | v2 |
List streams in a namespace, with an optional search filter. A stream is a time-ordered sequence of values for a single measurement — the SDS equivalent of a PI tag or historian point. Each stream has a TypeId that determines its value field types. Args: namespace_id Namespace Id from list_namespaces query Case-insensitive filter matched against Id, Name, Description, and Tags. Leave empty to return all streams. Returns a list of stream objects. Key fields: Id — pass this as stream_id in get_stream_metadata and get_values Name — human-readable label TypeId — SDS type (e.g. PI-Float32, PI-Boolean) Description — engineering context including units and limits
Demo mode hardcoded in server logic. No way for agent to know whether it's querying real data or mock data. Risks silent failures when credentials are misconfigured.