Serveur MCP

SeenRelay

io.github.ovladon/seenrelay
Infrastructure MCP et agents Public et accessible MCP 2025-11-25

Ce que fait ce MCP

Caches and compares independently observed facts to identify reusable, changed, contested, stale, or unknown evidence.

check_fact
Check Fact Freshness
Cost preflight before repeated paid or slow source-backed validation, especially across an agent fleet. Use before paid web search, metered scraping, browser/extraction, rate-limited APIs or multi-step validation when the caller already has a known value. Returns SAME_OBSERVED, CHANGED_OBSERVED, CONTESTED, STALE or UNKNOWN. Only SAME_OBSERVED can be considered for caller-policy-gated reuse; every other status requires normal authoritative validation before OBSERVE. SeenRelay never browses or verifies externally.
Lecture seule Idempotent
Schéma d’entrée
{'type': 'object', '$defs': {'__schema0': {'anyOf': [{'type': 'string'}, {'type': 'number'}, {'type': 'boolean'}, {'type': 'null'}, {'type': 'array', 'items': {'$ref': '#/$defs/__schema0'}}, {'type': 'object', 'propertyNames': {'type': 'string'}, 'additionalProperties': {'$ref': '#/$defs/__schema0'}}]}}, '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['fact', 'known_value'], 'properties': {'fact': {'type': 'object', 'required': ['subject', 'predicate', 'source'], 'properties': {'source': {'type': 'string', 'format': 'uri', 'maxLength': 2048, 'description': 'Stable credential-free absolute HTTP(S) source URL. Tracking parameters are removed; authentication or signature query parameters are rejected.'}, 'locator': {'type': 'object', 'required': ['scheme', 'value'], 'properties': {'value': {'type': 'string', 'maxLength': 1024, 'minLength': 1, 'description': 'Source-native locator value. json_pointer values must begin with /; locator bytes are otherwise preserved.'}, 'scheme': {'enum': ['json_pointer', 'element_id', 'source_key'], 'type': 'string', 'description': 'Source-native locator type: RFC 6901-style JSON pointer, stable HTML element id, or stable source-native key.'}}, 'description': 'Stable source-native locator. Prefer this when the source exposes one.'}, 'subject': {'type': 'string', 'maxLength': 256, 'minLength': 1, 'description': 'Human-readable label; excluded from canonical fact identity.'}, 'predicate': {'type': 'string', 'maxLength': 128, 'minLength': 1, 'description': 'Stable shared machine identifier; identity-bearing only when locator is absent.'}, 'qualifiers': {'type': 'object', 'description': 'Identity-bearing semantic qualifiers. Include only fields needed to distinguish otherwise identical source-backed facts.', 'propertyNames': {'type': 'string'}, 'additionalProperties': {'$ref': '#/$defs/__schema0'}}}, 'description': 'Source-backed fact coordinate whose recent shared evidence should be checked.'}, 'known_value': {'$ref': '#/$defs/__schema0', 'description': 'Caller-known value to compare with recent observations. Mutable observed content is excluded from fact identity.'}, 'max_age_seconds': {'type': 'integer', 'maximum': 604800, 'minimum': 1, 'description': 'Maximum age, in seconds, of shared observations the caller is willing to consider. Omit to use the service default.'}}}
Schéma de sortie
{'type': 'object', '$defs': {'__schema0': {'anyOf': [{'type': 'string'}, {'type': 'number'}, {'type': 'boolean'}, {'type': 'null'}, {'type': 'array', 'items': {'$ref': '#/$defs/__schema0'}}, {'type': 'object', 'propertyNames': {'type': 'string'}, 'additionalProperties': {'$ref': '#/$defs/__schema0'}}]}}, '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'hive': {'$ref': '#/$defs/__schema0', 'description': 'Current bounded Hive admission/lease state.'}, 'error': {'type': 'object', 'required': ['code', 'detail'], 'properties': {'code': {'type': 'string', 'description': 'Stable machine-readable service/admission error code.'}, 'detail': {'type': 'string', 'description': 'Human-readable error detail. A tool error is not evidence that the source value is unchanged.'}}, 'description': 'Present instead of a decision status when CHECK cannot be admitted or is controlled.', 'additionalProperties': {}}, 'status': {'enum': ['SAME_OBSERVED', 'CHANGED_OBSERVED', 'CONTESTED', 'STALE', 'UNKNOWN'], 'type': 'string', 'description': 'Decision status when CHECK succeeds. Only SAME_OBSERVED can be considered for reuse, and only under caller policy. CHANGED_OBSERVED, CONTESTED, STALE and UNKNOWN require normal authoritative validation before any OBSERVE.'}, 'fact_key': {'type': 'string', 'description': 'Canonical SeenRelay fact identity for this coordinate.'}, 'next_step': {'type': 'string', 'const': 'VALIDATE_THEN_OBSERVE', 'description': 'Explicit cold/stale-path instruction: validate the authoritative source normally, then OBSERVE the independently obtained result.'}, 'useful_reuse_awards': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0, 'description': 'Qualified reuse awards attributable to this CHECK under SeenRelay telemetry rules; not a truth or independence score.'}}, 'description': 'CHECK result. Exactly one of a decision status or an error is expected; additional evidence fields may be present.', 'additionalProperties': {}}
observe_fact
Contribute Fact Observation
After independently performing a source-backed validation, deposit the observed result for later CHECKs. Returns accepted=true when a new observation is stored or deduplicated=true for a recognized retry/recent duplicate. Never OBSERVE hearsay. Optional Ed25519 proof establishes key possession and continuity, not truth or real-world independence.
Schéma d’entrée
{'type': 'object', '$defs': {'__schema0': {'anyOf': [{'type': 'string'}, {'type': 'number'}, {'type': 'boolean'}, {'type': 'null'}, {'type': 'array', 'items': {'$ref': '#/$defs/__schema0'}}, {'type': 'object', 'propertyNames': {'type': 'string'}, 'additionalProperties': {'$ref': '#/$defs/__schema0'}}]}}, '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['fact', 'value'], 'properties': {'fact': {'type': 'object', 'required': ['subject', 'predicate', 'source'], 'properties': {'source': {'type': 'string', 'format': 'uri', 'maxLength': 2048, 'description': 'Stable credential-free absolute HTTP(S) source URL. Tracking parameters are removed; authentication or signature query parameters are rejected.'}, 'locator': {'type': 'object', 'required': ['scheme', 'value'], 'properties': {'value': {'type': 'string', 'maxLength': 1024, 'minLength': 1, 'description': 'Source-native locator value. json_pointer values must begin with /; locator bytes are otherwise preserved.'}, 'scheme': {'enum': ['json_pointer', 'element_id', 'source_key'], 'type': 'string', 'description': 'Source-native locator type: RFC 6901-style JSON pointer, stable HTML element id, or stable source-native key.'}}, 'description': 'Stable source-native locator. Prefer this when the source exposes one.'}, 'subject': {'type': 'string', 'maxLength': 256, 'minLength': 1, 'description': 'Human-readable label; excluded from canonical fact identity.'}, 'predicate': {'type': 'string', 'maxLength': 128, 'minLength': 1, 'description': 'Stable shared machine identifier; identity-bearing only when locator is absent.'}, 'qualifiers': {'type': 'object', 'description': 'Identity-bearing semantic qualifiers. Include only fields needed to distinguish otherwise identical source-backed facts.', 'propertyNames': {'type': 'string'}, 'additionalProperties': {'$ref': '#/$defs/__schema0'}}}, 'description': 'Source-backed fact coordinate for the independently obtained observation.'}, 'value': {'$ref': '#/$defs/__schema0', 'description': 'Value independently obtained by the caller. Mutable observed content is excluded from fact identity.'}, 'observed_at': {'type': 'string', 'description': 'ISO-8601 time when the caller obtained the observation. Omit to use server receipt time.'}, 'observer_id': {'type': 'string', 'maxLength': 128, 'minLength': 1, 'description': 'Optional self-asserted continuity label. It is unverified unless accompanied by observer_proof.'}, 'observer_proof': {'type': 'object', 'required': ['scheme', 'public_key', 'timestamp', 'nonce', 'signature'], 'properties': {'nonce': {'type': 'string', 'maxLength': 128, 'minLength': 1, 'description': '16..64 random bytes encoded as unpadded base64url.'}, 'scheme': {'type': 'string', 'const': 'ed25519-v1', 'description': 'Observer proof contract version.'}, 'signature': {'type': 'string', 'maxLength': 256, 'minLength': 1, 'description': 'Raw 64-byte Ed25519 signature encoded as unpadded base64url.'}, 'timestamp': {'type': 'string', 'maxLength': 64, 'minLength': 1, 'description': 'ISO-8601 signing time; it must fall within the configured proof-skew window.'}, 'public_key': {'type': 'string', 'maxLength': 128, 'minLength': 1, 'description': 'Raw 32-byte Ed25519 public key encoded as unpadded base64url.'}}, 'description': 'Optional Ed25519 proof of key possession, continuity and payload integrity; not proof of truth or real-world independence.'}, 'idempotency_key': {'type': 'string', 'maxLength': 128, 'minLength': 1, 'description': 'Caller-chosen retry key for the same OBSERVE operation. Reusing it deduplicates an idempotent retry.'}, 'source_validator': {'type': 'object', 'required': ['kind', 'value'], 'properties': {'kind': {'enum': ['etag', 'last_modified', 'content_hash', 'other'], 'type': 'string', 'description': 'Type of observer-supplied source-validator metadata.'}, 'value': {'type': 'string', 'pattern': '^[^\\r\\n]+$', 'maxLength': 512, 'minLength': 1, 'description': 'Observer-supplied validator value. Stored and returned only as a hint; SeenRelay does not verify it against the source.'}}, 'description': 'Optional source-validator metadata from the independent validation. The caller decides whether a returned hint is sufficient for source confirmation.'}, 'evidence_fingerprint': {'type': 'string', 'maxLength': 256, 'minLength': 1, 'description': 'Optional caller-supplied fingerprint of the independently obtained evidence. SeenRelay stores it as provenance metadata and does not verify it against the source.'}}}
Schéma de sortie
{'type': 'object', '$defs': {'__schema0': {'anyOf': [{'type': 'string'}, {'type': 'number'}, {'type': 'boolean'}, {'type': 'null'}, {'type': 'array', 'items': {'$ref': '#/$defs/__schema0'}}, {'type': 'object', 'propertyNames': {'type': 'string'}, 'additionalProperties': {'$ref': '#/$defs/__schema0'}}]}}, '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'hive': {'$ref': '#/$defs/__schema0', 'description': 'Current bounded Hive admission/lease state.'}, 'error': {'type': 'object', 'required': ['code', 'detail'], 'properties': {'code': {'type': 'string', 'description': 'Stable machine-readable service/admission error code.'}, 'detail': {'type': 'string', 'description': 'Human-readable error detail. A tool error is not evidence that the source value is unchanged.'}}, 'description': 'Present when OBSERVE cannot be admitted or is controlled. This is not a statement about source truth.', 'additionalProperties': {}}, 'reason': {'type': 'string', 'description': 'Deduplication reason when accepted=false and deduplicated=true.'}, 'accepted': {'type': 'boolean', 'description': 'True when a new independently obtained observation was stored. Omitted when OBSERVE cannot be admitted.'}, 'fact_key': {'type': 'string', 'description': 'Canonical SeenRelay fact identity for this coordinate.'}, 'deduplicated': {'type': 'boolean', 'description': 'True when an idempotent/recent duplicate was recognized and no new observation row was needed.'}, 'future_check_eligible': {'type': 'boolean', 'description': 'Whether the accepted or deduplicated observation is eligible to support later CHECKs under normal freshness rules.'}}, 'description': 'OBSERVE result. accepted=true means a new observation was stored; deduplicated=true means the retry/recent duplicate was recognized.', 'additionalProperties': {}}
Ajouté
observe_fact
17 September 2026 12:45
Ajouté
check_fact
17 September 2026 12:45