Skip to main content
Glama
riskrouter-recorder

riskrouter-recorder

riskrouter-recorder

Drop-in recorders for Python and Node, with no dependencies, that turn the decision logs you already keep into evidence. Each record and its salt stay in your own journal; only the record's salted SHA-256 and a short kind are sent to an evidence log, so that later anyone holding the record can check it was never changed. The log can be RiskRouter's (https://api.riskrouter.eu), your own instance, or none at all: with no key, nothing is sent and the journal keeps everything.

Install

Read

Python 3.8+

pip install riskrouter-recorder

python/README.md

Node 20+

npm install riskrouter-recorder

js/README.md

What is in them:

  • a recorder with a local journal, batching, retries and completeness chains;

  • a Python logging handler, a decorator (Python) or function wrapper (Node), and OpenTelemetry span processors;

  • agent adapters for LangChain and LangGraph and for the OpenAI Agents SDK: one record per run, with content digests, never content;

  • a local MCP server (Node, riskrouter-recorder-mcp) that gives any MCP client a record_decision tool. It records the agent's own statement of what it decided and marks every record so; it never returns a record or a salt to the agent;

  • riskrouter-logseal, which seals a log stream segment by segment, and riskrouter-otlp-sealer, which seals spans and log records at the OpenTelemetry Collector.

npx -y -p riskrouter-recorder riskrouter-recorder-mcp     # the local MCP server, over stdio

In an MCP client's settings (setup steps for an assistant: llms-install.md):

{ "mcpServers": { "riskrouter-recorder": { "command": "npx",
    "args": ["-y", "-p", "riskrouter-recorder", "riskrouter-recorder-mcp"],
    "env": { "RISKROUTER_JOURNAL": "/absolute/path/to/evidence-journal.jsonl" } } } }

Its tools are record_decision, evidence_lookup and evidence_status; only record_decision writes, and nothing deletes. With RISKROUTER_API_KEY set, each record's salted digest goes to the log; without it, nothing leaves the machine.

RiskRouter also runs a hosted MCP endpoint for reading the log and its proofs, at https://api.riskrouter.eu/mcp (eu.riskrouter/evidence-log in the official MCP Registry). That is the service, not this package.

Seal a release from GitHub Actions

Seal the SHA-256 of each file of a release, so anyone can later show the artefact they hold is the one that shipped, on the day it shipped. Only each record's salted digest leaves the runner; the files stay where they are. With an SBOM, each record is a cra.release of the Cyber Resilience Act pack.

on:
  release:
    types: [published]
jobs:
  seal:
    runs-on: ubuntu-latest
    permissions:
      contents: write   # to attach the receipts to the release
    steps:
      - uses: actions/checkout@v4
      - run: gh release download "$GITHUB_REF_NAME" --dir dist
        env: { GH_TOKEN: "${{ github.token }}" }
      - id: seal
        uses: aniljangrabe-dev/riskrouter-recorder/github-action@main
        with:
          api-key: ${{ secrets.RISKROUTER_API_KEY }}   # free sandbox key: https://riskrouter.eu/integrate
          files: dist/*
          # sbom: dist/sbom.cdx.json
      - run: gh release upload "$GITHUB_REF_NAME" ${{ steps.seal.outputs.receipts }}/*.riskrouter.json
        env: { GH_TOKEN: "${{ github.token }}" }

Each <file>.riskrouter.json is a receipt the published verifiers check offline. Attaching it to the release makes the record and its salt public, which is fine for a public release; for a private one, keep the receipts privately instead. Without the receipt, nobody, RiskRouter included, can tie the log entry to the file. The same sealer runs outside GitHub: RISKROUTER_API_KEY=… npx -p riskrouter-recorder riskrouter-seal-release --product acme/app --version 1.2.0 dist/*.

Related MCP server: peek

Checking what was recorded

A record's bundle is checked offline, without RiskRouter, by either of the open-source verifiers at https://github.com/aniljangrabe-dev/riskrouter-verify. The record format, the salted digest and the log's proofs are specified at https://riskrouter.eu/spec.

About this repository

This repository is an exact copy of recorders/ in RiskRouter's own repository, which is private; a workflow copies every change here when it lands there. Issues are welcome here, and a pull request is read and, if accepted, applied at the source and copied back. Report a security problem as https://riskrouter.eu/security says, not in an issue.

Licence: Apache-2.0 (LICENSE), like the verifiers, the conformance suite and the integration kit. The RiskRouter service itself is not licensed.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      Not graded
      quality
      D
      maintenance
      A local evidence recorder that captures screenshots, recordings, notes, and summaries during long-running agent tasks, enabling reviewable task records with timelines and artifacts.
      4
      MIT
    • A
      license
      A
      quality
      D
      maintenance
      Records masked browser sessions (rrweb DOM + console + network) to a local SQLite store and exposes them to AI coding agents via stdio MCP. Fully local, no SaaS, no telemetry.
      10
      8
      Apache 2.0
    • A
      license
      A
      quality
      D
      maintenance
      MCP server that exposes Routescore's public API for risk assessment, including MEV cover, bridge refund, and swap checks, as tools for AI agents.
      8
      107 npm
      MIT
    • A
      license
      Not graded
      quality
      C
      maintenance
      AI code reviews and git activity digests with machine-readable risk scoring, available as an MCP server for use within an agent session.
      1
      MIT