Skip to main content
Glama

Compare Digital Twin Observations

robotics_compare_digital_twin_observations_v1
Idempotent

Problem: Compare digital-twin output with mapped observations against caller tolerances. Input: JSON with predicted, observed, declared mapping, rules. Result: typed verdict, measured metrics, candidate only when verified. Limits: Software/model evidence only; 65536 request bytes; 5 s execution.

Input Schema

NameRequiredDescriptionDefault
requestYes
schema_versionYes
idempotency_keyYes
max_total_priceYes

Output Schema

NameRequiredDescriptionDefault

No arguments

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • changedOutput schema / anyOf
      Previous value: -[
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "capability_id": {
      -        "maxLength": 128,
      -        "minLength": 1,
      -        "pattern": "^[a-z0-9][a-z0-9._-]*$",
      -        "type": "string"
      -      },
      -      "capability_version": {
      -        "maxLength": 64,
      -        "minLength": 1,
      -        "type": "string"
      -      },
      -      "catalog_digest": {
      -        "pattern": "^[a-f0-9]{64}$",
      -        "type": "string"
      -      },
      -      "catalog_revision": {
      -        "maxLength": 128,
      -        "minLength": 1,
      -        "type": "string"
      -      },
      -      "commercial_state": {
      -        "maxLength": 64,
      -        "minLength": 1,
      -        "type": "string"
      -      },
      -      "duplicate": {
      -        "type": "boolean"
      -      },
      -      "job_id": {
      -        "maxLength": 256,
      -        "minLength": 1,
      -        "type": "string"
      -      },
      -      "payment_rail": {
      -        "const": "x402",
      -        "type": "string"
      -      },
      -      "price": {
      -        "pattern": "^(?:0|[1-9]\\d{0,13})(?:\\.\\d{1,6})?$",
      -        "type": "string"
      -      },
      -      "product": {
      -        "enum": [
      -          "wave",
      -          "quantum",
      -          "robotics"
      -        ],
      -        "type": "string"
      -      },
      -      "quote_id": {
      -        "format": "uuid",
      -        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
      -        "type": "string"
      -      },
      -      "request_hash": {
      -        "pattern": "^[a-f0-9]{64}$",
      -        "type": "string"
      -      },
      -      "request_schema_version": {
      -        "maxLength": 128,
      -        "minLength": 1,
      -        "type": "string"
      -      },
      -      "reservation_id": {
      -        "format": "uuid",
      -        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
      -        "type": "string"
      -      },
      -      "retrieval_token": {
      -        "pattern": "^rqm_retrieval_.*",
      -        "type": "string"
      -      },
      -      "retrieval_token_expires_in": {
      -        "exclusiveMinimum": 0,
      -        "maximum": 9007199254740991,
      -        "type": "integer"
      -      },
      -      "retrieval_url": {
      -        "format": "uri",
      -        "type": "string"
      -      },
      -      "schema_version": {
      -        "const": "rqm.jobs.buyer-job-run.v1",
      -        "type": "string"
      -      },
      -      "status": {
      -        "enum": [
      -          "queued",
      -          "running",
      -          "completed",
      -          "failed",
      -          "cancelled",
      -          "recovery"
      -        ],
      -        "type": "string"
      -      },
      -      "tariff_version": {
      -        "maxLength": 64,
      -        "minLength": 1,
      -        "type": "string"
      -      },
      -      "x402_settlement_id": {
      -        "format": "uuid",
      -        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
      -        "type": "string"
      -      },
      -      "x402_transaction_id": {
      -        "maxLength": 256,
      -        "minLength": 1,
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "schema_version",
      -      "product",
      -      "capability_id",
      -      "capability_version",
      -      "request_schema_version",
      -      "catalog_revision",
      -      "catalog_digest",
      -      "request_hash",
      -      "job_id",
      -      "status",
      -      "quote_id",
      -      "reservation_id",
      -      "commercial_state",
      -      "payment_rail",
      -      "price",
      -      "tariff_version",
      -      "x402_settlement_id",
      -      "x402_transaction_id",
      -      "retrieval_token",
      -      "retrieval_token_expires_in",
      -      "duplicate"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "code": {
      -        "enum": [
      -          "AUTHENTICATION_REQUIRED",
      -          "MACHINE_AUTHENTICATION_FAILED",
      -          "MACHINE_AUTHORIZATION_FAILED",
      -          "ACCOUNT_CORE_UNAVAILABLE",
      -          "FEATURE_DISABLED",
      -          "QUOTE_NOT_ENTITLED",
      -          "QUOTE_IDEMPOTENCY_CONFLICT",
      -          "QUOTE_NOT_AVAILABLE",
      -          "QUOTE_REQUEST_INVALID",
      -          "QUOTE_MISMATCH",
      -          "PRICE_LIMIT_EXCEEDED",
      -          "RUNTIME_LIMIT_EXCEEDED",
      -          "ARTIFACT_PREFERENCE_UNAVAILABLE",
      -          "INSUFFICIENT_BALANCE",
      -          "RESERVATION_FAILED",
      -          "PRODUCT_REJECTED",
      -          "PRODUCT_UNAVAILABLE",
      -          "JOB_NOT_FOUND",
      -          "JOB_NOT_READY",
      -          "JOB_ACCESS_DENIED",
      -          "SETTLEMENT_FAILED",
      -          "FUNDING_UNAVAILABLE",
      -          "FUNDING_FAILED"
      -        ],
      -        "type": "string"
      -      },
      -      "message": {
      -        "type": "string"
      -      },
      -      "retryable": {
      -        "type": "boolean"
      -      },
      -      "schema_version": {
      -        "const": "rqm.jobs.error.v1",
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "schema_version",
      -      "code",
      -      "message",
      -      "retryable"
      -    ],
      -    "type": "object"
      -  }
      -]New value: +[
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "capability_id": {
      +        "maxLength": 128,
      +        "minLength": 1,
      +        "pattern": "^[a-z0-9][a-z0-9._-]*$",
      +        "type": "string"
      +      },
      +      "capability_version": {
      +        "maxLength": 64,
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "catalog_digest": {
      +        "pattern": "^[a-f0-9]{64}$",
      +        "type": "string"
      +      },
      +      "catalog_revision": {
      +        "maxLength": 128,
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "commercial_state": {
      +        "maxLength": 64,
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "duplicate": {
      +        "type": "boolean"
      +      },
      +      "job_id": {
      +        "maxLength": 256,
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "payment_rail": {
      +        "const": "x402",
      +        "type": "string"
      +      },
      +      "price": {
      +        "pattern": "^(?:0|[1-9]\\d{0,13})(?:\\.\\d{1,6})?$",
      +        "type": "string"
      +      },
      +      "product": {
      +        "enum": [
      +          "wave",
      +          "quantum",
      +          "robotics"
      +        ],
      +        "type": "string"
      +      },
      +      "quote_id": {
      +        "format": "uuid",
      +        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
      +        "type": "string"
      +      },
      +      "request_hash": {
      +        "pattern": "^[a-f0-9]{64}$",
      +        "type": "string"
      +      },
      +      "request_schema_version": {
      +        "maxLength": 128,
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "reservation_id": {
      +        "format": "uuid",
      +        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
      +        "type": "string"
      +      },
      +      "retrieval_token": {
      +        "format": "starts_with",
      +        "pattern": "^rqm_retrieval_.*",
      +        "type": "string"
      +      },
      +      "retrieval_token_expires_in": {
      +        "exclusiveMinimum": 0,
      +        "maximum": 9007199254740991,
      +        "type": "integer"
      +      },
      +      "retrieval_url": {
      +        "format": "uri",
      +        "type": "string"
      +      },
      +      "schema_version": {
      +        "const": "rqm.jobs.buyer-job-run.v1",
      +        "type": "string"
      +      },
      +      "status": {
      +        "enum": [
      +          "queued",
      +          "running",
      +          "completed",
      +          "failed",
      +          "cancelled",
      +          "recovery"
      +        ],
      +        "type": "string"
      +      },
      +      "tariff_version": {
      +        "maxLength": 64,
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "x402_settlement_id": {
      +        "format": "uuid",
      +        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
      +        "type": "string"
      +      },
      +      "x402_transaction_id": {
      +        "maxLength": 256,
      +        "minLength": 1,
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "schema_version",
      +      "product",
      +      "capability_id",
      +      "capability_version",
      +      "request_schema_version",
      +      "catalog_revision",
      +      "catalog_digest",
      +      "request_hash",
      +      "job_id",
      +      "status",
      +      "quote_id",
      +      "reservation_id",
      +      "commercial_state",
      +      "payment_rail",
      +      "price",
      +      "tariff_version",
      +      "x402_settlement_id",
      +      "x402_transaction_id",
      +      "retrieval_token",
      +      "retrieval_token_expires_in",
      +      "duplicate"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "code": {
      +        "enum": [
      +          "AUTHENTICATION_REQUIRED",
      +          "MACHINE_AUTHENTICATION_FAILED",
      +          "MACHINE_AUTHORIZATION_FAILED",
      +          "ACCOUNT_CORE_UNAVAILABLE",
      +          "FEATURE_DISABLED",
      +          "QUOTE_NOT_ENTITLED",
      +          "QUOTE_IDEMPOTENCY_CONFLICT",
      +          "QUOTE_NOT_AVAILABLE",
      +          "QUOTE_REQUEST_INVALID",
      +          "QUOTE_MISMATCH",
      +          "PRICE_LIMIT_EXCEEDED",
      +          "RUNTIME_LIMIT_EXCEEDED",
      +          "ARTIFACT_PREFERENCE_UNAVAILABLE",
      +          "INSUFFICIENT_BALANCE",
      +          "RESERVATION_FAILED",
      +          "PRODUCT_REJECTED",
      +          "PRODUCT_UNAVAILABLE",
      +          "JOB_NOT_FOUND",
      +          "JOB_NOT_READY",
      +          "JOB_ACCESS_DENIED",
      +          "SETTLEMENT_FAILED",
      +          "FUNDING_UNAVAILABLE",
      +          "FUNDING_FAILED"
      +        ],
      +        "type": "string"
      +      },
      +      "message": {
      +        "type": "string"
      +      },
      +      "retryable": {
      +        "type": "boolean"
      +      },
      +      "schema_version": {
      +        "const": "rqm.jobs.error.v1",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "schema_version",
      +      "code",
      +      "message",
      +      "retryable"
      +    ],
      +    "type": "object"
      +  }
      +]
  2. First observed

TDQS

A3.6/5.0
Behavior3/5

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

Adds real value beyond annotations: hard limits (65536 request bytes, 5 s execution), a scope restriction ('software/model evidence only'), and verdict semantics ('typed verdict, measured metrics, candidate only when verified'). But annotations declare readOnlyHint=false and the schema requires max_total_price and an idempotency_key, implying a priced, state-changing job submission; the description presents this as a pure comparison and never mentions cost, job creation, or the side effect a non-read-only hint implies.

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?

Four compact labeled clauses (Problem / Input / Result / Limits), front-loaded with the operation and terminating with hard constraints. No filler sentences; every clause carries distinct information.

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 nested, entirely untyped request object the description still leaves the payload shape underspecified, and it omits pricing/idempotency behavior. But it does cover scope, execution limits, and verdict semantics, and an output schema exists so return values need no explanation — coverage is close to sufficient, just short on payload construction detail.

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

Parameters3/5

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

With 0% schema description coverage and a fully untyped free-form 'request' object (additionalProperties of an any-scalar/array/object union), the description carries the burden and does supply the only field-level guidance available ('predicted, observed, declared mapping, rules'). It leaves the three required wrapper parameters (schema_version, idempotency_key, max_total_price) and the exact shape of tolerance rules and the mapping undocumented, so an agent still cannot reliably construct the payload.

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?

Names a specific comparison operation and names both inputs ('digital-twin output with mapped observations') plus the tolerance basis ('caller tolerances'). It is distinguishable from trajectory/controller comparison siblings by the digital-twin + declared mapping framing, but it never explicitly contrasts itself with robotics_compare_planned_observed_trajectories_v1 or robotics_compare_state_estimators_v1, which an agent could easily confuse it with.

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

Usage Guidelines3/5

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

The 'Problem:' framing implies the usage context (post-hoc verification of twin predictions against measurements), and 'candidate only when verified' hints at the decision this feeds. However, there is no explicit when-to-use/when-not, no prerequisite statement, and no routing to the many sibling *_compare_* tools.

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