mcpField
G
GxP Gateway Audit

GxP Gateway Audit

本地服务
github.com/antonio-castellon法律与政务04 天前更新

关于 GxP Gateway Audit

GxP Gateway Audit 是用于审计 MCP 和 HTTP(S) API 调用、网关及 LLM 端点的代理。它面向 GLP 和受监管工作流支持,在客户自己的基础设施上保留哈希链审计记录。

主要功能

  1. 01哈希链 JSONL 审计记录
  2. 02中介 MCP 与 HTTPS 请求
  3. 03工具和路由允许/拒绝策略
  4. 04基于角色的访问及可选审批
  5. 05审计链验证与 JSON 导出
  6. 06配置初始化与校验

适用场景

  1. 01审计 MCP 主机与服务之间的调用
  2. 02记录 API 和 LLM 端点流量
  3. 03为写入操作设置原因和审批控制
  4. 04为审查验证审计日志完整性

MCP 相关

它可作为 MCP 主机与上游 MCP 服务之间的 stdio 代理,也可在配置监听后提供 HTTPS 服务。所有经其转发的调用(包括拒绝和失败)都会写入哈希链审计记录。

配置

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

mcp.json · 通用配置
{
"mcpServers": {
"antonio-castellon-mcp-glp-audit-proxy": {
"command": "uvx",
"args": [
"mcp-glp-audit-proxy"
],
"env": {
"GLP_CONFIG": "<GLP_CONFIG>",
"GLP_PRINCIPAL_ID": "<GLP_PRINCIPAL_ID>",
"GLP_PRINCIPAL_NAME": "<GLP_PRINCIPAL_NAME>",
"GLP_PRINCIPAL_ROLE": "<GLP_PRINCIPAL_ROLE>"
}
}
}
}
启动命令uvx mcp-glp-audit-proxy
需要配置的环境变量
GLP_CONFIGPath to the proxy JSON config (upstreams, policy, audit file).
GLP_PRINCIPAL_IDAuthenticated human id for this process. Stdio identity comes from the environment.
GLP_PRINCIPAL_NAMEPrinted name of the human principal.
GLP_PRINCIPAL_ROLEOne of operator, approver, qa, admin.

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

安装包
pypimcp-glp-audit-proxy0.4.0

工具

还没有获取到工具列表

本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。

详细介绍

mcp-name: io.github.antonio-castellon/mcp-glp-audit-proxy

最新版本 MIT 许可证 Python 3.11、3.12 和 3.13 MCP 代理

mcp-glp-audit-proxy。MCP 工具调用的防篡改审计追踪——社区版。

mcp-glp-audit-proxy

GxP Gateway Audit(软件包 mcp-glp-audit-proxy)可审计 MCP 和 HTTP(S) API、网关及大模型端点。社区版,v0.4.0。软件包名称、命令名称和 MCP Registry ID 均保持为 mcp-glp-audit-proxy。自 0.2.0 起的更改见 CHANGELOG.md。

监听器和所有远程 URL 均使用 TLS 1.3 的 HTTPS。纯 HTTP 请求会被拒绝。如果没有 listen 对象,进程仍会作为主机与其 MCP 服务之间的 stdio MCP 代理运行。

该项目旨在支持 GLP / 21 CFR Part 11 / EU GMP Annex 11 工作流。数据保留在客户的基础设施中。此软件包是开放核心。签名检查点、WORM 存储、PDF/CSV 报告、IQ/OQ 套件和 SSO/OAuth 属于 Pro 功能,不包含在此仓库中。个人 Part 11 电子签名不在范围内。社区版通过哈希链实现防篡改,但不提供签名。签名功能属于 Pro 版。

从客户端 / Agent、主机(Claude、Cursor、Grok、可自托管的大模型)通过 stdio JSON-RPC 进入 mcp-glp-audit-proxy 的流程。代理内部包含策略(允许 / 拒绝、原因、人工审批)、审批和审计写入器;审计记录为追加式 JSONL,采用 RFC 8785 和 SHA-256 链。代理随后通过 stdio 或 HTTPS(TLS 1.3)连接上游 MCP 服务(Excel、ELN、LIMS、数据库、仪器)。审计写入器会记录 JSONL 日志和 .head 旁文件。异机锚点保存外部副本(工单、邮件或 LIMS 记录)。

安装

需要 Python 3.11 或更高版本。

pip install mcp-glp-audit-proxy

从检出目录安装:

pip install -e ".[dev]"

mcp 依赖固定为 >=2.2.0,<3。该版本下限不受 GHSA-84m7-p3x7-pcfv 影响(受影响范围为 mcp >=1.8.0,<1.30.0 和 >=2.0.0,<2.2.0)。使用较旧 SDK 时,进程会拒绝启动。

运行

export GLP_PRINCIPAL_ID=operator-1
export GLP_PRINCIPAL_NAME="Ada Analyst"
export GLP_PRINCIPAL_ROLE=operator
mcp-glp-audit-proxy --config config.json

Stdio 身份来自环境变量(GLP_PRINCIPAL_ID、GLP_PRINCIPAL_NAME、GLP_PRINCIPAL_ROLE)。如果配置中没有 listen 对象,进程会从 stdin 读取以换行符分隔的 JSON-RPC,并将其写入 stdout,且不会打开套接字。如果设置了 listen,同一命令会提供 HTTPS 服务,且不会读取 stdio。mcp.json 中提供了 Cursor 代码片段。完整配置见 config.example.json。配置参考见 docs/manual-guides/README.md。

plugins.storage、plugins.signer、plugins.reporters 和 plugins.auth 用于选择入口点。默认值分别为 jsonl、unsigned、json 加 text,以及 env。env 会从 GLP_PRINCIPAL_* 或配置文件中返回主体。它不是身份提供方。未知插件,或其声明的许可功能未启用的插件,都会拒绝启动。工厂不会被调用。代理不会回退到其他后端。参见 docs/PLUGINS.md。

验证链并写入可搜索的 JSON 导出文件(如果链验证失败,则跳过导出):

mcp-glp-audit-proxy-verify data/audit.jsonl --json-export exports/audit.json
mcp-glp-audit-proxy-verify data/audit.jsonl --tool excel__write_cell --status ok
mcp-glp-audit-proxy-verify data/audit.jsonl --print-head

--print-head 会输出 seq=<n> entry_hash=<64 hex>。将该行复制到工单、电子邮件或 LIMS 记录中。之后可使用 --expect-head <seq>:<entry_hash> 或 --expect-head-file 检查(文件中可以保存同一行)。如果链的末端不同,命令会以 1 退出。旁路文件 data/audit.jsonl.head 会使删除末尾完整行的操作无法通过验证。能够同时编辑日志和旁路文件的人可以一起移动它们;外部副本才是控制手段。Community 通过哈希链实现防篡改检测,但不提供签名。签名功能属于 Pro。--pubkey 会将固定的公钥文件传递给获得许可的签名插件。如果没有获得许可的签名插件,检查会失败。传入 --licence 和 --client-id,或设置 GLP_LICENCE_PATH 和 GLP_CLIENT_ID,即可加载该签名插件。如果未提供许可路径,则不会读取许可文件。许可缺失或无效时,进程以 2 退出。未签名检查点仍为默认设置,且不会被视为已签名。日志和 .head 旁路文件打开时的权限模式为 0600。存储创建的日志目录权限模式为 0700。

配置

init 会询问审计日志路径、工具允许列表、主体(id、name、role)、保留期限配置和法律保全设置。它会写入 JSON 配置文件,该文件可由与启动时相同的加载器读取,权限模式为 0600。提示内容和文件均为 ASCII。该向导不会打开网络连接。如果目标位置已存在文件,除非你对覆盖提示回答 yes,否则不会更改该文件。

mcp-glp-audit-proxy init
mcp-glp-audit-proxy init /srv/glp/config.json

默认路径为 GLP_CONFIG(如果设置了该变量),否则为 config.json。代理读取的也是同一个文件。

config check 会加载配置,并在加载失败时输出通俗易懂的错误信息。文件加载成功时进程以 0 退出,失败时以 1 退出。它使用与启动时相同的加载器,包括 GLP_* 覆盖项。默认路径与 init 相同。

mcp-glp-audit-proxy config check
mcp-glp-audit-proxy config check config.json

获得许可的插件可以通过 mcp_glp_audit_proxy.wizard 入口点添加问题和验证步骤。未获得许可的插件不会被调用,也不会添加任何内容。参见 docs/PLUGINS.md。

许可文件存储在本地,不会发起网络调用。LM1 由三行组成:LM1、正文的 base64 编码,以及针对原始字节生成的 RSA-2048 PSS 签名的 base64 编码。LM2 由三行组成:LM2、正文的 base64 编码,以及针对原始字节生成的 64 字节 Ed25519 签名的 base64 编码;正文必须为紧凑的排序 JSON。LM1,以及未包含 features 列表的 LM2,会启用已安装的获许可插件所声明的功能。列出了 features 的 LM2 文件仅会启用所列名称。任何其他文件都会被拒绝。生产公钥位于 release_trust.json 中,并由 mcp_glp_audit_proxy.trust 中的 trusted_keys() 加载。指纹不是机器 ID。详情见 docs/PLUGINS.md。

记录内容

每次经由代理的调用(包括拒绝和失败)都会作为一个 JSON 对象写入仅追加的 JSONL 文件。每一行都是 RFC 8785 规范化 JSON。entry_hash 是移除 entry_hash 后该对象的 SHA-256。prev_hash 是上一条记录的哈希(第一条为 64 个零)。hash_algo 和 canonicalization 都存储在记录中。开放式架构见 schema/audit-record.schema.json。跨语言测试向量见 schema/jcs-test-vectors.json。

字段包括调用者(principal 的 ID、名称、角色)、工具、输入、输出、UTC 时间戳及 utc_offset、协议版本、可选的会话 ID、记录类别(gxp_data、access、technical、config)、写入原因,以及上一条记录的哈希。

架构 1.3.0 存储 transport(stdio 或 https)、channel(mcp 或 https)、flow(mcp2mcp、mcp2api、api2mcp、api2api、mcp2llm、api2llm,本地记录则为 null)、http、arguments_sha256 和 result_sha256。http 对象包含方法、路由模板、移除查询字符串后的路径、保留的标头、已剥离凭据的标头名称、请求体 SHA-256、body_mode、存储的请求体、状态、latency_ms 和 kind(api、llm 或 mcp)。查询字符串会被转发,但不会存储。1.0.0 和 1.1.0 的记录不包含后续新增的键。1.2.0 的记录不包含这两个 SHA-256 字段。旧版记录在同一哈希链中仍然有效。

GxP 审计轨迹就是该文件。Python logging 日志记录器 mcp_glp_audit_proxy.technical 会将方法、状态和记录类别写入标准错误流。它不是审计记录。参数不会写入其中。

策略

  • 允许列表和拒绝列表使用针对公开工具名称(excel__write_cell)的 shell 风格 glob。拒绝规则优先。空的允许列表会拒绝所有上游工具。
  • 角色包括 operator、approver、qa 和 admin。只有 operator 可以调用上游工具。qa 只能读取审计轨迹(glp_verify_chain、glp_search_audit、glp_export_audit)。approver 可以记录审批并读取审计轨迹。admin 可以更改策略并读取审计轨迹,但不能调用上游工具。
  • 审计不能关闭。带有 audit_enabled: false 的 glp_update_policy 会被拒绝并记录。
  • 写入工具(名称与 write_tools 匹配)默认需要提供原因。原因需通过 _meta["io.github.antonio-castellon/reason"] 或参数 _glp_reason 提供(在调用上游前会将其剥离)。
  • 可选的人为审批会暂缓写入,直到另一位 approver 角色人员记录含义为 approved 的审批。reviewed 会以状态 reviewed 保存,不授权写入。schema 1.1.0 之前写入的日志可能会将此决定显示为状态 approved、含义 reviewed;这些日志行仍可通过验证,且仍不授权写入。rejected 会拒绝审批。审批只能使用一次,与规范化的 {tool, arguments} 的 SHA-256 值绑定,并会过期(默认 3600 秒)。如果成功写入时提供了匹配的审批,即使在该次调用前已关闭 require_approval_for_writes,也会将该审批记录为已使用。上游调用失败不会消耗审批。记录标签为 approval。这不是电子签名。
  • HTTP 路由使用第二对列表:http_allow 和 http_deny。每个条目均为 METHOD /path,路径支持 shell 风格 glob(GET /v1/studies/*)。拒绝规则优先。空的 http_allow 会拒绝所有 HTTPS 路由,但不会拒绝 MCP 工具调用。只有 operator 可以调用 HTTPS 路由。
  • audit.body_mode 可设为 hash_only(新配置的默认值)、redacted 或 full。使用哪个值由客户和 QA 决定。body_mode 适用于 HTTPS 请求正文,以及 MCP 工具调用的参数和结果。始终记录原始请求正文的 SHA-256,并以相同方式记录 MCP 工具参数和结果的 SHA-256。hash_only 不存储正文内容或 MCP 载荷。redacted 会存储 JSON,并将 audit.redact_paths 中的路径替换为 ***(非 JSON 正文不存储明文)。full 会将解析后的 JSON 或 UTF-8 文本存储在哈希链记录中;full 还会将响应文本作为 response_body 存储在 response_sha256 旁边。日志文件权限为 0600。非 UTF-8 二进制内容只计算哈希,不作为请求正文存储。所有模式都会向客户端返回响应正文。没有 Content-Length 或带有 Transfer-Encoding 的写入请求会被拒绝,返回 411 并记录。使用 hash_only 和 redacted 模式时,审计轨迹可以证明载荷存在且未被篡改,但不会显示其内容;内容记录必须由目标系统保存(OECD No. 17 para 80)。
  • 正文大小限制默认为 1048576 字节。audit.max_body_bytes 可提高至 8388608。超出限制的正文会被拒绝,返回状态码 413,不会转发,并记录为 body_sha256 null。0.4.0 不支持流式传输。没有 Content-Length 的 GET 和 HEAD 请求正文为空。没有 Content-Length 或带有 Transfer-Encoding 的写入请求会被拒绝,返回 411 并记录。
  • HTTPS 写入(POST、PUT、PATCH、DELETE)在 require_reason_for_writes 为 true 时必须带有 X-Audit-Reason 标头。可选审批复用同一引擎。绑定哈希为规范化的 {tool, arguments},其中 tool 为 http:METHOD /route-template,arguments 为 body_sha256 和具体路径。审批人调用 glp_approve 或 POST /_glp/approve。reviewed 和 rejected 均不授权写入。
  • 默认采用失败时关闭策略。转发调用前会检查存储区。若成功调用上游后追加记录失败,则不会将上游载荷返回给主机。被拒绝和失败的调用仍会记录。如果上游可能已执行写入,请遵循 docs/RECONCILIATION_SOP.md。

协议

代理同时支持握手时期的 MCP 修订版本(2024-11-05、2025-03-26、2025-06-18、2025-11-25,使用 initialize)和规范版本 2026-07-28(使用 server/discover,无需 initialize,也无需会话)。仅当相应修订版本包含会话 ID 时,才会记录会话 ID。上游协议设置为 auto 时,会先尝试 server/discover,失败后再以 2025-11-25 版本执行 initialize。

对外提供的工具名称为 server__tool。资源 URI 会添加前缀 server:。含凭据的 _meta 键会被剥除,其名称会记录日志,但其值既不会存储,也不会转发。上游 stdio 会接收来自 MCP SDK 的安全环境变量允许列表,以及配置中的 env 块。

法规覆盖范围

mcp-glp-audit-proxy 的设计旨在支持以下审计追踪要求。是否满足要求仍取决于你的 SOP 和审核。逐条款矩阵见 docs/COVERAGE.md。规范和验证日志见 docs/STANDARDS.md。

HTTPS 身份认证有三种模式。mtls 会将客户端证书的 SHA-256 指纹映射到一个主体。bearer 会从私有文件中读取一个静态令牌,并在比较时不将令牌写入日志或记录。在 Linux 和 macOS 上,该文件权限必须为 0600。在 Windows 上,启动时会读取 NTFS ACL,并仅允许当前用户、SYSTEM 和 BUILTIN\Administrators 访问。如果 Everyone、Users、Authenticated Users 或任何其他主体具有访问权限,启动将被拒绝,并显示 icacls <file> /inheritance:r /grant:r "%USERNAME%:R" SYSTEM:F Administrators:F。mtls_and_bearer 要求两种认证都通过。没有未认证模式,也不会监听明文连接。共享 bearer 是一道门槛,但不是唯一用户 ID。FDA《数据完整性问题与解答》(2018):“当登录凭据被共享时,无法通过登录识别出唯一的个人。”WHO TRS 1033 11.9:不应使用共享登录或通用用户访问。只有通过这道门槛后,才会接受可选的 end_user_header,且仅当标头值是已配置的用户 ID 时才接受。

该软件包旨在支持 21 CFR 11.10(d) “限制系统访问权限,仅允许授权人员访问”以及 EU GMP Annex 11(2011)第 12.1 和 12.4 节。12.1:“应采取物理和/或逻辑控制措施,将计算机化系统的访问权限限制给授权人员。”12.4:“数据和文档管理系统的设计应能记录录入、更改、确认或删除数据的操作人员身份,以及日期和时间。”21 CFR 11.300 涉及电子签名中使用的识别代码和密码控制;电子签名不在范围内,因此 11.300 不在范围内,11.100(a) 也同样如此。符合这些预期的模式是按用户归属:每人使用一个客户端证书,或使用经过身份验证的网关提供的终端用户标头。共享 bearer 加上客户端提供的标头,其安全性仅取决于验证用户身份的网关。

框架代理可提供的帮助版本
OECD GLP No. 17 (3.4) / Swiss GLPV Annex 2始终启用、仅追加的审计追踪;记录谁/做了什么/何时/为何;仅管理员可更改设置;QA 只读角色;瑞士 10 年保留配置Community 核心版;WORM 保留和 PDF 报告包含在 Pro 中
FDA 21 CFR Part 11计算机生成、带时间戳、哈希链式的审计追踪(11.10(e));篡改检测;完整副本;权限检查。Community 通过哈希链实现防篡改。它未经签名。签名功能包含在 Pro 中。个人 Part 11 电子签名不在范围内。批准不等同于电子签名Community 核心版;报告、检查点签名和 SSO 包含在 Pro 中
EU GMP Annex 11 (2011; 2025 draft)记录变更及原因的审计追踪;角色、时区;不可关闭且可检测篡改(哈希链)的审计追踪;通过 glp_search_audit / glp_export_audit 搜索和导出;访问日志Community 核心版;审查工具和闲置自动注销包含在 Pro 中
MHRA / PIC/S PI 041-1 / WHO TRS 1033ALCOA+ 数据完整性、职责分离、每条记录附带元数据、真实副本导出Community 核心版;签名清单和验证包包含在 Pro 中
ISPE GAMP 5 / FDA CSA供应商文档、拟议的第 4 类配置组件、机器可读的测试证据Pro(验证包)
EU AI Act Art. 12, 19, 26(6)若客户的 AI 系统属于高风险系统,旨在支持第 12、19 和 26(6) 条:代理可提供由系统自动生成的日志,供提供者或部署者留存。仅凭此代理本身并不能使 AI 系统符合第 12 条。默认保留期限下限为 6 个月;除非欧盟或国家法律(尤其是数据保护法)另有规定,否则适用《AI 法案》规定的最低期限。高风险用途由客户分类。参见 http://data.europa.eu/eli/reg/2024/1689/ojCommunity
Crypto and time (RFC 8785, SHA-256, Ed25519/ECDSA, RFC 3161, eIDAS/ZertES, TLS 1.3)规范化哈希和加密传输Community 提供哈希链和 TLS;Pro 提供签名和时间戳
MCP authorization, OWASP LLM/Agentic不传递令牌、工具允许/拒绝列表、写入工具执行前审批、OAuth 2.1Community 提供允许列表和不传递令牌;Pro 提供 OAuth/SSO
ISO/IEC 42001, NIST AI RMF用于 AI 治理和监控的事件日志证据Community(仅提供支持性证据)

默认保留期限采用瑞士 GLP 配置:研究完成后保留 10 年,最低期限为 6 个月。minimum 配置可采用更短的年限,但不得少于 6 个月。设置法律保留标记后,将拒绝处置数据。JSONL 后端不支持删除。按保留期限实施 WORM 强制执行的后端属于 Pro。

限制

代理补充目标系统的审计追踪,但不能取代它。代理会记录网关活动,旨在支持审计追踪审查(搜索和导出)。代理不记录旧值和新值。

关闭 require_reason_for_writes 会移除原因采集功能(OECD No. 1 8.3.5,Annex 11 sec. 9,21 CFR 58.130(e));此更改本身会被记录。

Community JSONL 具有防篡改检测能力,但并非无法篡改:主机管理员可以删除文件;检测依赖 verify 以及外部锚定或备份(WHO TRS 1033 11.15/11.16,OECD No. 22 6.14)。

当系统无法保留自身审计追踪时,应将附加审计追踪作为合理、有记录且有时限的措施(WHO TRS 1033 11.12,OECD No. 22 6.13)。对于 GxP 用途,请将 require_ntp 设为 true。

记录仅可追加,并通过哈希链连接。缺失或被编辑的记录会导致代理停止(GxP 故障关闭),并触发严重警报。Community 不支持就地擦除或加密粉碎。擦除(GDPR Art. 17)属于客户流程:关闭当前分段,处理归档副本,然后开始新的分段。在选择 body_mode full 之前,应权衡擦除请求与法定保留义务(Art. 17(3)(b)、(c)、(d))。若要避免可擦除内容进入哈希链,请使用 hash_only 或 redacted。

Community 不会对静态日志进行加密。文件仅限所有者访问(0600,或在 Windows 上使用仅限所有者的 ACL)。请使用磁盘或卷加密,尤其是在使用 body_mode full 时。

body_mode 是全局设置,并非按路由设置。full 会在整个保留期限内存储请求和响应正文(其中可能包含健康数据;在瑞士 GLP 配置文件下,保留期为 10 年或更长)。

保留配置文件规定最低期限;代理不会删除记录。保留期结束后的处置属于客户流程。

故障关闭导致的停止会中断 AI 工具流量。请将其纳入应急计划。

除非设置 listen.auth_failure_limit,否则失败认证锁定功能处于关闭状态。regulatory-report 会将该配置项显示为未配置,并列出 OECD No. 25 para 14 和 Annex 11 draft 2025 11.7(草案,尚未生效),以便 QA 决定是否启用。默认情况下不会锁定。

配置更改(包括身份和角色)会在下一次审计/启动时记录(config_changed)。这些更改只有在重启时才会显示。require_reason_for_writes 启用时,请提供 --change-reason 或 GLP_CHANGE_REASON;如果缺少原因,进程仍会启动,记录中的原因会存为 null。

每条审计记录在所有 body_mode 下都会包含个人数据:主体 ID 和名称、角色、客户端证书指纹、使用 end_user_header 时的最终用户 ID、请求路径(可能包含 ID)、保留的请求标头(例如 user-agent)以及时间戳。hash_only 并不意味着匿名化:对于较短或容易猜测的正文内容,可以通过猜测来匹配未加盐的 SHA-256 哈希值。客户是控制者,并负责确定合法依据、body_mode、redact_paths 和保留期限。请参阅审计记录中的个人数据。

在 GLP 设施中验证

在 GLP 测试设施中,代理会传输和存储与 GLP 相关的记录,因此它本身也是一套由测试设施验证的计算机化系统(AGIT V4.0 C 类:需要验证的复杂系统)。开源 OQ 运行器、需求追溯矩阵、法规配置报告和 CHANGELOG 都是该验证的输入,但它们本身并不等同于验证。

审计追踪审查(AGIT 11.2):请在审查 SOP 中使用 glp_search_audit、glp_export_audit 和 verify。关闭后归档该软件包的说明见 docs/ARCHIVING.md。

系统要求

经 CI 测试,支持 Python 3.11、3.12 和 3.13。CI 在 Linux 上运行。相同的源代码也可在 macOS 和 Windows 上运行。请保持主机时钟同步(NTP),并防止未经授权的更改。用于 GxP 时,请将 require_ntp 设为 true。

磁盘:一条 hash_only 记录约占 1 KB。redacted 和 full 的大小会随负载增长。请按该大小乘以保留的调用次数规划,并预留约每 1,000 次调用增长 1 条记录大小的 1,000 倍空间。日志和其头文件必须位于同一个备份卷上。如果只恢复其中一个,启动时会拒绝运行,直到关闭该分段。

法规配置报告

mcp-glp-audit-proxy regulatory-report --config config.json 仅读取配置,并按组打印该配置是否支持每个映射条款。它不会启动服务、打开日志或使用网络。可使用 --format md 或 json、--out FILE、--profile swiss_glp 和 --applies glp,part11,ai_high_risk,gdpr_bodies。如果某个已检查行不受支持,--fail-on-gap 会以状态码 1 退出。最终评估由客户的 QA 负责。映射文件为 src/mcp_glp_audit_proxy/data/regulatory_map.json,该文件也会与 docs/COVERAGE.md 进行核对。

archive-manifest 会为日志、头部旁文件、分段文件以及存在时的警报文件编写索引。verify --manifest 可检查后续副本。archive-transfer 和 verify --manifest --received-by 会记录该归档包的保管情况。请参阅 docs/ARCHIVING.md。日常操作、备份和独立头部检查见 docs/OPERATIONS.md。

review <audit_file> --out FILE 会生成例外审查报告(--format json、md 或 csv)。CSV 每条记录占一行。报告不会复制正文。

离线运行的 verify、verify --json-export、archive-manifest、regulatory-report 和 review 均不会追加到实时审计日志。每个输出都包含一个 run 块。--run-log FILE 会将相同的块追加到单独的哈希链式日志中。使用 verify-run-log 检查该日志。通过运行中的网关执行的导出(glp_export_audit)仍会作为一条记录写入实时审计轨迹。

社区版和 Pro

此仓库为社区版。Pro 可作为授权/付费服务提供——请联系 [email protected]。

Pro 增加了 SQL 和 S3 WORM 后端、Ed25519 和 ECDSA 签名、RFC 3161 时间戳、PDF 和 CSV 审计员报告、IQ/OQ 验证包以及 SSO。它还包含适用于 mcp-advanced-excel 的 GLP 实验室数据包,可通过同一个离线许可证密钥解锁。免费的 mcp-advanced-excel 服务可读取和写入实验室电子表格。数据包则在此基础上增加 GLP 实验室所需的功能:来源哈希可将每个结果追溯到源文件、常见实验室导出格式的仪器模板、高级 LOD/LOQ 计算和摩尔单位换算、单次运行处理多个文件,以及 Ed25519 签名输出。

标记表示该版本包含相应功能。Pro 包含社区版的所有功能。只有在仅看标记会掩盖限制时才添加注释。缺少相应功能的社区版单元格会显示为普通的 :x:。此表中的内容均不链接到 Pro 源代码树。

能力社区版(此仓库)Pro(授权服务)
代理核心,支持两个协议时期:white_check_mark::white_check_mark: 可插入,不分叉
仅追加 JSONL 哈希链:white_check_mark::white_check_mark: 另支持 SQL/S3
PostgreSQL / MSSQL 仅追加存储:x::white_check_mark:
S3 Object Lock:x::white_check_mark:
验证 CLI 和可搜索的 JSON 导出:white_check_mark::white_check_mark:
纯文本验证清单:white_check_mark::white_check_mark:
PDF / CSV 审计员报告:x::white_check_mark:
审计跟踪审查工具(标记、审查员签字确认):x::white_check_mark:
DE / FR / EN 报告模板:x::white_check_mark:
写入工具的旧值/新值捕获:x::white_check_mark:
工具允许列表 / 拒绝列表:white_check_mark::white_check_mark:
HTTP 方法和路由策略:white_check_mark::white_check_mark:
HTTPS 监听器(TLS 1.3,不使用明文):white_check_mark::white_check_mark:
mTLS 客户端证书身份:white_check_mark::white_check_mark:
来自私有文件的静态 bearer token(文件权限为 0600,或在 Windows 上使用 NTFS ACL):white_check_mark::white_check_mark:
请求正文 SHA-256,可选记录脱敏正文或完整正文(完整正文还会存储响应文本):white_check_mark::white_check_mark:
跨 MCP、HTTPS API 和 LLM API 的网关流程:white_check_mark::white_check_mark:
HTTPS 监听器的 OIDC:x::white_check_mark:
本地角色(operator、approver、qa、admin):white_check_mark::white_check_mark:
写入前由人工审批:white_check_mark::white_check_mark:
Ed25519 / ECDSA 签名检查点:x::white_check_mark:
RFC 3161 时间戳:x::white_check_mark:
IQ/OQ 验证包:x::white_check_mark:
SSO / OAuth:x::white_check_mark:
Syslog(RFC 5424)/ SIEM 导出:x::white_check_mark:
密钥管理(KMS/HSM)、字段级加密和脱敏:x::white_check_mark:
FIPS 140-3 模式:x::x: 可按需提供
带包含性 / 一致性证明的 Merkle 日志:x::white_check_mark:
OpenTelemetry spans(技术遥测,不是审计记录):x::white_check_mark:
mcp-advanced-excel 的 GLP 实验室数据包(来源哈希、仪器模板、高级 LOD/LOQ 和摩尔单位、批处理、Ed25519 签名输出):x::white_check_mark:
使用 TLS 1.3 连接远程上游,不透传 token:white_check_mark::white_check_mark:
离线许可证文件,不回连:white_check_mark::white_check_mark: 读取相同的文件
配置向导和配置检查:white_check_mark::white_check_mark:
已于 2026-10-25 对照此仓库核实。社区版标记与代码一致:JSONL 存储、verify CLI、JSON 和文本报告器、glp_search_audit / glp_export_audit、允许和拒绝列表、HTTP 方法和路由策略、四种本地角色、作为 approval 存储的 glp_approve、未签名检查点、tlsutil.py 中及 HTTPS 监听器上的 TLS 1.3、mTLS 和静态 bearer 文件、body_mode、离线许可证加载器(LM1 和 LM2),以及 init / config check。此代码树中没有 HTTPS 监听器的 OIDC。专业版标记依据 docs/COVERAGE.md 中的版本列。此代码树之外的插件会声明 licence_feature。当许可证指纹与此安装的 client_id 及已许可插件匹配时,社区版会启用该功能。许可证格式见“配置”部分。此指纹不是机器 ID。此代码树未实现 PostgreSQL、MSSQL、S3 Object Lock、PDF/CSV、Ed25519/ECDSA、RFC 3161、IQ/OQ 包和 SSO/OAuth。个人 Part 11 电子签名不属于两个版本的范围。docs/COVERAGE.md 将 Syslog、KMS/HSM 和审核标记/签核列为专业版功能,但此代码树中没有这些功能。DE/FR/EN 模板、Merkle 日志、旧值/新值捕获和 OpenTelemetry spans 标记为专业版。FIPS 140-3 模式可按需提供。开放的 OQ 运行器(mcp-glp-audit-proxy-oq)不是 IQ/OQ 验证包。

插件入口点、AuditStore / Signer / Reporter 契约以及许可证文件见 docs/PLUGINS.md。

路线图

已发布的社区版项目见上述各节和 CHANGELOG.md。没有单独的路线图文件。

本地工具

工具使用者说明
glp_verify_chainqa、approver、admin检查链完整性。即使链已损坏,仍会返回报告。
glp_search_auditqa、approver、admin筛选条目。搜索操作的审计记录只存储筛选条件和数量,不会为每一行再存一份副本。
glp_export_auditqa、approver、admin带哈希清单的 JSON 电子导出。筛选后的导出会标记为 complete: false。链损坏时不会导出。
glp_approveapprover记录含义为 approved、reviewed 或 rejected 的操作。
glp_update_policyadmin追加配置事件。策略从日志重放。

手册

从五分钟终端审计指南开始:docs/manual-guides/QUICKSTART.md。Claude Desktop、Claude Code、Cursor、VS Code、Windsurf、Cline、Continue、通用 stdio 客户端、MCP Python SDK、LangChain、OpenAI Agents SDK、Docker、实验室 PC、共享工作站和离线安装的主机设置说明见 docs/manual-guides/。上游 MCP 服务必须只能通过此代理访问。相同页面还介绍了锚定、审批、插件选择和故障关闭锁存机制。

安全

请阅读 SAFETY.md。简而言之:故障时关闭,不透传令牌,从 _meta 中剥离机密,stdio 子进程不会继承父进程环境,审批不等同于电子签名,而 JSONL 文件只能防篡改,并非 WORM 存储。

开发

pip install -e ".[dev]"
python -m pytest -q

OQ 风格的报告运行器需要源代码检出(tests/ 和 docs/verification/rtm.yaml)。PyPI 安装包不包含该目录树。两个命令名称调用同一个运行器。两者都未弃用:mcp-glp-audit-proxy-oq 是已安装的控制台脚本,mcp-glp-audit-proxy oq-report 是模块子命令。在克隆仓库中运行:

mcp-glp-audit-proxy-oq --repo-root .
mcp-glp-audit-proxy oq-report --repo-root .

如果缺少检出目录,命令会以状态码 2 退出,不会启动 pytest。

CI 会在 Python 3.11、3.12 和 3.13 上运行相同的测试套件(.github/workflows/ci.yml)。

MCP 注册表

server.json 将此服务命名为 io.github.antonio-castellon/mcp-glp-audit-proxy,用于官方 MCP 注册表。此文件首行的标记是注册表检查标记。

许可证

MIT。版权所有 (c) 2026 Antonio Castellon / Castellon.CH。详见 LICENSE。

如何贡献请见 CONTRIBUTING.md。行为准则见 CODE_OF_CONDUCT.md。漏洞报告请通过 SECURITY.md 提交,不要在公开议题中提交。

评论

支持 Markdown

第一次接触 MCP?

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

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