Deterministic AI-liability attribution: signed, Bitcoin-anchored vendor/deployer/user fault split. The MCP server implements a Model Context Protocol to produce verifiable, auditable context for AI deployments, enabling deterministic attribution of liability across parties.
🛠️ Key Features
Deterministic model-context computation for fault attribution
Signed outputs with cryptographic verification
Bitcoin-anchored anchoring for immutable witness data
Submit an AI incident for deterministic causal liability attribution. Returns a signed CausalCertificate, per-agent liability allocation, evidence-chain completeness, regulatory mapping, and (where keys are configured) a Bitcoin-anchored proof. Cost: 50 credits. Three guardrails apply: PII scan, deterministic-only acknowledgement, and minimum evidence.
Parameters11
title
string
required
description
string
optional
category
string
optional
severity
string
optional
jurisdiction
string
optional
financial_impact_cents
any
optional
currency
string
optional
agents
array
required
events
array
required
deterministic_only
boolean
required
G2: Must be true. Acknowledges CausalLayer is deterministic and not LLM-based.
pii_acknowledged
boolean
optional
G1: Set to true ONLY if caller has confirmed PII handling is permitted by their data agreement. False payloads with detected PII will be rejected.
Independently verify a CausalCertificate end-to-end (signature, Merkle integrity, issuer status against the registry). Cost: 1 credit. In production env, certificates from non-active issuers are rejected.
Parameters1
certificate
object
required
CausalCertificateV1 object as returned by submit_incident.certificate
Independently re-derive a CausalCertificate from its canonical input and compare byte-for-byte against the claimed certificate. This is the strongest verification path: it requires no trust in the issuer or signing key. Cost: 1 credit (same price as verify_certificate). Returns PASS only if every checked field (certificateId, request_hash, merkleRoot, verdict, causalGraph, fourFactorScoring, deviationTaxonomy, euRuleOverlay, cascadeAttenuation, damages, underwriting) matches identically.
Parameters2
certificate
object
required
The CausalCertificate object claimed by the issuer.
canonicalInput
object
required
The original incident body that produced the certificate — the same JSON originally posted to submit_incident or submit_otel_trace.
Raw schema
{
"type": "object",
"properties": {
"certificate": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {},
"description": "The CausalCertificate object claimed by the issuer."
},
"canonicalInput": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {},
"description": "The original incident body that produced the certificate — the same JSON originally posted to submit_incident or submit_otel_trace."
}
},
"required": [
"certificate",
"canonicalInput"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}
submit_otel_trace
Convert an OpenTelemetry OTLP JSON trace into a FaultKey incident and return the same deterministic CausalCertificate as submit_incident. Each span becomes an event; service.name groups spans into agents; W3C trace_id and span_id propagate as evidence pointers on the causal graph edges. Cost: 50 credits (same as submit_incident). Three guardrails apply: PII scan, deterministic-only acknowledgement, and minimum evidence (auto-satisfied when the trace has at least 1 span).
Parameters8
title
string
required
otlp
object
required
OTLP JSON payload with resourceSpans[]. See https://opentelemetry.io/docs/specs/otlp/#json-protobuf-encoding
category
string
optional
jurisdiction
string
optional
financial_impact_cents
any
optional
currency
string
optional
deterministic_only
boolean
required
G2: Must be true. Acknowledges CausalLayer is deterministic.
pii_acknowledged
boolean
optional
G1: Set to true ONLY if PII handling is permitted by your data agreement. OTLP traces frequently leak user/session ids in attributes.
Raw schema
{
"type": "object",
"properties": {
"title": {
"type": "string",
"minLength": 3
},
"otlp": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {},
"description": "OTLP JSON payload with resourceSpans[]. See https://opentelemetry.io/docs/specs/otlp/#json-protobuf-encoding"
},
"category": {
"type": "string"
},
"jurisdiction": {
"type": "string"
},
"financial_impact_cents": {
"anyOf": [
{
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
},
{
"type": "null"
}
]
},
"currency": {
"type": "string",
"minLength": 3,
"maxLength": 3
},
"deterministic_only": {
"type": "boolean",
"const": true,
"description": "G2: Must be true. Acknowledges CausalLayer is deterministic."
},
"pii_acknowledged": {
"default": false,
"description": "G1: Set to true ONLY if PII handling is permitted by your data agreement. OTLP traces frequently leak user/session ids in attributes.",
"type": "boolean"
}
},
"required": [
"title",
"otlp",
"deterministic_only"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}
simulate_remediation
Counterfactual remediation simulator. Given a certificate's verdict + fourFactorScoring + agents and a list of remediation IDs from the FK-METHOD-2026-003 catalog, return the apportioned shares each remediation would have produced (in isolation) and the composite shares if they all stack. Every remediation cites a specific statute or standard. GET /api/v2/remediation/catalog for the list of IDs. Cost: 1 credit (same price as verify_certificate). Pure deterministic; same inputs produce a byte-identical result.
Parameters4
verdict
object
required
The verdict block from the CausalCertificate.
fourFactorScoring
object
required
The fourFactorScoring block from the CausalCertificate.
agents
array
required
Agent registry (id + type) so the simulator can map remediation targetType to specific party ids.
remediations
array
required
List of remediation IDs from the catalog (e.g. vendor_adversarial_eval_suite, deployer_human_in_loop). Each may optionally pin appliedToParty to a specific agent id.
Multi-jurisdiction overlay (FK-METHOD-2026-004). Given a canonical attributable apportionment (party-id -> share), the union of all jurisdiction role tags on each actor, and the union of jurisdiction-specific flags, return side-by-side post-overlay shares for AU, EU, US, UK, CA (or a chosen subset) with the specific rules that fired in each, citation URLs, and a parties × jurisdictions matrix. v1 ships full implementations for AU and EU; US/UK/CA are research stubs marked `is_stub: true`. Use GET /api/v2/jurisdiction/catalog to discover support and stub status. Cost: 1 credit. Pure deterministic.
Parameters5
attributable
object
required
Canonical pre-overlay apportionment as { party_id: share }. Sum should approximate 1.0; the function renormalises within tolerance.
actors
array
required
All actors with the union of jurisdiction-specific role tags. EU and AU tags coexist on the same actor record.
flags
object
required
Union of jurisdiction-specific flags. AI Act / PLD flags drive the EU overlay; ACL / CPS 230 / VAISS flags drive the AU overlay.
jurisdictions
array
optional
Optional subset to compute. Defaults to all five.
primaryJurisdiction
string
optional
Engine-level jurisdiction string (e.g. 'EU', 'DE', 'AU'). Used by the EU gate to decide engagement.
Deterministic prospective-evaluation gate (FK-METHOD-2026-006). Pass a ProposedAction BEFORE the agent delivers a response; receive one of three verdicts: 'allow', 'require_revision' (with specific factor-keyed directives), or 'block'. Uses the same four-factor engine that issues post-hoc certificates, so a single incident chains: prospective_pre_image -> response -> certificate -> anchor. This is a policy gate on structured action metadata, NOT a content safety classifier on raw prose. Thresholds are per-jurisdiction (EU strictest, US most permissive); read via GET /api/v2/gate/thresholds. Overrides are allowed but REQUIRE a governance rationale so the audit trail is complete. Cost: 1 credit. Pure deterministic.
Parameters2
action
object
required
The structured ProposedAction to evaluate.
overrides
object
optional
Optional per-call threshold override. Rationale REQUIRED for audit.
Raw schema
{
"type": "object",
"properties": {
"action": {
"type": "object",
"properties": {
"action_id": {
"type": "string",
"description": "Stable id for this action; echoed back."
},
"action_type": {
"type": "string",
"enum": [
"llm_response",
"tool_call",
"code_execution",
"external_api_call",
"human_handoff",
"data_modification",
"financial_transaction",
"medical_advice",
"legal_advice",
"financial_advice",
"content_moderation",
"autonomous_decision",
"other"
],
"description": "The action category. Carries inherent regulatory weight."
},
"acting_agent_id": {
"type": "string",
"description": "Free-form id of the agent issuing the action."
},
"acting_agent_type": {
"type": "string",
"enum": [
"ai_system",
"vendor",
"deployer",
"operator",
"human_user",
"third_party"
],
"description": "Liability-bias category of the acting agent."
},
"severity_estimate": {
"type": "string",
"enum": [
"low",
"medium",
"high",
"critical"
],
"description": "The estimated severity if the action goes wrong."
},
"jurisdiction": {
"description": "Jurisdiction overlay; defaults to AU.",
"type": "string",
"enum": [
"AU",
"EU",
"US",
"UK",
"CA"
]
},
"cascade_depth": {
"description": "How many upstream agents this action is downstream of. 0 = root; 3 = LLM->agent->tool->this. Applies cascade attenuation.",
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
},
"eu_flags": {
"description": "Optional EU AI Act flags; only used when jurisdiction === 'EU'.",
"type": "object",
"properties": {
"high_risk_ai": {
"type": "boolean"
},
"pld_compensable_damage": {
"type": "boolean"
},
"human_oversight_unassigned_or_unqualified": {
"type": "boolean"
}
}
},
"context_flags": {
"description": "Context flags that inform the regulatoryAlignment and controllability sub-scores.",
"type": "object",
"properties": {
"affects_vulnerable_population": {
"type": "boolean"
},
"regulated_domain": {
"type": "boolean"
},
"irreversible_if_executed": {
"type": "boolean"
},
"human_in_the_loop_present": {
"type": "boolean"
}
}
},
"upstream_incident_id": {
"description": "Optional chain to an existing incident trace.",
"type": "string"
}
},
"required": [
"action_id",
"action_type",
"acting_agent_id",
"acting_agent_type",
"severity_estimate"
],
"description": "The structured ProposedAction to evaluate."
},
"overrides": {
"description": "Optional per-call threshold override. Rationale REQUIRED for audit.",
"type": "object",
"properties": {
"allow_below": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"block_at_or_above": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"rationale": {
"type": "string",
"description": "REQUIRED when overrides are provided. Cite the governance basis (e.g. 'ISO/IEC 42001 SoA §3.2 approval')."
}
},
"required": [
"rationale"
]
}
},
"required": [
"action"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}
get_anchor_status
Return the index of all CausalLayer Tessera anchor batches, or one batch's full JSON (signed Merkle root, leaves, OpenTimestamps proof reference). FREE.
Parameters1
version
string
optional
Optional anchor version, e.g. '2026-05-16-v1.6.4-simulation-calibration'.
Return the CausalLayer issuer registry, or one issuer record. The registry lists all trusted public-key fingerprints, key algorithms, validity windows, and the anchor-log repo for each active issuer. FREE — no API key required.
Parameters1
issuer_id
string
optional
Optional issuer id, e.g. 'causallayer-prod-2026-q2'. If omitted, returns the full registry.
Raw schema
{
"type": "object",
"properties": {
"issuer_id": {
"description": "Optional issuer id, e.g. 'causallayer-prod-2026-q2'. If omitted, returns the full registry.",
"type": "string"
}
},
"$schema": "http://json-schema.org/draft-07/schema#"
}
extract_incident
Claude-powered structured extractor. Parses unstructured text (news articles, court filings, emails, PDFs, incident reports, logs) into the typed JSON schema required by submit_incident. Returns a ready-to-submit incident object with extracted agents, events, severity, jurisdiction, and financial impact. NOTE: This is a pre-processing convenience tool — the deterministic scoring engine itself remains LLM-free. Cost: 10 credits.
Parameters3
text
string
required
Unstructured text to extract from. Can be a news article, court filing, incident report, email, PDF text, log output, or any description of an AI incident.
context_hint
string
optional
Optional hint about the source type (e.g., 'court filing', 'news article', 'internal incident report') to improve extraction accuracy.
jurisdiction_hint
string
optional
Optional ISO country code hint if the jurisdiction is known (e.g., 'AU', 'US', 'EU').
Raw schema
{
"type": "object",
"properties": {
"text": {
"type": "string",
"minLength": 20,
"maxLength": 50000,
"description": "Unstructured text to extract from. Can be a news article, court filing, incident report, email, PDF text, log output, or any description of an AI incident."
},
"context_hint": {
"description": "Optional hint about the source type (e.g., 'court filing', 'news article', 'internal incident report') to improve extraction accuracy.",
"type": "string"
},
"jurisdiction_hint": {
"description": "Optional ISO country code hint if the jurisdiction is known (e.g., 'AU', 'US', 'EU').",
"type": "string"
}
},
"required": [
"text"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}
Deterministic fault math for multi-party AI incidents. When an AI causes harm and three parties argue over who pays, FaultKey returns a signed, Bitcoin-anchored certificate of fault allocation in under 200 ms — no LLM, no probabilistic scoring, no vendor cooperation needed for a third party to verify.
This is the official Model Context Protocol (MCP) server for the CausalLayer engine, packaged as a Cloudflare Worker. It lets AI agents (Claude Desktop, Cursor, Cline, Continue, Windsurf) call the four core liability-attribution tools without writing a single line of integration code.
If this saves you time, give it a star — it helps others find it and tells us people care.
Live demo
🎮 Try the Interactive Demo — No setup required. Pick a scenario, click "Run Analysis", see real-time liability attribution.
The public Worker is deployed on Cloudflare's global edge network and is fully functional in standalone demo mode (deterministic responses, watermarked, rate-limited 5 calls / IP / day):
The response includes a Mcp-Session-Id header that you reuse for subsequent calls.
Tools
Tool
Description
Demo limit
Paid cost
submit_incident
Submit an AI incident for deterministic liability attribution. Returns a signed CausalCertificateV1 with per-agent fault allocation, evidence-chain completeness, and Bitcoin-anchored proof.
5 / IP / day
50 credits
verify_certificate
Independently verify a certificate (signature, Merkle integrity, issuer status) without calling FaultKey.
50 / IP / day
1 credit
get_anchor_status
Return the index of all Tessera anchor batches or one batch's full JSON (signed Merkle root, OpenTimestamps proof reference).
Unlimited
Free
query_issuer_registry
List all trusted CausalLayer issuer public-key fingerprints, status, and validity windows.
Unlimited
Free
Why deterministic?
Insurers, banks, and APRA-regulated entities cannot accept LLM-based fault attribution because the same prompt produces different answers on different days. FaultKey uses a closed-form causal scoring algorithm (graph-theoretic, version-pinned, byte-identical reproducible across runs) so two adversarial parties get the same number — that's the whole point.
The math is published as an Australian Standards-aligned paper. The signed certificate, issuer registry, and Merkle anchor log are all independently verifiable by a third party using only Node's built-in crypto and the causallayer-verifier tool — no network calls back to the vendor.
Guardrails (enforced at the Cloudflare edge)
NO-PII — Payloads are regex-scanned for emails, Tax File Numbers, Medicare numbers, SSNs, and credit cards. Rejected unless the caller sets pii_acknowledged: true (which is logged in the certificate as a compliance acknowledgement).
DETERMINISTIC-ONLY — The engine rejects any request lacking deterministic_only: true. This is the agent's binding acknowledgement that FaultKey output is closed-form, not probabilistic.
EVIDENCE-REQ — At least one identified agent and one timestamped event with description must be supplied or the request is rejected with 400 evidence_insufficient.
Self-hosting
You can deploy your own copy to your own Cloudflare account if you want to enforce a corporate firewall, custom rate limits, or bring your own KV namespace:
bash
git clone https://github.com/smq9sn5jck-coder/causallayer-mcp.git
cd causallayer-mcp
pnpm install
pnpm wrangler kv namespace create LEDGER
# paste the returned id into wrangler.jsonc
pnpm wrangler deploy
The CausalLayer engine itself (the closed-form fault math) runs upstream and is available via API key. For self-hosted demos without an upstream, set STANDALONE_DEMO=true in wrangler.jsonc to short-circuit upstream calls and return deterministic, watermarked responses.
For enterprise tenants email sales@faultkey.com (or open a GitHub issue with subject "enterprise inquiry").
Interactive Tools
Score any AI incident in seconds — faultkey.com/score — describe what happened, get a deterministic liability split with dollar exposure, jurisdiction analysis, and a shareable verdict card.
Compare vendor liability profiles — faultkey.com/compare — side-by-side comparison of AI vendors (OpenAI vs Anthropic vs Google etc.) across incident types.
Public accuracy ledger — faultkey.com/track-record — 7/7 direction match on backtested cases, 3 pending predictions on active litigation.