mcpField
H
Hook Conformance

Hook Conformance

本地服务
studiomeyer.io开发工具01 周前更新

关于 Hook Conformance

Hook Conformance 是用于审计 MCP 服务是否适合在 Claude Code 生命周期钩子中调用其工具的命令行测试工具,面向服务开发者和维护者。它检查幂等性、副作用、延迟、确定性及数据处理文档,并生成审计报告。

主要功能

  1. 01审计工具调用生命周期钩子适用性
  2. 02检查幂等性与输出确定性
  3. 03检测只读工具的状态变更
  4. 04测量端到端延迟
  5. 05检查数据流与保留说明
  6. 06输出人类可读、JSON 或 JUnit 报告

适用场景

  1. 01发布前检查 MCP 服务工具
  2. 02评估工具用于停止或提交钩子的安全性
  3. 03排查审计失败并查看修复说明

MCP 相关

这是用于审计其他 MCP 服务的命令行工具,本身并不实现 MCP 服务。它可通过配置连接目标服务并运行审计套件。

配置

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

mcp.json · 通用配置
{
"mcpServers": {
"hook-conformance": {
"command": "npx",
"args": [
"-y",
"mcp-hook-conformance"
]
}
}
}
启动命令npx -y mcp-hook-conformance

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

安装包
npmmcp-hook-conformance0.1.3

工具

还没有获取到工具列表

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

详细介绍

StudioMeyer MCP Stack 的一部分 — 于马略卡岛打造 🌴 · 如果你在使用,请点个 ⭐

mcp-hook-conformance

npm version npm downloads License Last commit GitHub stars 用于测试的 CLI,可审计任意 MCP 服务是否已准备好支持 Claude Code v2.1.118 的 mcp_tool 生命周期钩子。

第三块基石:

  • mcp-protocol-conformance 回答:服务是否支持该协议?
  • mcp-server-attestation 回答:谁为这个服务签名?
  • mcp-hook-conformance 回答:从 Stop、PreCompact 或 UserPromptSubmit 钩子调用这个工具是否安全?

我们想说的话

过去两年,我们一直在为自己打造工具和系统。这个仓库规模小、星标少,并不是因为它刚刚创建,而是因为我们直到最近才决定分享已构建的成果。这不是一次全新的尝试,而是一段漫长历程,最近才有了提交记录。

我们喜欢构建和分享,不喜欢社交媒体策略、增长技巧,也不热衷于追逐星标和关注者。所以这个仓库规模不大。代码是真实的,确实有人在用,问题也会得到答复。欢迎自行判断。

如果它对你有帮助,分享、测试和反馈都能帮到我们。如果你觉得它还有改进空间,提交 issue 会更有帮助。如果你用它构建了什么,欢迎发邮件告诉我们:[email protected]。这真的会让我们开心一整天。

来自马略卡岛帕尔马的一间小工作室。

安装

npm install -g mcp-hook-conformance

也可以不安装,直接运行:

npx mcp-hook-conformance check ./hook-conformance.config.json

快速开始

# 1. Scaffold a config
npx mcp-hook-conformance init --server-name my-mcp-server

# 2. Edit hook-conformance.config.json (point command/args at your server)

# 3. Run the audit
npx mcp-hook-conformance check ./hook-conformance.config.json

退出码:

  • 0 审计通过(没有 FAIL)
  • 1 审计至少发现一项 FAIL
  • 2 配置错误(缺少文件、架构无效、套件名称未知)

子命令

子命令参数说明
check<config-path> [--output=human|json|junit] [--suite=...] [--tool=<name>] [--tries=<n>]运行审计;将报告输出到 stdout。
init[--server-name=<name>] [--force]将示例 hook-conformance.config.json 写入当前工作目录。
explain<finding-code>输出某项发现的完整说明和修复方法(例如 IDEMP-001)。
version-info—输出工具版本和支持的 MCP-spec 范围。(别名:version。)

这是一个 CLI,不是 MCP 服务。 不要通过 mcp-inspector 运行 mcp-hook-conformance——该包声明 mcp.specVersion 是为了说明它审计的目标,而不是因为它本身支持 MCP。按设计,Inspector 会在 dist/index.js(库的导出文件)上遇到 EACCES。

审计套件

套件检查内容权重
idempotency相同输入执行 N 次会产生相同输出;除非有注释说明,否则不应包含 UUID 或时间戳。30
side-effects只读工具不得修改服务状态。需要配置 stateProbe。25
latencyp50 < 30s、p95 < 60s(可配置)。预热调用 1 次后采样 5 次。20
determinism多次调用的响应结构保持稳定;不应有浮点数漂移。15
dsgvo工具描述提及数据流、保留或删除(基于完整单词的启发式判断)。10

套件评分:PASS = 100、WARN = 60、INDETERMINATE = 50、FAIL = 0。 工具得分 = 已配置套件的加权平均分。 汇总得分 = 工具得分的平均值。

配置格式

{
  "$schema": "https://studiomeyer-io.github.io/mcp-hook-conformance/config.schema.json",
  "server": {
    "name": "my-mcp-server",
    "transport": "stdio",
    "command": "npx",
    "args": ["-y", "my-mcp-server"],
    "env": {}
  },
  "suites": ["idempotency", "latency", "determinism", "side-effects", "dsgvo"],
  "tries": 3,
  "thresholds": {
    "latencyP50Ms": 30000,
    "latencyP95Ms": 60000
  },
  "probes": [
    {
      "name": "search_things",
      "args": { "query": "audit-fixed-input" },
      "stateProbe": {
        "tool": "list_things",
        "args": {}
      }
    }
  ],
  "toolFilter": ["search_things", "get_thing"]
}

probes 用于为每个工具固定特定参数,并为只读工具设置 stateProbe,以便副作用套件检测变更。如果没有 stateProbe,副作用套件会对该工具返回 INDETERMINATE。

发现代码

代码套件严重性标题
IDEMP-001idempotencyFAIL相同调用的工具输出不一致
IDEMP-002idempotencyWARN响应包含时间戳,但未标注 nondeterministic
IDEMP-003idempotencyWARN响应包含 UUID/随机 ID,但未标注 nondeterministic
LAT-001latencyFAIL工具超出 p95 延迟预算
LAT-002latencyWARN工具 p50 延迟超过 30 秒
DET-001determinismFAIL多次调用之间的浮点输出存在偏差
DET-002determinismWARN多次调用之间的响应结构不一致
SIDE-001side-effectsFAIL只读工具产生了状态差异
SIDE-002side-effectsINDETERMINATE未配置用于副作用检测的状态探针
DSGVO-001dsgvoFAIL破坏性工具缺少删除/保留文档
DSGVO-002dsgvoWARN工具描述缺少数据流关键词

运行 mcp-hook-conformance explain <code> 查看完整的修复说明。

兼容性

组件版本
MCP 规范2025-06-18
Claude Code>= 2.1.118 (mcp_tool lifecycle hooks)
Node>= 20.0.0
@modelcontextprotocol/sdk^1.29.0

已测试的传输方式:

  • stdio(主要)
  • HTTP streamable(实验性,审计语义与 stdio 相同)

参考冒烟测试

tests/smoke/ 套件会针对 mcp-nex 和 mcp-crm 的生产租户运行审计。选择加入:

RUN_SMOKE_TESTS=1 npm run test:smoke

快照偏差会触发人工审核,而不会导致 CI 失败。

局限性(请阅读)

  • 副作用检测不是完全隔离的。 如果没有 stateProbe,我们无法通过黑盒证明只读工具是纯函数。我们会返回 INDETERMINATE,而不是误报 FAIL。
  • 延迟是 stdio 端到端往返延迟。 包含 JSON-RPC 封装,不只是纯计算耗时。
  • DSGVO 套件采用关键词启发式检测。 它能可靠地发现文档缺失;“看起来合规”并非法律建议。
  • 不会自动修复。 此工具只报告发现的问题;需要你自行修复。

关于 StudioMeyer

StudioMeyer 是一家位于马略卡岛帕尔马的 AI 与设计工作室,为全球客户提供服务。我们为中小型企业打造定制网站和 AI 基础设施。生产技术栈基于 Claude Agent SDK、MCP 和 n8n,并使用 Sentry、Langfuse 和 LangGraph 进行可观测性管理,同时配备自研的防护层。

许可证

MIT © 2026 Matthias Meyer(StudioMeyer)

评论

支持 Markdown

第一次接触 MCP?

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

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