JIDEC: Bitcoin-anchored public verification ledger (NENRIN)

Read agents' Bitcoin-anchored conduct history (NENRIN) and cite and recompute ledger records.

Should I use this

Quality & Safety

A
Description quality
100%
Schema completeness
84%
Naming quality
80%
Poisoning risk
100%
Permission match
100%
Protocol compliance
100%

Based on automated analysis of tool definitions and protocol compliance.

Context Cost

~2,694Tokens (tool definitions)
~2.3 KBTypical response size
Significant attention impact (2.10% of 128k context)

This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.

Install

One-Click Install

Add this to your `claude_desktop_config.json` file:

{
  "mcpServers": {
    "jidec": {
      "url": "https://jidec.horizonshield.dev/mcp"
    }
  }
}

Remote endpoints

https://jidec.horizonshield.dev/mcpstreamable-http

What it can do

Tool inventory

Tools (9)

🟢 Read-only🟡 Write🔴 Delete⚪ Unknown
🟢jidec_cite(citation)

Resolve and INDEPENDENTLY verify any JIDEC citation. Accepts 'jidec:path:<sha>', 'jidec:entry:<n>', a bare 64-hex id, or a ledger URL. Fetches the record's exact bytes, recomputes SHA-256 locally, and confirms it equals the cited id. Returns integrity, Bitcoin anchoring status, the parsed record (verification path, claim, or v0 spec entry), and an explicit statement of what the proof does and does not cover. No trust in HORIZON SHIELD is required to accept the result.

Input Schema

{
  "type": "object",
  "properties": {
    "citation": {
      "type": "string",
      "description": "jidec:path:<sha> | jidec:entry:<n> | 64-hex | ledger URL"
    }
  },
  "required": [
    "citation"
  ]
}

Output Schema

{
  "type": "object",
  "properties": {
    "lookup": {
      "type": "string",
      "enum": [
        "ok",
        "absent"
      ],
      "description": "ok = the ledger was read and the record exists. absent = the ledger was read and there is no such record. A read that FAILED never appears here: it comes back as a tool error (isError: true), so a consumer can never mistake this server's own failure for a statement about the ledger's contents."
    },
    "citation": {
      "type": "string"
    },
    "resolved_entry": {
      "type": [
        "number",
        "string",
        "null"
      ]
    },
    "integrity": {
      "type": "object",
      "description": "The whole point: claimed vs recomputed. match:false is an integrity FAILURE, which is a finding, not an error.",
      "properties": {
        "claimed_sha256": {
          "type": "string"
        },
        "recomputed_sha256": {
          "type": "string"
        },
        "match": {
          "type": "boolean"
        }
      },
      "required": [
        "match"
      ]
    },
    "bitcoin": {
      "type": "object",
      "properties": {
        "status": {
          "type": "string"
        }
      }
    },
    "record_kind": {
      "type": "string"
    },
    "trust_note": {
      "type": "string"
    },
    "limits": {
      "type": "string"
    }
  },
  "required": [
    "lookup",
    "integrity"
  ],
  "additionalProperties": true
}
🟢jidec_replay(citation)

Re-observe an anchored JIDEC verification path against the live system right now and report drift. Returns MATCH (the live system still matches what was anchored) or DRIFT (it changed), node by node. Nodes that cannot be re-observed server-side are reported as deferred, never counted as drift.

Input Schema

{
  "type": "object",
  "properties": {
    "citation": {
      "type": "string",
      "description": "jidec:path:<sha> | jidec:entry:<n> | ledger URL"
    }
  },
  "required": [
    "citation"
  ]
}

Output Schema

{
  "type": "object",
  "properties": {
    "lookup": {
      "type": "string",
      "enum": [
        "ok",
        "absent"
      ],
      "description": "ok = the ledger was read and the record exists. absent = the ledger was read and there is no such record. A read that FAILED never appears here: it comes back as a tool error (isError: true), so a consumer can never mistake this server's own failure for a statement about the ledger's contents."
    },
    "verdict": {
      "type": "string",
      "description": "MATCH or DRIFT. Nodes that could not be re-observed are deferred, never counted as drift."
    }
  },
  "required": [
    "lookup"
  ],
  "additionalProperties": true
}
🟢jidec_list_paths

List the anchored JIDEC verification paths (most recent first), with purpose, verdict and Bitcoin anchoring status.

Input Schema

{
  "type": "object",
  "properties": {}
}

Output Schema

{
  "type": "object",
  "properties": {
    "lookup": {
      "type": "string",
      "enum": [
        "ok",
        "absent"
      ],
      "description": "ok = the ledger was read and the record exists. absent = the ledger was read and there is no such record. A read that FAILED never appears here: it comes back as a tool error (isError: true), so a consumer can never mistake this server's own failure for a statement about the ledger's contents."
    },
    "count": {
      "type": "number",
      "description": "How many anchored paths the ledger returned. 0 means the ledger answered and holds none. It never means the ledger could not be read, that is an error."
    },
    "paths": {
      "type": "array",
      "items": {
        "type": "object"
      }
    }
  },
  "required": [
    "lookup",
    "count"
  ],
  "additionalProperties": true
}
🟢jidec_how_to_verify(citation)

Return the step-by-step recipe for verifying a JIDEC record WITHOUT trusting HORIZON SHIELD: which bytes to fetch, which hashes to recompute, which OpenTimestamps proof to check, which algorithm commit to check out, and what must match. Use this when you want to confirm the result yourself rather than repeat an assertion.

Input Schema

{
  "type": "object",
  "properties": {
    "citation": {
      "type": "string",
      "description": "jidec:path:<sha> | jidec:entry:<n> | 64-hex | ledger URL"
    }
  },
  "required": [
    "citation"
  ]
}

Output Schema

{
  "type": "object",
  "properties": {
    "lookup": {
      "type": "string",
      "enum": [
        "ok",
        "absent"
      ],
      "description": "ok = the ledger was read and the record exists. absent = the ledger was read and there is no such record. A read that FAILED never appears here: it comes back as a tool error (isError: true), so a consumer can never mistake this server's own failure for a statement about the ledger's contents."
    },
    "citation": {
      "type": "string"
    },
    "resolved_entry": {
      "type": [
        "number",
        "string",
        "null"
      ]
    },
    "path_id": {
      "type": "string"
    },
    "recipe": {
      "type": [
        "object",
        "string"
      ]
    }
  },
  "required": [
    "lookup"
  ],
  "additionalProperties": true
}
🟢nenrin_resume(endpoint)

Return the NENRIN résumé of an agent or MCP endpoint: every recorded measurement that touches its origin (by the gate and by outside witnesses, signed or not), which are Bitcoin-anchored, discrepancies, rings, agreements, and the records not counted with the reason. Includes resume_sha256 and a recompute recipe. A history, not a score. Absent means no record, not a negative finding.

Input Schema

{
  "type": "object",
  "properties": {
    "endpoint": {
      "type": "string",
      "description": "https URL of the agent or MCP endpoint, e.g. https://mcp.horizonshield.dev/mcp"
    }
  },
  "required": [
    "endpoint"
  ]
}

Output Schema

{
  "type": "object",
  "properties": {
    "lookup": {
      "type": "string",
      "enum": [
        "ok",
        "absent"
      ],
      "description": "ok = the ledger was read and the record exists. absent = the ledger was read and there is no such record. A read that FAILED never appears here: it comes back as a tool error (isError: true), so a consumer can never mistake this server's own failure for a statement about the ledger's contents."
    },
    "source_url": {
      "type": "string",
      "description": "The public ledger URL that returned this body. Fetch it yourself to compare."
    },
    "does_not_establish": {
      "type": "array",
      "items": {
        "type": "string"
      }
    }
  },
  "required": [
    "lookup",
    "source_url"
  ],
  "additionalProperties": true
}
🟢nenrin_trust_signal(endpoint)

Return the compact NENRIN signal for an endpoint: counts of anchored measurements, witness diversity and freshness, in a shape a trust engine or orderer can read. No score, no allow or deny.

Input Schema

{
  "type": "object",
  "properties": {
    "endpoint": {
      "type": "string",
      "description": "https URL of the agent or MCP endpoint"
    }
  },
  "required": [
    "endpoint"
  ]
}

Output Schema

{
  "type": "object",
  "properties": {
    "lookup": {
      "type": "string",
      "enum": [
        "ok",
        "absent"
      ],
      "description": "ok = the ledger was read and the record exists. absent = the ledger was read and there is no such record. A read that FAILED never appears here: it comes back as a tool error (isError: true), so a consumer can never mistake this server's own failure for a statement about the ledger's contents."
    },
    "source_url": {
      "type": "string",
      "description": "The public ledger URL that returned this body. Fetch it yourself to compare."
    },
    "does_not_establish": {
      "type": "array",
      "items": {
        "type": "string"
      }
    }
  },
  "required": [
    "lookup",
    "source_url"
  ],
  "additionalProperties": true
}
🟢nenrin_witness(sha256)

Return one NENRIN witness record by its record SHA-256: pending or anchored, and when anchored, the ledger entry and batch that carry it. Use it to check a walk someone says they submitted.

Input Schema

{
  "type": "object",
  "properties": {
    "sha256": {
      "type": "string",
      "description": "64-hex record SHA-256"
    }
  },
  "required": [
    "sha256"
  ]
}

Output Schema

{
  "type": "object",
  "properties": {
    "lookup": {
      "type": "string",
      "enum": [
        "ok",
        "absent"
      ],
      "description": "ok = the ledger was read and the record exists. absent = the ledger was read and there is no such record. A read that FAILED never appears here: it comes back as a tool error (isError: true), so a consumer can never mistake this server's own failure for a statement about the ledger's contents."
    },
    "source_url": {
      "type": "string",
      "description": "The public ledger URL that returned this body. Fetch it yourself to compare."
    },
    "does_not_establish": {
      "type": "array",
      "items": {
        "type": "string"
      }
    }
  },
  "required": [
    "lookup",
    "source_url"
  ],
  "additionalProperties": true
}
🟢nenrin_ledger_head

Return the current head of the JIDEC/NENRIN ledger: entry count n, the head hash, and the end marker bound into the chain (jidec-head-v1) with the recipe to recompute it. Compare it with a head you saw earlier to detect truncation or rewrite.

Input Schema

{
  "type": "object",
  "properties": {}
}

Output Schema

{
  "type": "object",
  "properties": {
    "lookup": {
      "type": "string",
      "enum": [
        "ok",
        "absent"
      ],
      "description": "ok = the ledger was read and the record exists. absent = the ledger was read and there is no such record. A read that FAILED never appears here: it comes back as a tool error (isError: true), so a consumer can never mistake this server's own failure for a statement about the ledger's contents."
    },
    "source_url": {
      "type": "string",
      "description": "The public ledger URL that returned this body. Fetch it yourself to compare."
    },
    "does_not_establish": {
      "type": "array",
      "items": {
        "type": "string"
      }
    }
  },
  "required": [
    "lookup",
    "source_url"
  ],
  "additionalProperties": true
}
🟢nenrin_ledger_entry(n)

Return ledger entry n as the ledger serves it: claim_sha256, the canonical record bytes, work description, OpenTimestamps status and Bitcoin block when anchored. Pair with jidec_how_to_verify to recompute it.

Input Schema

{
  "type": "object",
  "properties": {
    "n": {
      "type": "integer",
      "minimum": 1,
      "description": "entry number"
    }
  },
  "required": [
    "n"
  ]
}

Output Schema

{
  "type": "object",
  "properties": {
    "lookup": {
      "type": "string",
      "enum": [
        "ok",
        "absent"
      ],
      "description": "ok = the ledger was read and the record exists. absent = the ledger was read and there is no such record. A read that FAILED never appears here: it comes back as a tool error (isError: true), so a consumer can never mistake this server's own failure for a statement about the ledger's contents."
    },
    "source_url": {
      "type": "string",
      "description": "The public ledger URL that returned this body. Fetch it yourself to compare."
    },
    "does_not_establish": {
      "type": "array",
      "items": {
        "type": "string"
      }
    }
  },
  "required": [
    "lookup",
    "source_url"
  ],
  "additionalProperties": true
}

Community

Rate this Server

Evidence

Recent observations

verifiedversion not recorded9 tools
verifiedversion not recorded4 tools
verifiedversion not recorded4 tools