关于 GxP Gateway Audit
GxP Gateway Audit 是用于审计 MCP 和 HTTP(S) API 调用、网关及 LLM 端点的代理。它面向 GLP 和受监管工作流支持,在客户自己的基础设施上保留哈希链审计记录。
主要功能
- 01哈希链 JSONL 审计记录
- 02中介 MCP 与 HTTPS 请求
- 03工具和路由允许/拒绝策略
- 04基于角色的访问及可选审批
- 05审计链验证与 JSON 导出
- 06配置初始化与校验
适用场景
- 01审计 MCP 主机与服务之间的调用
- 02记录 API 和 LLM 端点流量
- 03为写入操作设置原因和审批控制
- 04为审查验证审计日志完整性
MCP 相关
它可作为 MCP 主机与上游 MCP 服务之间的 stdio 代理,也可在配置监听后提供 HTTPS 服务。所有经其转发的调用(包括拒绝和失败)都会写入哈希链审计记录。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
uvx mcp-glp-audit-proxyGLP_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+)。各客户端的配置文件位置不同,请参考客户端文档。
工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
mcp-name: io.github.antonio-castellon/mcp-glp-audit-proxy
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 版。
安装
需要 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_sha256null。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 1033 | ALCOA+ 数据完整性、职责分离、每条记录附带元数据、真实副本导出 | 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/oj | Community |
| 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.1 | Community 提供允许列表和不传递令牌;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_chain | qa、approver、admin | 检查链完整性。即使链已损坏,仍会返回报告。 |
glp_search_audit | qa、approver、admin | 筛选条目。搜索操作的审计记录只存储筛选条件和数量,不会为每一行再存一份副本。 |
glp_export_audit | qa、approver、admin | 带哈希清单的 JSON 电子导出。筛选后的导出会标记为 complete: false。链损坏时不会导出。 |
glp_approve | approver | 记录含义为 approved、reviewed 或 rejected 的操作。 |
glp_update_policy | admin | 追加配置事件。策略从日志重放。 |
手册
从五分钟终端审计指南开始: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 提交,不要在公开议题中提交。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。