Skip to main content
Glama

Inspect Historical HTTP Evidence

probe.history
Read-onlyIdempotent

Retrieve up to 20 persisted observations for an existing Probe experiment ID without making a new HTTP request. Use after verify_http_claim to inspect repeated results, PASS/FAIL/ERROR counts, agreement, or whether the observed verdict changed between the two latest decisive observations. This is historical evidence lookup, not a current live verification; use verify_http_claim when freshness or present endpoint behavior matters.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of newest stored observations to return, from 1 through 20.
probe_idYesThe 64-character lowercase hexadecimal Probe experiment ID returned by verify_http_claim.

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
summaryYes
probe_idYes
protocolYes
observationsYes

Schema Changelog

Changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. Changed3 schema fields changed
    • addedInput schema / properties / limit / description
      Added value: +"Maximum number of newest stored observations to return, from 1 through 20."
    • addedInput schema / properties / probe_id / description
      Added value: +"The 64-character lowercase hexadecimal Probe experiment ID returned by verify_http_claim."
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "$schema": "https://json-schema.org/draft/2020-12/schema",
      +  "additionalProperties": false,
      +  "properties": {
      +    "observations": {
      +      "items": {
      +        "additionalProperties": false,
      +        "properties": {
      +          "assertion_results": {
      +            "items": {
      +              "anyOf": [
      +                {
      +                  "additionalProperties": false,
      +                  "properties": {
      +                    "actual": {
      +                      "type": "number"
      +                    },
      +                    "expected": {
      +                      "type": "number"
      +                    },
      +                    "kind": {
      +                      "const": "status",
      +                      "type": "string"
      +                    },
      +                    "passed": {
      +                      "type": "boolean"
      +                    }
      +                  },
      +                  "required": [
      +                    "kind",
      +                    "expected",
      +                    "actual",
      +                    "passed"
      +                  ],
      +                  "type": "object"
      +                },
      +                {
      +                  "additionalProperties": false,
      +                  "properties": {
      +                    "actual_fingerprint": {
      +                      "additionalProperties": false,
      +                      "properties": {
      +                        "sha256": {
      +                          "type": "string"
      +                        },
      +                        "type": {
      +                          "type": "string"
      +                        }
      +                      },
      +                      "required": [
      +                        "type",
      +                        "sha256"
      +                      ],
      +                      "type": "object"
      +                    },
      +                    "expected": {
      +                      "type": "string"
      +                    },
      +                    "key": {
      +                      "type": "string"
      +                    },
      +                    "kind": {
      +                      "const": "header_equals",
      +                      "type": "string"
      +                    },
      +                    "passed": {
      +                      "type": "boolean"
      +                    }
      +                  },
      +                  "required": [
      +                    "kind",
      +                    "key",
      +                    "expected",
      +                    "actual_fingerprint",
      +                    "passed"
      +                  ],
      +                  "type": "object"
      +                },
      +                {
      +                  "additionalProperties": false,
      +                  "properties": {
      +                    "error_code": {
      +                      "type": "string"
      +                    },
      +                    "expected": {
      +                      "type": "string"
      +                    },
      +                    "key": {
      +                      "type": "string"
      +                    },
      +                    "kind": {
      +                      "const": "header_equals",
      +                      "type": "string"
      +                    },
      +                    "passed": {
      +                      "const": false,
      +                      "type": "boolean"
      +                    }
      +                  },
      +                  "required": [
      +                    "kind",
      +                    "key",
      +                    "expected",
      +                    "passed",
      +                    "error_code"
      +                  ],
      +                  "type": "object"
      +                },
      +                {
      +                  "additionalProperties": false,
      +                  "properties": {
      +                    "actual_fingerprint": {
      +                      "additionalProperties": false,
      +                      "properties": {
      +                        "sha256": {
      +                          "type": "string"
      +                        },
      +                        "type": {
      +                          "type": "string"
      +                        }
      +                      },
      +                      "required": [
      +                        "type",
      +                        "sha256"
      +                      ],
      +                      "type": "object"
      +                    },
      +                    "expected": {},
      +                    "key": {
      +                      "type": "string"
      +                    },
      +                    "kind": {
      +                      "const": "json_equals",
      +                      "type": "string"
      +                    },
      +                    "passed": {
      +                      "type": "boolean"
      +                    }
      +                  },
      +                  "required": [
      +                    "kind",
      +                    "key",
      +                    "expected",
      +                    "actual_fingerprint",
      +                    "passed"
      +                  ],
      +                  "type": "object"
      +                },
      +                {
      +                  "additionalProperties": false,
      +                  "properties": {
      +                    "error_code": {
      +                      "type": "string"
      +                    },
      +                    "expected": {},
      +                    "key": {
      +                      "type": "string"
      +                    },
      +                    "kind": {
      +                      "const": "json_equals",
      +                      "type": "string"
      +                    },
      +                    "passed": {
      +                      "const": false,
      +                      "type": "boolean"
      +                    }
      +                  },
      +                  "required": [
      +                    "kind",
      +                    "key",
      +                    "expected",
      +                    "passed",
      +                    "error_code"
      +                  ],
      +                  "type": "object"
      +                },
      +                {
      +                  "additionalProperties": false,
      +                  "properties": {
      +                    "contains": {
      +                      "type": "boolean"
      +                    },
      +                    "expected": {
      +                      "type": "string"
      +                    },
      +                    "kind": {
      +                      "const": "body_contains",
      +                      "type": "string"
      +                    },
      +                    "passed": {
      +                      "type": "boolean"
      +                    }
      +                  },
      +                  "required": [
      +                    "kind",
      +                    "expected",
      +                    "contains",
      +                    "passed"
      +                  ],
      +                  "type": "object"
      +                }
      +              ]
      +            },
      +            "type": "array"
      +          },
      +          "body_sha256": {
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          },
      +          "body_truncated": {
      +            "type": "boolean"
      +          },
      +          "bytes_observed": {
      +            "type": "number"
      +          },
      +          "error_code": {
      +            "type": "string"
      +          },
      +          "final_url": {
      +            "type": "string"
      +          },
      +          "latency_ms": {
      +            "type": [
      +              "number",
      +              "null"
      +            ]
      +          },
      +          "observed_at": {
      +            "type": "string"
      +          },
      +          "probe_id": {
      +            "type": "string"
      +          },
      +          "protocol": {
      +            "const": "probe.evidence.v0",
      +            "type": "string"
      +          },
      +          "redirect_chain": {
      +            "items": {
      +              "additionalProperties": false,
      +              "properties": {
      +                "from_url": {
      +                  "type": "string"
      +                },
      +                "hop": {
      +                  "type": "number"
      +                },
      +                "location": {
      +                  "type": "string"
      +                },
      +                "rejection": {
      +                  "type": "string"
      +                },
      +                "resolved_url": {
      +                  "type": "string"
      +                },
      +                "status_code": {
      +                  "type": "number"
      +                },
      +                "validated": {
      +                  "type": "boolean"
      +                }
      +              },
      +              "required": [
      +                "hop",
      +                "from_url",
      +                "status_code",
      +                "validated"
      +              ],
      +              "type": "object"
      +            },
      +            "type": "array"
      +          },
      +          "redirect_count": {
      +            "type": "number"
      +          },
      +          "redirects_followed": {
      +            "type": "boolean"
      +          },
      +          "status_code": {
      +            "type": [
      +              "number",
      +              "null"
      +            ]
      +          },
      +          "target": {
      +            "additionalProperties": false,
      +            "properties": {
      +              "host": {
      +                "type": "string"
      +              },
      +              "method": {
      +                "enum": [
      +                  "GET",
      +                  "HEAD"
      +                ],
      +                "type": "string"
      +              }
      +            },
      +            "required": [
      +              "host",
      +              "method"
      +            ],
      +            "type": "object"
      +          },
      +          "termination": {
      +            "type": "string"
      +          },
      +          "verdict": {
      +            "enum": [
      +              "PASS",
      +              "FAIL",
      +              "ERROR"
      +            ],
      +            "type": "string"
      +          }
      +        },
      +        "required": [
      +          "protocol",
      +          "probe_id",
      +          "observed_at",
      +          "verdict",
      +          "target",
      +          "status_code",
      +          "latency_ms",
      +          "body_sha256",
      +          "bytes_observed",
      +          "body_truncated",
      +          "assertion_results",
      +          "redirects_followed",
      +          "redirect_count",
      +          "final_url",
      +          "redirect_chain",
      +          "termination"
      +        ],
      +        "type": "object"
      +      },
      +      "type": "array"
      +    },
      +    "probe_id": {
      +      "type": "string"
      +    },
      +    "protocol": {
      +      "const": "probe.history.v0",
      +      "type": "string"
      +    },
      +    "summary": {
      +      "additionalProperties": false,
      +      "properties": {
      +        "agreement": {
      +          "type": [
      +            "number",
      +            "null"
      +          ]
      +        },
      +        "changed_since_previous": {
      +          "type": "boolean"
      +        },
      +        "counts": {
      +          "additionalProperties": false,
      +          "properties": {
      +            "ERROR": {
      +              "type": "number"
      +            },
      +            "FAIL": {
      +              "type": "number"
      +            },
      +            "PASS": {
      +              "type": "number"
      +            }
      +          },
      +          "required": [
      +            "PASS",
      +            "FAIL",
      +            "ERROR"
      +          ],
      +          "type": "object"
      +        },
      +        "dominant_verdict": {
      +          "anyOf": [
      +            {
      +              "enum": [
      +                "PASS",
      +                "FAIL"
      +              ],
      +              "type": "string"
      +            },
      +            {
      +              "type": "null"
      +            }
      +          ]
      +        },
      +        "observations": {
      +          "type": "number"
      +        }
      +      },
      +      "required": [
      +        "observations",
      +        "counts",
      +        "dominant_verdict",
      +        "agreement",
      +        "changed_since_previous"
      +      ],
      +      "type": "object"
      +    }
      +  },
      +  "required": [
      +    "protocol",
      +    "probe_id",
      +    "observations",
      +    "summary"
      +  ],
      +  "type": "object"
      +}
  2. First observed

TDQS

A4.7/5.0
Behavior5/5

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

Beyond the annotations (readOnly, idempotent, non-destructive), the description discloses a key behavioral trait: it retrieves persisted observations 'without making a new HTTP request.' It also explains the kind of evidence an agent can derive, such as PASS/FAIL/ERROR counts, agreement, and verdict changes between decisive observations, which adds valuable behavioral context.

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?

The description is three sentences with no filler: the first sentence states the core function, the second lists concrete use cases, and the third explicitly draws the boundary against the sibling tool. It is front-loaded and every sentence earns its place.

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

Completeness5/5

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

Given the simple parameter set, rich annotations, and the presence of an output schema, the description covers everything needed for selection and invocation. It explains the historical nature, when to use it, which sibling to prefer for live checks, and what evidence types can be inspected—leaving no material gaps.

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 coverage is 100%, so the input schema already fully documents both parameters, including defaults, bounds, format, and role. The description adds little parameter-specific meaning beyond reinforcing that probe_id is 'returned by verify_http_claim' and that up to 20 observations can be returned, both of which are already in the schema.

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

Purpose5/5

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

The description opens with a specific verb and resource: 'Retrieve up to 20 persisted observations for an existing Probe experiment ID'. It clearly distinguishes itself from the sibling by emphasizing this is historical evidence lookup, not a live verification, which makes the tool's purpose unmistakable.

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

Usage Guidelines5/5

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

The description explicitly tells the agent when to use this tool: 'Use after verify_http_claim to inspect repeated results...' and when not to: 'use verify_http_claim when freshness or present endpoint behavior matters.' This provides clear decision criteria versus the only sibling tool.

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.

TDQS

A4.4/5.0
Disambiguation5/5

verify_http_claim performs live current verification while probe.history retrieves persisted past observations. The descriptions explicitly separate the two use cases, so an agent should not confuse them.

Naming Consistency3/5

verify_http_claim follows a verb_object pattern, while probe.history uses a namespace.noun pattern. Both names are readable and lowercase, but the two naming styles are mixed rather than following one predictable convention.

Tool Count3/5

With only two tools the surface feels thin, but the narrow purpose of live HTTP verification plus historical evidence lookup is served without unnecessary additions. The minimal count is appropriate but borderline on the calibration scale.

Completeness4/5

The core workflow is covered: verify a claim with current evidence and later inspect the persisted history. Minor gaps such as listing or clearing experiments are absent but not required for the stated verification loop.