Probe V0
Experimental MCP server for current empirical verification of explicit public HTTPS endpoint claims.
使うべきか
品質と安全性
検出事項(1)
- LOWprobe.history 内
ツール定義とプロトコルへの準拠に関する自動分析に基づいています。
コンテキストコスト
これは、サーバーのツールがモデルのコンテキストに読み込まれるたびに消費されるおおよそのトークン数です。数が多いほど、ほかのタスクに使える注意が減ります。
インストール
ワンクリックインストール
これを `claude_desktop_config.json` ファイルに追加してください:
{
"mcpServers": {
"probe": {
"url": "https://probe-evidence.probe-lab.workers.dev/mcp"
}
}
}リモートエンドポイント
https://probe-evidence.probe-lab.workers.dev/mcpstreamable-httpできること
ツール一覧
ツール(2)
🟢verify_http_claim(url, method, assertions, freshness_seconds, follow_redirects)
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.
入力スキーマ
{
"type": "object",
"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": {
"default": "GET",
"description": "HTTP method to observe. Use HEAD only when response headers and status are sufficient.",
"type": "string",
"enum": [
"GET",
"HEAD"
]
},
"assertions": {
"minItems": 1,
"maxItems": 8,
"type": "array",
"items": {
"oneOf": [
{
"type": "object",
"properties": {
"kind": {
"type": "string",
"const": "status",
"description": "Assert the HTTP response status code."
},
"expected": {
"type": "integer",
"minimum": 100,
"maximum": 599,
"description": "Expected HTTP status code from 100 through 599."
}
},
"required": [
"kind",
"expected"
]
},
{
"type": "object",
"properties": {
"kind": {
"type": "string",
"const": "header_equals",
"description": "Assert an exact response header value."
},
"key": {
"type": "string",
"minLength": 1,
"maxLength": 80,
"description": "Response header name to compare case-insensitively."
},
"expected": {
"type": "string",
"maxLength": 1024,
"description": "Exact expected response header value."
}
},
"required": [
"kind",
"key",
"expected"
]
},
{
"type": "object",
"properties": {
"kind": {
"type": "string",
"const": "json_equals",
"description": "Assert an exact JSON value at a JSON Pointer."
},
"key": {
"type": "string",
"minLength": 1,
"maxLength": 256,
"description": "JSON Pointer identifying the response value to compare, for example /status."
},
"expected": {
"description": "Exact JSON value expected at the JSON Pointer."
}
},
"required": [
"kind",
"key",
"expected"
]
},
{
"type": "object",
"properties": {
"kind": {
"type": "string",
"const": "body_contains",
"description": "Assert that the response body contains a literal substring."
},
"expected": {
"type": "string",
"minLength": 1,
"maxLength": 256,
"description": "Literal case-sensitive substring expected in the bounded response body."
}
},
"required": [
"kind",
"expected"
]
}
]
},
"description": "One to eight explicit assertions evaluated against the same HTTP response."
},
"freshness_seconds": {
"default": 300,
"description": "Maximum acceptable age of reusable matching evidence, in seconds. Public Probe V0 requires exactly 300.",
"type": "integer",
"minimum": 300,
"maximum": 86400
},
"follow_redirects": {
"default": false,
"description": "Whether to follow up to three validated HTTPS redirects. Defaults to false.",
"type": "boolean"
}
},
"required": [
"url",
"assertions"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}出力スキーマ
{
"type": "object",
"properties": {
"protocol": {
"type": "string",
"const": "probe.check.v0"
},
"evidence_source": {
"type": "string",
"enum": [
"cached",
"fresh_execution"
]
},
"evidence_age_seconds": {
"type": "number"
},
"result": {
"type": "object",
"properties": {
"protocol": {
"type": "string",
"const": "probe.evidence.v0"
},
"probe_id": {
"type": "string"
},
"observed_at": {
"type": "string"
},
"verdict": {
"type": "string",
"enum": [
"PASS",
"FAIL",
"ERROR"
]
},
"target": {
"type": "object",
"properties": {
"host": {
"type": "string"
},
"method": {
"type": "string",
"enum": [
"GET",
"HEAD"
]
}
},
"required": [
"host",
"method"
],
"additionalProperties": false
},
"status_code": {
"type": [
"number",
"null"
]
},
"latency_ms": {
"type": [
"number",
"null"
]
},
"body_sha256": {
"type": [
"string",
"null"
]
},
"bytes_observed": {
"type": "number"
},
"body_truncated": {
"type": "boolean"
},
"assertion_results": {
"type": "array",
"items": {
"anyOf": [
{
"type": "object",
"properties": {
"kind": {
"type": "string",
"const": "status"
},
"expected": {
"type": "number"
},
"actual": {
"type": "number"
},
"passed": {
"type": "boolean"
}
},
"required": [
"kind",
"expected",
"actual",
"passed"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"kind": {
"type": "string",
"const": "header_equals"
},
"key": {
"type": "string"
},
"expected": {
"type": "string"
},
"actual_fingerprint": {
"type": "object",
"properties": {
"type": {
"type": "string"
},
"sha256": {
"type": "string"
}
},
"required": [
"type",
"sha256"
],
"additionalProperties": false
},
"passed": {
"type": "boolean"
}
},
"required": [
"kind",
"key",
"expected",
"actual_fingerprint",
"passed"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"kind": {
"type": "string",
"const": "header_equals"
},
"key": {
"type": "string"
},
"expected": {
"type": "string"
},
"passed": {
"type": "boolean",
"const": false
},
"error_code": {
"type": "string"
}
},
"required": [
"kind",
"key",
"expected",
"passed",
"error_code"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"kind": {
"type": "string",
"const": "json_equals"
},
"key": {
"type": "string"
},
"expected": {},
"actual_fingerprint": {
"type": "object",
"properties": {
"type": {
"type": "string"
},
"sha256": {
"type": "string"
}
},
"required": [
"type",
"sha256"
],
"additionalProperties": false
},
"passed": {
"type": "boolean"
}
},
"required": [
"kind",
"key",
"expected",
"actual_fingerprint",
"passed"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"kind": {
"type": "string",
"const": "json_equals"
},
"key": {
"type": "string"
},
"expected": {},
"passed": {
"type": "boolean",
"const": false
},
"error_code": {
"type": "string"
}
},
"required": [
"kind",
"key",
"expected",
"passed",
"error_code"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"kind": {
"type": "string",
"const": "body_contains"
},
"expected": {
"type": "string"
},
"contains": {
"type": "boolean"
},
"passed": {
"type": "boolean"
}
},
"required": [
"kind",
"expected",
"contains",
"passed"
],
"additionalProperties": false
}
]
}
},
"redirects_followed": {
"type": "boolean"
},
"redirect_count": {
"type": "number"
},
"final_url": {
"type": "string"
},
"redirect_chain": {
"type": "array",
"items": {
"type": "object",
"properties": {
"hop": {
"type": "number"
},
"from_url": {
"type": "string"
},
"status_code": {
"type": "number"
},
"location": {
"type": "string"
},
"resolved_url": {
"type": "string"
},
"validated": {
"type": "boolean"
},
"rejection": {
"type": "string"
}
},
"required": [
"hop",
"from_url",
"status_code",
"validated"
],
"additionalProperties": false
}
},
"termination": {
"type": "string"
},
"error_code": {
"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"
],
"additionalProperties": false
},
"summary": {
"type": "object",
"properties": {
"observations": {
"type": "number"
},
"counts": {
"type": "object",
"properties": {
"PASS": {
"type": "number"
},
"FAIL": {
"type": "number"
},
"ERROR": {
"type": "number"
}
},
"required": [
"PASS",
"FAIL",
"ERROR"
],
"additionalProperties": false
},
"dominant_verdict": {
"anyOf": [
{
"type": "string",
"enum": [
"PASS",
"FAIL"
]
},
{
"type": "null"
}
]
},
"agreement": {
"type": [
"number",
"null"
]
},
"changed_since_previous": {
"type": "boolean"
}
},
"required": [
"observations",
"counts",
"dominant_verdict",
"agreement",
"changed_since_previous"
],
"additionalProperties": false
}
},
"required": [
"protocol",
"evidence_source",
"evidence_age_seconds",
"result",
"summary"
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false
}🟢probe.history(probe_id, limit)
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.
入力スキーマ
{
"type": "object",
"properties": {
"probe_id": {
"type": "string",
"pattern": "^[a-f0-9]{64}$",
"description": "The 64-character lowercase hexadecimal Probe experiment ID returned by verify_http_claim."
},
"limit": {
"default": 10,
"description": "Maximum number of newest stored observations to return, from 1 through 20.",
"type": "integer",
"minimum": 1,
"maximum": 20
}
},
"required": [
"probe_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}出力スキーマ
{
"type": "object",
"properties": {
"protocol": {
"type": "string",
"const": "probe.history.v0"
},
"probe_id": {
"type": "string"
},
"observations": {
"type": "array",
"items": {
"type": "object",
"properties": {
"protocol": {
"type": "string",
"const": "probe.evidence.v0"
},
"probe_id": {
"type": "string"
},
"observed_at": {
"type": "string"
},
"verdict": {
"type": "string",
"enum": [
"PASS",
"FAIL",
"ERROR"
]
},
"target": {
"type": "object",
"properties": {
"host": {
"type": "string"
},
"method": {
"type": "string",
"enum": [
"GET",
"HEAD"
]
}
},
"required": [
"host",
"method"
],
"additionalProperties": false
},
"status_code": {
"type": [
"number",
"null"
]
},
"latency_ms": {
"type": [
"number",
"null"
]
},
"body_sha256": {
"type": [
"string",
"null"
]
},
"bytes_observed": {
"type": "number"
},
"body_truncated": {
"type": "boolean"
},
"assertion_results": {
"type": "array",
"items": {
"anyOf": [
{
"type": "object",
"properties": {
"kind": {
"type": "string",
"const": "status"
},
"expected": {
"type": "number"
},
"actual": {
"type": "number"
},
"passed": {
"type": "boolean"
}
},
"required": [
"kind",
"expected",
"actual",
"passed"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"kind": {
"type": "string",
"const": "header_equals"
},
"key": {
"type": "string"
},
"expected": {
"type": "string"
},
"actual_fingerprint": {
"type": "object",
"properties": {
"type": {
"type": "string"
},
"sha256": {
"type": "string"
}
},
"required": [
"type",
"sha256"
],
"additionalProperties": false
},
"passed": {
"type": "boolean"
}
},
"required": [
"kind",
"key",
"expected",
"actual_fingerprint",
"passed"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"kind": {
"type": "string",
"const": "header_equals"
},
"key": {
"type": "string"
},
"expected": {
"type": "string"
},
"passed": {
"type": "boolean",
"const": false
},
"error_code": {
"type": "string"
}
},
"required": [
"kind",
"key",
"expected",
"passed",
"error_code"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"kind": {
"type": "string",
"const": "json_equals"
},
"key": {
"type": "string"
},
"expected": {},
"actual_fingerprint": {
"type": "object",
"properties": {
"type": {
"type": "string"
},
"sha256": {
"type": "string"
}
},
"required": [
"type",
"sha256"
],
"additionalProperties": false
},
"passed": {
"type": "boolean"
}
},
"required": [
"kind",
"key",
"expected",
"actual_fingerprint",
"passed"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"kind": {
"type": "string",
"const": "json_equals"
},
"key": {
"type": "string"
},
"expected": {},
"passed": {
"type": "boolean",
"const": false
},
"error_code": {
"type": "string"
}
},
"required": [
"kind",
"key",
"expected",
"passed",
"error_code"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"kind": {
"type": "string",
"const": "body_contains"
},
"expected": {
"type": "string"
},
"contains": {
"type": "boolean"
},
"passed": {
"type": "boolean"
}
},
"required": [
"kind",
"expected",
"contains",
"passed"
],
"additionalProperties": false
}
]
}
},
"redirects_followed": {
"type": "boolean"
},
"redirect_count": {
"type": "number"
},
"final_url": {
"type": "string"
},
"redirect_chain": {
"type": "array",
"items": {
"type": "object",
"properties": {
"hop": {
"type": "number"
},
"from_url": {
"type": "string"
},
"status_code": {
"type": "number"
},
"location": {
"type": "string"
},
"resolved_url": {
"type": "string"
},
"validated": {
"type": "boolean"
},
"rejection": {
"type": "string"
}
},
"required": [
"hop",
"from_url",
"status_code",
"validated"
],
"additionalProperties": false
}
},
"termination": {
"type": "string"
},
"error_code": {
"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"
],
"additionalProperties": false
}
},
"summary": {
"type": "object",
"properties": {
"observations": {
"type": "number"
},
"counts": {
"type": "object",
"properties": {
"PASS": {
"type": "number"
},
"FAIL": {
"type": "number"
},
"ERROR": {
"type": "number"
}
},
"required": [
"PASS",
"FAIL",
"ERROR"
],
"additionalProperties": false
},
"dominant_verdict": {
"anyOf": [
{
"type": "string",
"enum": [
"PASS",
"FAIL"
]
},
{
"type": "null"
}
]
},
"agreement": {
"type": [
"number",
"null"
]
},
"changed_since_previous": {
"type": "boolean"
}
},
"required": [
"observations",
"counts",
"dominant_verdict",
"agreement",
"changed_since_previous"
],
"additionalProperties": false
}
},
"required": [
"protocol",
"probe_id",
"observations",
"summary"
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false
}コミュニティ
エビデンス