Skip to main content
Glama

Compare blood tests

render_results
Read-onlyIdempotent

Compare up to ten exact listing ids returned by match_listings using catalogue price, location and published marker facts.

Input Schema

NameRequiredDescriptionDefault
queryNoOriginal catalogue search wording for display context.
locationNoIrish town or Eircode used for the comparison.
listingIdsYesExact listing ids returned by match_listings, in display order.

Output Schema

NameRequiredDescriptionDefault
okYes
viewYes
queryYes
matchesYes
messageNo
locationNo
disclaimerYes
catalogueNoticeYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed38 schema fields changed
    • changedInput schema / properties / listingIds / description
      Previous value: -"Listing IDs selected from match_listings, in display order. Prices and markers are loaded by the server."New value: +"Exact listing ids returned by match_listings, in display order."
    • removedInput schema / properties / listingIds / items / description
      Removed value: -"Exact listing id returned by match_listings or get_listing."
    • changedInput schema / properties / location / description
      Previous value: -"User's requested town or Eircode, for geographic context."New value: +"Irish town or Eircode used for the comparison."
    • removedInput schema / properties / preferredDate
      Removed value: -{
      -  "description": "Known preferred date in Europe/Dublin; reuse rather than asking again.",
      -  "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
      -  "type": "string"
      -}
    • removedInput schema / properties / preferredTime
      Removed value: -{
      -  "description": "Known local time, HH:mm, matched only against generated slots.",
      -  "pattern": "^(?:[01]\\d|2[0-3]):[0-5]\\d$",
      -  "type": "string"
      -}
    • addedInput schema / properties / query / description
      Added value: +"Original catalogue search wording for display context."
    • changedOutput schema / additionalProperties
      Previous value: -trueNew value: +false
    • addedOutput schema / properties / catalogueNotice
      Added value: +{
      +  "additionalProperties": false,
      +  "properties": {
      +    "clinicalSuitability": {
      +      "const": "not-assessed",
      +      "type": "string"
      +    },
      +    "exhaustiveCoverage": {
      +      "const": false,
      +      "type": "boolean"
      +    },
      +    "pricesLiveVerified": {
      +      "const": false,
      +      "type": "boolean"
      +    },
      +    "source": {
      +      "const": "compiled-public-catalogue",
      +      "type": "string"
      +    }
      +  },
      +  "required": [
      +    "source",
      +    "exhaustiveCoverage",
      +    "pricesLiveVerified",
      +    "clinicalSuitability"
      +  ],
      +  "type": "object"
      +}
    • removedOutput schema / properties / interaction
      Removed value: -{
      -  "additionalProperties": false,
      -  "properties": {
      -    "actions": {
      -      "items": {
      -        "additionalProperties": false,
      -        "properties": {
      -          "arguments": {
      -            "additionalProperties": {},
      -            "type": "object"
      -          },
      -          "collect": {
      -            "items": {
      -              "additionalProperties": true,
      -              "properties": {
      -                "kind": {
      -                  "enum": [
      -                    "text",
      -                    "date",
      -                    "multi-select"
      -                  ],
      -                  "type": "string"
      -                },
      -                "label": {
      -                  "type": "string"
      -                },
      -                "name": {
      -                  "type": "string"
      -                }
      -              },
      -              "required": [
      -                "name",
      -                "label",
      -                "kind"
      -              ],
      -              "type": "object"
      -            },
      -            "type": "array"
      -          },
      -          "label": {
      -            "type": "string"
      -          },
      -          "requiresUserAcceptance": {
      -            "const": true,
      -            "type": "boolean"
      -          },
      -          "tool": {
      -            "type": "string"
      -          }
      -        },
      -        "required": [
      -          "label",
      -          "tool",
      -          "arguments"
      -        ],
      -        "type": "object"
      -      },
      -      "type": "array"
      -    },
      -    "cards": {
      -      "items": {
      -        "additionalProperties": false,
      -        "properties": {
      -          "actions": {
      -            "items": {
      -              "$ref": "#/properties/interaction/properties/actions/items"
      -            },
      -            "type": "array"
      -          },
      -          "availabilityNote": {
      -            "type": "string"
      -          },
      -          "details": {
      -            "additionalProperties": false,
      -            "properties": {
      -              "clinicName": {
      -                "type": "string"
      -              },
      -              "markerStatus": {
      -                "enum": [
      -                  "published",
      -                  "unpublished",
      -                  "varies"
      -                ],
      -                "type": "string"
      -              },
      -              "markers": {
      -                "items": {
      -                  "type": "string"
      -                },
      -                "type": "array"
      -              },
      -              "originalTitle": {
      -                "type": "string"
      -              },
      -              "provider": {
      -                "type": "string"
      -              }
      -            },
      -            "required": [
      -              "provider",
      -              "clinicName",
      -              "originalTitle",
      -              "markers",
      -              "markerStatus"
      -            ],
      -            "type": "object"
      -          },
      -          "listingId": {
      -            "type": "string"
      -          },
      -          "listingIds": {
      -            "items": {
      -              "type": "string"
      -            },
      -            "minItems": 1,
      -            "type": "array"
      -          },
      -          "locationLabel": {
      -            "type": "string"
      -          },
      -          "priceLabel": {
      -            "type": "string"
      -          },
      -          "requiresVariantSelection": {
      -            "const": true,
      -            "type": "boolean"
      -          },
      -          "suggestedAvailability": {
      -            "items": {
      -              "$ref": "#/properties/interaction/properties/suggestedAvailability/items"
      -            },
      -            "maxItems": 2,
      -            "type": "array"
      -          },
      -          "test": {
      -            "type": "string"
      -          },
      -          "variants": {
      -            "items": {
      -              "additionalProperties": false,
      -              "properties": {
      -                "actions": {
      -                  "items": {
      -                    "$ref": "#/properties/interaction/properties/actions/items"
      -                  },
      -                  "type": "array"
      -                },
      -                "label": {
      -                  "type": "string"
      -                },
      -                "listingId": {
      -                  "type": "string"
      -                }
      -              },
      -              "required": [
      -                "listingId",
      -                "label",
      -                "actions"
      -              ],
      -              "type": "object"
      -            },
      -            "type": "array"
      -          }
      -        },
      -        "required": [
      -          "listingIds",
      -          "locationLabel",
      -          "test",
      -          "priceLabel",
      -          "details",
      -          "suggestedAvailability",
      -          "actions"
      -        ],
      -        "type": "object"
      -      },
      -      "type": "array"
      -    },
      -    "followUp": {
      -      "additionalProperties": false,
      -      "properties": {
      -        "actions": {
      -          "items": {
      -            "$ref": "#/properties/interaction/properties/actions/items"
      -          },
      -          "type": "array"
      -        },
      -        "question": {
      -          "type": "string"
      -        },
      -        "required": {
      -          "type": "boolean"
      -        }
      -      },
      -      "required": [
      -        "question",
      -        "actions"
      -      ],
      -      "type": "object"
      -    },
      -    "message": {
      -      "type": "string"
      -    },
      -    "presentation": {
      -      "const": "native",
      -      "type": "string"
      -    },
      -    "selection": {
      -      "additionalProperties": {},
      -      "type": "object"
      -    },
      -    "step": {
      -      "type": "string"
      -    },
      -    "suggestedAvailability": {
      -      "items": {
      -        "additionalProperties": false,
      -        "properties": {
      -          "action": {
      -            "$ref": "#/properties/interaction/properties/actions/items"
      -          },
      -          "label": {
      -            "type": "string"
      -          },
      -          "simulation": {
      -            "const": true,
      -            "type": "boolean"
      -          },
      -          "startsAt": {
      -            "type": "string"
      -          },
      -          "timeZone": {
      -            "type": "string"
      -          }
      -        },
      -        "required": [
      -          "label",
      -          "startsAt",
      -          "timeZone",
      -          "simulation",
      -          "action"
      -        ],
      -        "type": "object"
      -      },
      -      "maxItems": 2,
      -      "type": "array"
      -    },
      -    "testChoices": {
      -      "items": {
      -        "$ref": "#/properties/interaction/properties/actions/items"
      -      },
      -      "type": "array"
      -    },
      -    "typedReply": {
      -      "type": "string"
      -    }
      -  },
      -  "required": [
      -    "presentation",
      -    "step",
      -    "message",
      -    "selection",
      -    "actions"
      -  ],
      -  "type": "object"
      -}
    • addedOutput schema / properties / location
      Added value: +{
      +  "additionalProperties": false,
      +  "properties": {
      +    "county": {
      +      "type": "string"
      +    },
      +    "eircode": {
      +      "type": "string"
      +    },
      +    "eircodeRoutingKey": {
      +      "type": "string"
      +    },
      +    "raw": {
      +      "type": "string"
      +    },
      +    "source": {
      +      "enum": [
      +        "eircode",
      +        "routing-key",
      +        "town",
      +        "address",
      +        "unknown"
      +      ],
      +      "type": "string"
      +    },
      +    "town": {
      +      "type": "string"
      +    }
      +  },
      +  "required": [
      +    "raw",
      +    "source"
      +  ],
      +  "type": "object"
      +}
    • changedOutput schema / properties / matches / items / additionalProperties
      Previous value: -trueNew value: +false
    • addedOutput schema / properties / matches / items / properties / catalogueStatus
      Added value: +{
      +  "const": "published-example",
      +  "type": "string"
      +}
    • addedOutput schema / properties / matches / items / properties / category
      Added value: +{
      +  "type": "string"
      +}
    • addedOutput schema / properties / matches / items / properties / clinicName
      Added value: +{
      +  "type": "string"
      +}
    • addedOutput schema / properties / matches / items / properties / county
      Added value: +{
      +  "type": "string"
      +}
    • addedOutput schema / properties / matches / items / properties / eircode
      Added value: +{
      +  "type": "string"
      +}
    • addedOutput schema / properties / matches / items / properties / eircodeRoutingKey
      Added value: +{
      +  "type": "string"
      +}
    • addedOutput schema / properties / matches / items / properties / locationMatch
      Added value: +{
      +  "enum": [
      +    "unknown",
      +    "eircode",
      +    "routingKey",
      +    "town",
      +    "serviceTown",
      +    "nearbyText",
      +    "county",
      +    "adjacentCounty",
      +    "addressText",
      +    "national",
      +    "none"
      +  ],
      +  "type": "string"
      +}
    • addedOutput schema / properties / matches / items / properties / markers
      Added value: +{
      +  "items": {
      +    "additionalProperties": false,
      +    "properties": {
      +      "id": {
      +        "type": "string"
      +      },
      +      "name": {
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "id",
      +      "name"
      +    ],
      +    "type": "object"
      +  },
      +  "type": "array"
      +}
    • addedOutput schema / properties / matches / items / properties / markersPublished
      Added value: +{
      +  "type": "boolean"
      +}
    • addedOutput schema / properties / matches / items / properties / national
      Added value: +{
      +  "type": "boolean"
      +}
    • addedOutput schema / properties / matches / items / properties / panelId
      Added value: +{
      +  "type": "string"
      +}
    • addedOutput schema / properties / matches / items / properties / panelName
      Added value: +{
      +  "type": "string"
      +}
    • addedOutput schema / properties / matches / items / properties / priceEur
      Added value: +{
      +  "type": [
      +    "number",
      +    "null"
      +  ]
      +}
    • addedOutput schema / properties / matches / items / properties / priceNote
      Added value: +{
      +  "type": [
      +    "string",
      +    "null"
      +  ]
      +}
    • addedOutput schema / properties / matches / items / properties / provider
      Added value: +{
      +  "type": "string"
      +}
    • addedOutput schema / properties / matches / items / properties / providerRelationship
      Added value: +{
      +  "const": "no-partnership",
      +  "type": "string"
      +}
    • addedOutput schema / properties / matches / items / properties / score
      Added value: +{
      +  "additionalProperties": false,
      +  "properties": {
      +    "intent": {
      +      "type": "number"
      +    },
      +    "location": {
      +      "type": "number"
      +    },
      +    "total": {
      +      "type": "number"
      +    }
      +  },
      +  "required": [
      +    "total",
      +    "location",
      +    "intent"
      +  ],
      +  "type": "object"
      +}
    • addedOutput schema / properties / matches / items / properties / serviceMode
      Added value: +{
      +  "enum": [
      +    "home-kit",
      +    "clinic"
      +  ],
      +  "type": "string"
      +}
    • addedOutput schema / properties / matches / items / properties / serviceTowns
      Added value: +{
      +  "items": {
      +    "type": "string"
      +  },
      +  "type": "array"
      +}
    • addedOutput schema / properties / matches / items / properties / town
      Added value: +{
      +  "type": "string"
      +}
    • addedOutput schema / properties / matches / items / properties / venueNote
      Added value: +{
      +  "type": [
      +    "string",
      +    "null"
      +  ]
      +}
    • addedOutput schema / properties / matches / items / properties / why
      Added value: +{
      +  "items": {
      +    "type": "string"
      +  },
      +  "type": "array"
      +}
    • changedOutput schema / properties / matches / items / required
      Previous value: -[
      -  "id"
      -]New value: +[
      +  "id",
      +  "catalogueStatus",
      +  "providerRelationship",
      +  "provider",
      +  "clinicName",
      +  "town",
      +  "county",
      +  "eircode",
      +  "eircodeRoutingKey",
      +  "serviceTowns",
      +  "national",
      +  "serviceMode",
      +  "venueNote",
      +  "panelName",
      +  "panelId",
      +  "priceEur",
      +  "priceNote",
      +  "category",
      +  "markersPublished",
      +  "markers",
      +  "locationMatch",
      +  "score",
      +  "why"
      +]
    • addedOutput schema / properties / message
      Added value: +{
      +  "type": "string"
      +}
    • addedOutput schema / properties / ok
      Added value: +{
      +  "type": "boolean"
      +}
    • addedOutput schema / properties / query
      Added value: +{
      +  "type": "string"
      +}
    • changedOutput schema / required
      Previous value: -[
      -  "view",
      -  "matches",
      -  "disclaimer",
      -  "interaction"
      -]New value: +[
      +  "ok",
      +  "view",
      +  "query",
      +  "matches",
      +  "catalogueNotice",
      +  "disclaimer"
      +]
  2. First observed

TDQS

A3.8/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false and openWorldHint=false, so the safe-read profile is covered. The description adds only the comparison dimensions and a ten-id cap, and the cap merely restates the schema's maxItems: 10. Nothing is said about ordering effects or error behavior for unknown ids.

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?

A single sentence with no filler that front-loads the cardinality limit, the required input provenance, and the comparison basis. Every clause carries information the agent needs, and nothing is padded or restated across sentences.

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?

With an output schema present, the description need not explain return values, and with 100% schema coverage the parameters are covered. The description supplies the essential context: input provenance from match_listings and the basis of comparison. It is nearly complete, though it could say more about what the caller receives (a ranked/side-by-side comparison) and how the optional location affects results.

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?

Schema description coverage is 100%, so all three parameters (query, location, listingIds) are already documented in the schema, including their max lengths and the display-order semantics of listingIds. The description repeats the listing-id and location concepts without adding syntax, format, or edge-case guidance beyond the schema. Baseline 3 applies.

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 (compare) and resource (listing ids returned by match_listings), plus the dimensions compared (catalogue price, location, published marker facts) and the cardinality cap. It names the upstream sibling match_listings, which helps distinguish it from the other sibling tools. The only gap is that it does not contrast itself against get_listing or list_panels explicitly.

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?

Clearly implies the precondition that ids must come from a prior match_listings call, which is genuine routing guidance an agent needs. It stops short of stating when NOT to use it (e.g. single-listing lookup should use get_listing) or what to do if fewer than the desired ids are available.

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