mcpField
A
audit-ledger-mcp

audit-ledger-mcp

本地服务
github.com/shahidh68法律与政务120 周前更新

关于 audit-ledger-mcp

audit-ledger-mcp 是面向需要防篡改 AI 决策记录的团队的 MCP 服务。它在本地哈希敏感输入,并提供记录决策、验证完整性与完整度以及列出记录的工具。

主要功能

  1. 01记录 AI 决策
  2. 02在本地哈希敏感输入
  3. 03验证记录完整性
  4. 04检查记录是否缺失
  5. 05按时间范围列出决策

适用场景

  1. 01维护 AI 决策工作流的记录
  2. 02检查已存审计记录是否被更改
  3. 03查找租户决策日志中的缺口

MCP 相关

stdio MCP 服务提供 `record_decision`、`verify_decision`、`verify_completeness` 和 `list_decisions` 四种工具。它将记录写入配置的审计账本;未设置环境配置时则使用共享沙盒。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"shahidh68-audit-ledger": {
"command": "npx",
"args": [
"-y",
"audit-ledger-mcp"
],
"env": {
"AUDIT_API_URL": "<AUDIT_API_URL>",
"AUDIT_WRITE_KEY": "<AUDIT_WRITE_KEY>",
"AUDIT_READ_KEY": "<AUDIT_READ_KEY>",
"AUDIT_TIMEOUT_MS": "<AUDIT_TIMEOUT_MS>",
"AUDIT_RETRY_ATTEMPTS": "<AUDIT_RETRY_ATTEMPTS>",
"AUDIT_HMAC_KEY": "<AUDIT_HMAC_KEY>"
}
}
}
}
启动命令npx -y audit-ledger-mcp
需要配置的环境变量
AUDIT_API_URLYour deployed audit-ledger API endpoint (e.g. https://<api-id>.execute-api.<region>.amazonaws.com/prod). Leave unset to run in sandbox mode against the public shared tenant.
AUDIT_WRITE_KEY密钥Tenant write key for your deployed ledger. Required if AUDIT_API_URL is set and you want to call record_decision.
AUDIT_READ_KEY密钥Tenant read key for your deployed ledger. Required if AUDIT_API_URL is set and you want to call verify_decision or list_decisions.
AUDIT_TIMEOUT_MSHTTP timeout in milliseconds. Defaults to 5000.
AUDIT_RETRY_ATTEMPTSNumber of retry attempts on transient failures. Defaults to 3.
AUDIT_HMAC_KEY密钥Tenant secret used to HMAC-SHA256 PII and prompts locally before sending. Generate once per tenant (e.g. node -e "console.log(require('crypto').randomBytes(32).toString('hex'))") and keep it in your environment. The key never leaves your process. If unset, the MCP falls back to plain SHA-256 for backwards compatibility and logs a one-time deprecation warning; set this to switch to keyed hashing, which regulators (ICO/EDPB) expect for pseudonymisation.

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
npmaudit-ledger-mcp0.3.1

工具

4

收录的工具列表 · 更新于 2 周前

参数类型必填说明
event_idstring否用于标识此决策的可选 UUID v4。省略时自动生成。如果调用系统已有自己的决策 ID,则此项很有用。
timestampstring否作出决策时间的可选 ISO 8601 时间戳。默认为当前时间。仅在记录补录的决策时使用。
human_in_loopboolean是此决策生效前是否经过人工审核或批准。此项对于遵守《欧盟 AI 法案》第 14 条(人工监督)至关重要。
model_versionstring是生成此决策的模型及其版本(例如 'claude-sonnet-4.7'、'gpt-4o-2024-08-06')。可追溯性和模型风险审计所必需。
raw_user_inputstring是模型据以作出决策的用户输入(简历文本、交易、客户消息等)。在本地进行哈希后再传输——原始 PII 绝不会离开此 MCP 服务。
raw_system_promptstring是使用的系统提示词。在本地进行哈希后再传输——原始文本绝不会离开此 MCP 服务。
ai_decision_outputobject是模型生成的结构化决策。按原样存储。不得包含原始 PII——仅包含决策本身(分数、分类、建议、推理摘要)。

详细介绍

audit-ledger-mcp

将 Claude、Cursor、LangGraph 或你自己的 Agent 连接到 AI Audit Ledger。 这个 MCP 服务让 Agent 只需一行配置,就能使用工具在防篡改日志中记录、检查和列出决策。

它专为需要清晰记录 AI 决策的团队打造:满足《欧盟 AI 法案》第 12 条的日志记录要求、FCA SS1/23 模型风险证据要求,以及 GDPR 数据最小化要求。原始个人数据会先在本地进行哈希处理,然后才会发送,因此账本只能看到指纹。

npm License: Apache 2.0 MCP

AI Audit Ledger 系列。 这个 MCP 服务会将决策写入 账本,证明发生了什么 以及记录是否被更改。 AI Decision Evidence Hub 位于 账本之上,只读。它会将每条轻量级决策记录转化为 审计案例文件,展示已有的证据、仍缺少的内容、各项差距的负责人,以及当前准备度评分。系列项目: audit-ledger · audit-ledger-mcp · evidence-hub。

试用实时仪表板 →  ·  通过此 MCP 服务写入的 30 条合成决策,可供查询和验证。

使用 audit-ledger-mcp 的 LangGraph Agent — 分流、风险评估和人在回路流程分别调用 record_decision

LangGraph 工作流会在每个 Agent 步骤后调用 record_decision。三条审计事件已写入实时账本;每条都可以独立验证。


功能介绍

向任何兼容 MCP 的 Agent 提供四种工具:

工具功能
record_decision记录 AI 决策。在本地对输入进行哈希处理,然后写入账本。返回事件 ID。
verify_decision将存储的记录与不可变的 S3 Object Lock 副本进行交叉核对。返回 integrity_verified: true/false。
verify_completeness检测已删除或缺失的记录。将账本中每个租户的计数器与实际存在的行进行比较,并返回缺失的序列号。这回答了“你能证明日志完整吗?”
list_decisions查询近期决策,可按时间范围筛选。按租户隔离,依据 API 密钥确定范围。

每次调用最终都会在你部署的账本中生成符合监管要求的审计记录——DynamoDB 用于查询,S3 Object Lock COMPLIANCE 模式用于保存不可变副本,默认保留 7 年。


快速开始 — 无需配置

npx -y audit-ledger-mcp

就是这样。未设置环境变量时,服务会以沙盒模式启动,并将记录写入托管账本上的共享公共租户。你无需配置任何内容,就能试用所有工具——record_decision、verify_decision、verify_completeness、list_decisions。

沙盒模式启用时,你会在 stderr 中看到横幅:

[audit-ledger-mcp] ─────────────── SANDBOX MODE ───────────────
[audit-ledger-mcp] No AUDIT_API_URL configured.
[audit-ledger-mcp] Using the public sandbox at sandbox-public.
[audit-ledger-mcp]   View: https://d2pfirb2397ixy.cloudfront.net
[audit-ledger-mcp] Do NOT write real personal data...
沙盒属性
托管方github.com/shahidh68/audit-ledger(同一 AWS 部署)
租户sandbox-public(共享、公开)
速率限制每个 IP 每分钟 100 个请求
保留期限7 年(记录无法删除)
适用对象初步体验者、集成测试、框架演示
不适用场景生产数据、客户 PII、真实合规记录
零配置接入 Claude Desktop
{
  "mcpServers": {
    "audit-ledger-sandbox": {
      "command": "npx",
      "args": ["-y", "audit-ledger-mcp"]
    }
  }
}

重启 Claude Desktop。四种工具会立即出现在 MCP 菜单中。试着让 Claude“记录此决策:X 是否应获批准?”,然后查看记录是否出现在沙盒仪表板中。


生产环境安装

对于实际工作负载,请部署自己的审计账本,并将 MCP 服务指向它:

npm install -g audit-ledger-mcp

使用 API URL 和租户密钥进行配置(设置其中任意一个都会关闭沙箱模式)。出于向后兼容考虑,AUDIT_HMAC_KEY 在技术上是可选的,但强烈建议设置——请参阅下方该值上方的说明:

export AUDIT_API_URL="https://<api-id>.execute-api.<region>.amazonaws.com/prod"
export AUDIT_WRITE_KEY="<your-tenant-write-key>"
export AUDIT_READ_KEY="<your-tenant-read-key>"

# Strongly recommended. Tenant-held secret used to HMAC PII and prompts
# locally before sending. Generate once, store next to AUDIT_WRITE_KEY:
#   node -e "console.log(require('crypto').randomBytes(32).toString('hex'))"
# If unset, the MCP falls back to plain SHA-256 and warns once (back-compat).
export AUDIT_HMAC_KEY="<your-tenant-hmac-secret>"

# Optional
export AUDIT_TIMEOUT_MS=5000        # default 5000
export AUDIT_RETRY_ATTEMPTS=3       # default 3

完整模板位于 .env.example。


将其接入 Agent

Claude Desktop

编辑 claude_desktop_config.json(macOS:~/Library/Application Support/Claude/claude_desktop_config.json,Windows:%APPDATA%\Claude\claude_desktop_config.json):

{
  "mcpServers": {
    "audit-ledger": {
      "command": "npx",
      "args": ["-y", "audit-ledger-mcp"],
      "env": {
        "AUDIT_API_URL": "https://<api-id>.execute-api.<region>.amazonaws.com/prod",
        "AUDIT_WRITE_KEY": "<your-tenant-write-key>",
        "AUDIT_READ_KEY": "<your-tenant-read-key>",
        "AUDIT_HMAC_KEY": "<your-tenant-hmac-secret>"
      }
    }
  }
}

AUDIT_HMAC_KEY 是租户密钥,用于在任何负载离开 MCP 服务进程之前,在本地对 PII 进行密钥哈希。使用 node -e "console.log(require('crypto').randomBytes(32).toString('hex'))" 生成一次,并将结果存储在上方的 env 块中。MCP 不会传输此值,只会读取它。

重启 Claude Desktop。你会在 MCP 工具菜单中看到“audit-ledger”。向 Claude 提出类似 “记录此决定:我拒绝了该申请,因为……” 的请求,然后观察它自动调用 record_decision。

Cursor

在 Cursor 设置 → MCP → 添加服务:

{
  "mcpServers": {
    "audit-ledger": {
      "command": "npx",
      "args": ["-y", "audit-ledger-mcp"],
      "env": {
        "AUDIT_API_URL": "https://<api-id>.execute-api.<region>.amazonaws.com/prod",
        "AUDIT_WRITE_KEY": "<your-tenant-write-key>",
        "AUDIT_READ_KEY": "<your-tenant-read-key>",
        "AUDIT_HMAC_KEY": "<your-tenant-hmac-secret>"
      }
    }
  }
}
LangGraph(Python)

使用 langchain-mcp-adapters:

from langchain_mcp_adapters.client import MultiServerMCPClient
from langgraph.prebuilt import create_react_agent
from langchain_anthropic import ChatAnthropic
import os

client = MultiServerMCPClient({
    "audit-ledger": {
        "command": "npx",
        "args": ["-y", "audit-ledger-mcp"],
        "transport": "stdio",
        "env": {
            "AUDIT_API_URL":   os.environ["AUDIT_API_URL"],
            "AUDIT_WRITE_KEY": os.environ["AUDIT_WRITE_KEY"],
            "AUDIT_READ_KEY":  os.environ["AUDIT_READ_KEY"],
            "AUDIT_HMAC_KEY":  os.environ["AUDIT_HMAC_KEY"],
        },
    }
})

tools = await client.get_tools()
agent = create_react_agent(
    ChatAnthropic(model="claude-sonnet-4-7-20251022"),
    tools,
)

# The agent can now call record_decision, verify_decision, verify_completeness, list_decisions
result = await agent.ainvoke({
    "messages": [{"role": "user", "content": "Triage this loan application…"}]
})
自定义客户端(原始 MCP)
AUDIT_API_URL=... AUDIT_WRITE_KEY=... AUDIT_READ_KEY=... AUDIT_HMAC_KEY=... npx -y audit-ledger-mcp

该服务通过 stdio 使用 MCP 通信。请按照 MCP 规范发送 initialize、tools/list 和 tools/call 请求。


record_decision 调用流程

Agent                  audit-ledger-mcp                  AWS (your ledger)
  |                          |                                 |
  |--- record_decision ----->|                                 |
  |   raw_user_input         | (hash locally — no PII over     |
  |   raw_system_prompt      |  the wire from this point)      |
  |   decision_output        |                                 |
  |   human_in_loop          |                                 |
  |                          |--- HTTPS POST /audit/events --->|
  |                          |    {hashes + decision +         |
  |                          |     x-api-key}                  |
  |                          |                                 |
  |                          |<--- 202 Accepted ---------------|
  |                          |    { event_id, ... }            |
  |<--- event_id ------------|                                 |
  |     recorded_at          |                                 |
  |     note                 |                                 |

AWS 侧的存储通过 SQS → Processor Lambda → DynamoDB + S3 Object Lock 异步完成。完整流程请参阅主仓库的 ARCHITECTURE.md。


工具参考

record_decision

将 AI 决策记录到账本中。

参数类型必填备注
model_versionstring是例如 "claude-sonnet-4-7-20251022"
raw_system_promptstring是在本地进行哈希处理
raw_user_inputstring是在本地进行哈希处理
ai_decision_outputobject是按原样存储——不得包含原始 PII
human_in_loopboolean是对《欧盟 AI 法案》第 14 条至关重要
event_iduuid v4否如未提供则自动生成
timestampISO 8601否默认为当前时间
verify_decision

检查存储记录是否遭到篡改。

参数类型必填备注
event_iduuid v4是要验证的记录 ID

返回 DynamoDB 记录、S3 记录,以及 integrity_verified: true/false。

verify_completeness

检测缺失的记录。它是 verify_decision 的配套工具:前者证明一条现存记录未被篡改;此工具则证明没有记录被删除。

参数类型必填备注
frominteger否sequence_no 的包含式下限。默认为 1。
tointeger否sequence_no 的包含式上限。默认为租户当前计数器的值。
tenant_idstring否仅使用管理员读取密钥时才需要;否则会忽略。

返回请求的范围、预期与找到的记录数、缺失序列号列表,以及易于理解的说明。

{
  "tenant_id": "acme-prod",
  "range": { "from": 1, "to": 142 },
  "expected_count": 142,
  "found_count": 140,
  "missing": [47, 91],
  "note": "Found 2 missing sequence number(s) in range. Each gap represents a deleted, lost, or never-written record. Cross-check against burned_sequence log entries before treating as a deletion."
}
list_decisions

列出调用方租户的近期决策。

参数类型必填备注
fromISO 8601否默认为 7 天前
toISO 8601否默认为当前时间
limitinteger 1–500否默认为 100

安全

  • PII 哈希在此进程中计算,而非在账本中计算。 使用 UTF-8 编码和由你在环境中设置的 AUDIT_HMAC_KEY 作为密钥进行 HMAC-SHA256。密钥不会离开你的进程;只有 64 位十六进制摘要会被发送。对低熵值(姓名、电子邮件)使用普通 SHA-256,几秒内就能通过暴力破解;根据 ICO/EDPB 指南,这些值仍被视为个人数据,因此新安装默认使用带密钥的版本。为保持向后兼容,如果未设置 AUDIT_HMAC_KEY,MCP 会回退到普通 SHA-256,并在 stderr 上记录一次弃用警告;现有配置将继续照常运行。
  • 绝不记录 API 密钥。 API 密钥来自环境变量,通过 x-api-key 标头传递,绝不会回传给 Agent 或写入磁盘。
  • 两类密钥命名空间。 写入密钥不能读取;读取密钥不能写入。写入密钥泄露不会导致数据外泄;读取密钥泄露也无法植入伪造记录。
  • 错误会原样传递 HTTP 状态码。 速率限制、无效密钥和验证错误都会传递给 Agent,使其能够妥善应对,而不是盲目重试。

本项目不是什么

  • 不是法律建议。 这是用于生成审计证据的基础设施。这些证据是否满足任何特定监管义务,应由你的法律团队判断。
  • 不能替代模型风险审计。 它记录 AI 做了什么,而不判断其是否正确。
  • 不是偏差或公平性测试工具。 它是你现有测试之下的审计层。

配套项目:AI Decision Evidence Hub

此 MCP 服务会将决策写入账本——即记录发生了什么的不可变记录。AI Decision Evidence Hub 是账本之上的只读工作台。它回答审计员接下来会提出的问题:决策已记录,但证据是否足够完整,可以进行审查?

对于每项已记录的决策,它会生成:

  • 跨九类证据(模型、数据、政策、人工审核、监控、提示词、完整性、保留、决策)的审计就绪度评分(0–100);
  • 具体列出已有和缺失的证据,以及每项预期缺口的负责人;
  • 每项决策对应的审计资料包,可打印、保存为 PDF 或下载为 JSON;
  • 一个仪表板(与账本仪表板交叉链接),以及一个基于清单的解析器,可自动填充静态证据。

存在未解决的缺口很正常。账本会保持决策记录精简且可防篡改;Evidence Hub 则会展示使该决策达到审计就绪状态所需的后续证据。它通过 API 读取账本,绝不修改记录。基于 AWS 构建的无服务器架构(Lambda + DynamoDB)。请参阅其 客户指南 和管理员操作手册。

项目家族: audit-ledger(发生了什么) · audit-ledger-mcp(此服务——Agent 如何写入决策) · evidence-hub(审计就绪度)。


开发

git clone https://github.com/shahidh68/audit-ledger-mcp.git
cd audit-ledger-mcp
npm install
npm run build
npm test

该服务使用 TypeScript 编写,运行于 Node 20+,采用 ESM 和 stdio 传输,并使用 @modelcontextprotocol/sdk。


相关项目

  • shahidh68/audit-ledger — 此服务连接的 AWS 基础设施。包含 CDK 堆栈、Python 和 Node SDK、合规性仪表板以及完整的架构文档。
  • shahidh68/evidence-hub — 账本之上的审计工作台。它会为每项决策的证据评分,将未解决的缺口视为预期的后续工作,并生成可打印或下载的审计资料包。(客户指南 · 管理员操作手册)

许可证

Apache License 2.0 — 详见 LICENSE。

专利授权条款是有意设置的。合规基础设施与企业法务审查密切相关,因此明确的授权条款至关重要。


作者

由 Shahid 构建。在英国受监管的金融科技领域,现寻求 Principal AI Engineering 和 Head of AI Engineering 职位,以及兼职顾问合作机会。

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。