Endpoint and protocol
POST /api/v1/mcp. Authentication: x-pv-internal-token header (internal qualification only — not for external consumers). Protocol: JSON-RPC 2.0 (protocolVersion 2024-11-05). Server name: pv-actionability-mcp. Send { "jsonrpc": "2.0", "id": 1, "method": "tools/list" } to retrieve the full tool registry. Send { "method": "tools/call", "params": { "name": "<tool>", "arguments": { ... } } } to invoke a tool.
resolve_trust
Read-only. Input: { subject_id: string } (DET-V1-*). Returns the full MachineTrustResponse (schema pv.machine-trust.v1) by delegating to GET /api/v1/trust/{subject_id}/machine. Includes tier, claims, evidence, authority, freshness, lifecycle, and trust_state_digest. authority.authoritative_state will be NOT_AUTHORIZED in the current system state.
resolve_subject + resolve_lifecycle
resolve_subject: input { subject_public_id }. Returns physical_subject_id (laboratory_report_reference), asset_id, and external_identifiers. Read-only. — resolve_lifecycle: input { subject_public_id }. Returns lifecycle_state (NOT_ISSUED / ACTIVE / SUSPENDED / REVOKED / EXPIRED / SUPERSEDED), credential_id, issued_at, expires_at, successor_id. Read-only.
evaluate_actionability + create_reliance_receipt
evaluate_actionability: input { principal, organization, subject_id, purpose_id, requested_action, claim_scope }. Returns ALLOW / DENY / QUALIFY / UNKNOWN decision. Receipts are recorded non-fatally. — create_reliance_receipt: input identity fields only (same as POST /api/v1/reliance-receipts). Prohibited: decision, trust_state_digest, tier, verdicts. Server resolves canonical trust and derives all decision fields. Idempotent by (principal, subject_public_id, purpose_id, requested_action, determination_digest).
get_reliance_receipt + ack_reliance_receipt + compare_current
get_reliance_receipt: input { receipt_id }. Returns the stored pv-reliance-receipt-v1 record. — ack_reliance_receipt: input { receipt_id, acknowledged_by }. Transitions acknowledgement_state from pending to acknowledged. Delivery state only — does not mutate trust state. Idempotent. — compare_current: input { receipt_id }. Compares historical trust_state_digest against current canonical determination. Returns UNCHANGED / CHANGED / INVALIDATED with changed_fields.
AI boundary
AI systems calling these tools may classify, summarize, compare, and flag trust state. AI must not create evidence, invent source independence, supply decision fields, issue without authority, or convert UNKNOWN or QUALIFY into ALLOW. authority.authoritative_state=NOT_AUTHORIZED means no credential authority exists in the current system state.