MCP-Server

Probe V0

io.github.lexbritten/probe
Entwicklertools Öffentlich und erreichbar MCP 2025-11-25

Was dieses MCP kann

Verifies explicit claims about public HTTPS endpoints through live HTTP observations and provides historical verification evidence.

probe.history
Inspect Historical HTTP Evidence
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.
Nur Lesen Idempotent
Eingabeschema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['probe_id'], 'properties': {'limit': {'type': 'integer', 'default': 10, 'maximum': 20, 'minimum': 1, 'description': 'Maximum number of newest stored observations to return, from 1 through 20.'}, 'probe_id': {'type': 'string', 'pattern': '^[a-f0-9]{64}$', 'description': 'The 64-character lowercase hexadecimal Probe experiment ID returned by verify_http_claim.'}}}
Ausgabeschema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['protocol', 'probe_id', 'observations', 'summary'], 'properties': {'summary': {'type': 'object', 'required': ['observations', 'counts', 'dominant_verdict', 'agreement', 'changed_since_previous'], 'properties': {'counts': {'type': 'object', 'required': ['PASS', 'FAIL', 'ERROR'], 'properties': {'FAIL': {'type': 'number'}, 'PASS': {'type': 'number'}, 'ERROR': {'type': 'number'}}, 'additionalProperties': False}, 'agreement': {'type': ['number', 'null']}, 'observations': {'type': 'number'}, 'dominant_verdict': {'anyOf': [{'enum': ['PASS', 'FAIL'], 'type': 'string'}, {'type': 'null'}]}, 'changed_since_previous': {'type': 'boolean'}}, 'additionalProperties': False}, 'probe_id': {'type': 'string'}, 'protocol': {'type': 'string', 'const': 'probe.history.v0'}, 'observations': {'type': 'array', 'items': {'type': 'object', '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'], 'properties': {'target': {'type': 'object', 'required': ['host', 'method'], 'properties': {'host': {'type': 'string'}, 'method': {'enum': ['GET', 'HEAD'], 'type': 'string'}}, 'additionalProperties': False}, 'verdict': {'enum': ['PASS', 'FAIL', 'ERROR'], 'type': 'string'}, 'probe_id': {'type': 'string'}, 'protocol': {'type': 'string', 'const': 'probe.evidence.v0'}, 'final_url': {'type': 'string'}, 'error_code': {'type': 'string'}, 'latency_ms': {'type': ['number', 'null']}, 'body_sha256': {'type': ['string', 'null']}, 'observed_at': {'type': 'string'}, 'status_code': {'type': ['number', 'null']}, 'termination': {'type': 'string'}, 'body_truncated': {'type': 'boolean'}, 'bytes_observed': {'type': 'number'}, 'redirect_chain': {'type': 'array', 'items': {'type': 'object', 'required': ['hop', 'from_url', 'status_code', 'validated'], 'properties': {'hop': {'type': 'number'}, 'from_url': {'type': 'string'}, 'location': {'type': 'string'}, 'rejection': {'type': 'string'}, 'validated': {'type': 'boolean'}, 'status_code': {'type': 'number'}, 'resolved_url': {'type': 'string'}}, 'additionalProperties': False}}, 'redirect_count': {'type': 'number'}, 'assertion_results': {'type': 'array', 'items': {'anyOf': [{'type': 'object', 'required': ['kind', 'expected', 'actual', 'passed'], 'properties': {'kind': {'type': 'string', 'const': 'status'}, 'actual': {'type': 'number'}, 'passed': {'type': 'boolean'}, 'expected': {'type': 'number'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['kind', 'key', 'expected', 'actual_fingerprint', 'passed'], 'properties': {'key': {'type': 'string'}, 'kind': {'type': 'string', 'const': 'header_equals'}, 'passed': {'type': 'boolean'}, 'expected': {'type': 'string'}, 'actual_fingerprint': {'type': 'object', 'required': ['type', 'sha256'], 'properties': {'type': {'type': 'string'}, 'sha256': {'type': 'string'}}, 'additionalProperties': False}}, 'additionalProperties': False}, {'type': 'object', 'required': ['kind', 'key', 'expected', 'passed', 'error_code'], 'properties': {'key': {'type': 'string'}, 'kind': {'type': 'string', 'const': 'header_equals'}, 'passed': {'type': 'boolean', 'const': False}, 'expected': {'type': 'string'}, 'error_code': {'type': 'string'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['kind', 'key', 'expected', 'actual_fingerprint', 'passed'], 'properties': {'key': {'type': 'string'}, 'kind': {'type': 'string', 'const': 'json_equals'}, 'passed': {'type': 'boolean'}, 'expected': {}, 'actual_fingerprint': {'type': 'object', 'required': ['type', 'sha256'], 'properties': {'type': {'type': 'string'}, 'sha256': {'type': 'string'}}, 'additionalProperties': False}}, 'additionalProperties': False}, {'type': 'object', 'required': ['kind', 'key', 'expected', 'passed', 'error_code'], 'properties': {'key': {'type': 'string'}, 'kind': {'type': 'string', 'const': 'json_equals'}, 'passed': {'type': 'boolean', 'const': False}, 'expected': {}, 'error_code': {'type': 'string'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['kind', 'expected', 'contains', 'passed'], 'properties': {'kind': {'type': 'string', 'const': 'body_contains'}, 'passed': {'type': 'boolean'}, 'contains': {'type': 'boolean'}, 'expected': {'type': 'string'}}, 'additionalProperties': False}]}}, 'redirects_followed': {'type': 'boolean'}}, 'additionalProperties': False}}}, 'additionalProperties': False}
verify_http_claim
Verify Live HTTP Claim
Use this to verify a current public HTTPS claim by direct observation rather than web search, documentation, browser inference, or shell/curl. Use for explicit assertions that a GET/HEAD currently returns an expected HTTP status, exact header value, JSON value at a JSON Pointer, or body substring. It evaluates assertions, persists bounded evidence, reuses sufficiently fresh matching evidence, and summarizes recent observations. follow_redirects defaults to false; when true, Probe manually follows at most 3 validated HTTPS redirects. Every fetch uses redirect: manual. V0 supports only public HTTPS URLs without credentials, query strings, fragments, IP literals, or non-443 ports. Redirect validation is hostname/policy based; the Worker cannot guarantee protection against DNS rebinding between validation and platform DNS resolution.
Nur Lesen Externer Zugriff Idempotent
Eingabeschema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['url', 'assertions'], 'properties': {'url': {'type': 'string', 'format': 'uri', 'description': 'Public HTTPS URL to observe. V0 forbids credentials, query strings, fragments, IP literals, private or local destinations, and non-443 ports.'}, 'method': {'enum': ['GET', 'HEAD'], 'type': 'string', 'default': 'GET', 'description': 'HTTP method to observe. Use HEAD only when response headers and status are sufficient.'}, 'assertions': {'type': 'array', 'items': {'oneOf': [{'type': 'object', 'required': ['kind', 'expected'], 'properties': {'kind': {'type': 'string', 'const': 'status', 'description': 'Assert the HTTP response status code.'}, 'expected': {'type': 'integer', 'maximum': 599, 'minimum': 100, 'description': 'Expected HTTP status code from 100 through 599.'}}}, {'type': 'object', 'required': ['kind', 'key', 'expected'], 'properties': {'key': {'type': 'string', 'maxLength': 80, 'minLength': 1, 'description': 'Response header name to compare case-insensitively.'}, 'kind': {'type': 'string', 'const': 'header_equals', 'description': 'Assert an exact response header value.'}, 'expected': {'type': 'string', 'maxLength': 1024, 'description': 'Exact expected response header value.'}}}, {'type': 'object', 'required': ['kind', 'key', 'expected'], 'properties': {'key': {'type': 'string', 'maxLength': 256, 'minLength': 1, 'description': 'JSON Pointer identifying the response value to compare, for example /status.'}, 'kind': {'type': 'string', 'const': 'json_equals', 'description': 'Assert an exact JSON value at a JSON Pointer.'}, 'expected': {'description': 'Exact JSON value expected at the JSON Pointer.'}}}, {'type': 'object', 'required': ['kind', 'expected'], 'properties': {'kind': {'type': 'string', 'const': 'body_contains', 'description': 'Assert that the response body contains a literal substring.'}, 'expected': {'type': 'string', 'maxLength': 256, 'minLength': 1, 'description': 'Literal case-sensitive substring expected in the bounded response body.'}}}]}, 'maxItems': 8, 'minItems': 1, 'description': 'One to eight explicit assertions evaluated against the same HTTP response.'}, 'follow_redirects': {'type': 'boolean', 'default': False, 'description': 'Whether to follow up to three validated HTTPS redirects. Defaults to false.'}, 'freshness_seconds': {'type': 'integer', 'default': 300, 'maximum': 86400, 'minimum': 300, 'description': 'Maximum acceptable age of reusable matching evidence, in seconds. Public Probe V0 requires exactly 300.'}}}
Ausgabeschema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['protocol', 'evidence_source', 'evidence_age_seconds', 'result', 'summary'], 'properties': {'result': {'type': 'object', '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'], 'properties': {'target': {'type': 'object', 'required': ['host', 'method'], 'properties': {'host': {'type': 'string'}, 'method': {'enum': ['GET', 'HEAD'], 'type': 'string'}}, 'additionalProperties': False}, 'verdict': {'enum': ['PASS', 'FAIL', 'ERROR'], 'type': 'string'}, 'probe_id': {'type': 'string'}, 'protocol': {'type': 'string', 'const': 'probe.evidence.v0'}, 'final_url': {'type': 'string'}, 'error_code': {'type': 'string'}, 'latency_ms': {'type': ['number', 'null']}, 'body_sha256': {'type': ['string', 'null']}, 'observed_at': {'type': 'string'}, 'status_code': {'type': ['number', 'null']}, 'termination': {'type': 'string'}, 'body_truncated': {'type': 'boolean'}, 'bytes_observed': {'type': 'number'}, 'redirect_chain': {'type': 'array', 'items': {'type': 'object', 'required': ['hop', 'from_url', 'status_code', 'validated'], 'properties': {'hop': {'type': 'number'}, 'from_url': {'type': 'string'}, 'location': {'type': 'string'}, 'rejection': {'type': 'string'}, 'validated': {'type': 'boolean'}, 'status_code': {'type': 'number'}, 'resolved_url': {'type': 'string'}}, 'additionalProperties': False}}, 'redirect_count': {'type': 'number'}, 'assertion_results': {'type': 'array', 'items': {'anyOf': [{'type': 'object', 'required': ['kind', 'expected', 'actual', 'passed'], 'properties': {'kind': {'type': 'string', 'const': 'status'}, 'actual': {'type': 'number'}, 'passed': {'type': 'boolean'}, 'expected': {'type': 'number'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['kind', 'key', 'expected', 'actual_fingerprint', 'passed'], 'properties': {'key': {'type': 'string'}, 'kind': {'type': 'string', 'const': 'header_equals'}, 'passed': {'type': 'boolean'}, 'expected': {'type': 'string'}, 'actual_fingerprint': {'type': 'object', 'required': ['type', 'sha256'], 'properties': {'type': {'type': 'string'}, 'sha256': {'type': 'string'}}, 'additionalProperties': False}}, 'additionalProperties': False}, {'type': 'object', 'required': ['kind', 'key', 'expected', 'passed', 'error_code'], 'properties': {'key': {'type': 'string'}, 'kind': {'type': 'string', 'const': 'header_equals'}, 'passed': {'type': 'boolean', 'const': False}, 'expected': {'type': 'string'}, 'error_code': {'type': 'string'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['kind', 'key', 'expected', 'actual_fingerprint', 'passed'], 'properties': {'key': {'type': 'string'}, 'kind': {'type': 'string', 'const': 'json_equals'}, 'passed': {'type': 'boolean'}, 'expected': {}, 'actual_fingerprint': {'type': 'object', 'required': ['type', 'sha256'], 'properties': {'type': {'type': 'string'}, 'sha256': {'type': 'string'}}, 'additionalProperties': False}}, 'additionalProperties': False}, {'type': 'object', 'required': ['kind', 'key', 'expected', 'passed', 'error_code'], 'properties': {'key': {'type': 'string'}, 'kind': {'type': 'string', 'const': 'json_equals'}, 'passed': {'type': 'boolean', 'const': False}, 'expected': {}, 'error_code': {'type': 'string'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['kind', 'expected', 'contains', 'passed'], 'properties': {'kind': {'type': 'string', 'const': 'body_contains'}, 'passed': {'type': 'boolean'}, 'contains': {'type': 'boolean'}, 'expected': {'type': 'string'}}, 'additionalProperties': False}]}}, 'redirects_followed': {'type': 'boolean'}}, 'additionalProperties': False}, 'summary': {'type': 'object', 'required': ['observations', 'counts', 'dominant_verdict', 'agreement', 'changed_since_previous'], 'properties': {'counts': {'type': 'object', 'required': ['PASS', 'FAIL', 'ERROR'], 'properties': {'FAIL': {'type': 'number'}, 'PASS': {'type': 'number'}, 'ERROR': {'type': 'number'}}, 'additionalProperties': False}, 'agreement': {'type': ['number', 'null']}, 'observations': {'type': 'number'}, 'dominant_verdict': {'anyOf': [{'enum': ['PASS', 'FAIL'], 'type': 'string'}, {'type': 'null'}]}, 'changed_since_previous': {'type': 'boolean'}}, 'additionalProperties': False}, 'protocol': {'type': 'string', 'const': 'probe.check.v0'}, 'evidence_source': {'enum': ['cached', 'fresh_execution'], 'type': 'string'}, 'evidence_age_seconds': {'type': 'number'}}, 'additionalProperties': False}
Hinzugefügt
probe.history
17. September 2026 12:43
Hinzugefügt
verify_http_claim
17. September 2026 12:43